samoilenkoevgeniy
@samoilenkoevgeniy
Lead Full-Stack Web Developer

Почему не работает move_uploaded_file при загрузке через iframe?

В общем, ситуация:
Мне нужно без перезагрузки заливать файлы на сервер, для этого стал использовать iframe (Другие решения находил, но они почему-то не прижились).

Меня все устраивало, но решил повторить это же решение в другом месте - перестало работать, при этом - скрипту передается файл (вывожу имя загруженного файла), путь к файлу прописан и работает в других местах.

Код HTML:
<form method='post' enctype='multipart/form-data' action='/handlers/hUploadDocument.php' target='fileFrame'>
                                   <input type='file' id='img_src'  name='file' />
                                   <input type='text' name='name' />
                                   <input type='submit' value='Загрузить' />
                                </form>
                                <iframe style='' id='fileFrame' name='fileFrame'>

                                </iframe>


Код php:

$path_info = pathinfo($_FILES['file']['name']);
        $ext = $path_info['extension'];
        $ext = strtolower($ext);
        $valid_ext = array('doc','docx','xls','xlsx','pdf','jpg', 'jpeg', 'png', 'ppt', 'pptx', 'tiff', 'zip', 'rar'); // допустимые расширения
        if(in_array($ext, $valid_ext)){
            $filename = md5(time().$_FILES['file']['name']).'.'.$ext; // переименовываем файлик

            $path_file = '../docs/'.$_FILES['file']['name'];
            echo $path_file."<br />";
            //echo $_FILES['file']['name'];

            if(!move_uploaded_file($_FILES['file']['name'], $path_file)){
                echo 'Файл не загружен. Повторите попытку';
            }else{
                // дальнейшие дела
            }
        }else{
            echo 'Недопустимый формат файла. '.$ext;
        }
    }
  • Вопрос задан
  • 3337 просмотров
Пригласить эксперта
Ответы на вопрос 1
KOLANICH
@KOLANICH
Знаю JS, PHP, C++, C#
1 от iframe это не зависит: move_uploaded_file выполняется на сервере
2 заливай яваскриптом, а не фреймами.
3 код - явный копипаст
4 переименовывать файл в md5 нельзя - легко предугадать и проэксалуатировать при наличии lfi (да, время подбирается, а к тому же его может светить сервер в заголовках). Php сам заботится об именовании: tmp_name и есть безопасное имя (если для его генерации используется безопасный prg).
5 файл имеет имя tmp_name, name - это имя из заголовков.

Откуда вы такие берётесь? Нельзя не читать документацию.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы