Загрузка файла PHP, файлы, исчезающие из / tmp перед move_uploaded_files

У меня очень простой сценарий загрузки, возможно, снятый прямо с страницы функций php.net/move_upload_files.

move_uploaded_file() не удалось, поскольку он не может найти файл tmp в папке tmp. Но я ЗНАЮ, что он помещается туда, но удаляется до того, как move_upload_file() может работать с ним в моем скрипте. Я знаю, что он помещается туда, так как я могу видеть файл там, когда большой файл отправляется на сервер.

Также $_FILES содержит правильные данные для файла, который я только что загрузил.

Кто-нибудь знает, почему временный файл удаляется из / tmp, прежде чем у меня есть возможность его обработать?

Вот базовый код, который я использую.

 if(move_uploaded_file($_FILES['userfile']['tmp_name'], $upload_file)) { $result['error'] = 'false'; $result['file_loc'] = $upload_file; } else { $result['error'] = 'true'; } 

Вывод print_r($_FILES) выглядит так:

 [userfile] => Array ( [name] => switchsolo.png [type] => image/png [tmp_name] => /tmp/phpIyKRl5 [error] => 0 [size] => 6690 ) 

Но / tmp / phpIyKRl5 просто нет.

1) Имеются ли значения post_max_size и upload_max_filesize выше, чем размер файла, который вы пытаетесь загрузить?

2) Выполняет ли ваш сценарий загрузки больше времени для выполнения, чем позволяет значение переменной max_execution_time?

3) Я предполагаю, что ваш сценарий загрузки не потребляет столько памяти, сколько позволяет переменная memory_limit. Когда клиент загружает файл на сервер, тогда сервер, вероятно, держит его в памяти, делая это. Я не уверен, что это каким-то образом влияет на ограничение переменной memory_limit в php.ini.

Эти переменные могут быть изменены в php.ini и / или .htaccess или с помощью ini_set ().

Надеюсь, это поможет.

Файл будет удален после завершения выполнения скрипта. Если вы запустите свой скрипт, а затем проверьте папку / tmp /, файл не будет там ни на что.

Я пробовал http://www.w3schools.com/php/php_file_upload.asp И я наткнулся на ту же ошибку.

В моем случае добавление «./» перед $ destination решило проблему.

 bool move_uploaded_file ( string $filename , string $destination ) 

Также может быть, что папка назначения не существует или у вас нет разрешения на запись.

У меня тоже была эта проблема, наткнулся на этот сайт для решения – не получил этого;)

Я получал правильную информацию при просмотре print_r($_FILES) но не смог выполнить move_uploaded_file

Я решил проблему, проверив $upload_file пути $upload_file в функции move_uploaded_file – убедитесь, что он прав, иначе он не будет работать (мой был неправильным).

Кроме того, файл во временном расположении автоматически удаляется, я думаю, что так работает PHP.

Надеюсь, это помогло.

Вы на 100% уверены, что файл действительно создан в / tmp? Если у вас нет разрешения на запись (или пользователь запускает сценарий), файл не будет записан в / tmp, но (я предполагаю) вы увидите его во время загрузки, хотя на самом деле это не происходит, когда загрузка заканчивается.

Изменить: $ _FILES ['file'] ['error'] – Значение: 7; Не удалось записать файл на диск. Представлен в PHP 5.1.0. Поэтому проверьте свою PHP-версию. Если это ниже 5.1, запись на диск может быть вашей проблемой.

У меня была эта проблема. В моем случае php загружался в неправильную папку tmp. Вместо использования домена tmp (в виртуальном хосте на plesk) он загружался прямо в временную папку ОС.

Проверьте настройки временных папок

Для справки в будущем это также может произойти, когда Apache не имеет доступа к целевому каталогу (не забудьте изменить ACL!).

У меня была та же проблема, где «tmp_name» скажет, что она хранится в '/ private / var / tmp /', но файл там не существует.

Мне пришлось добавить «E» в мой «порядок переменных» в php.ini; variables_order Значение по умолчанию: "EGPCS"

Надеюсь это поможет.

Простой тест, выполняемый непосредственно перед функцией move_uploaded_file ():

 if (!file_exists("upload")) { if (mkdir("upload")) { echo "Upload directory created!"; } else { die( "Invalid upload directory!" ); } } move_uploaded_file($_FILES["file"]["tmp_name"], "upload/" . $_FILES["file"]["name"]); 

будьте осторожны с вашим $ upload_file. возможно, это было отсутствие «/» при конкатенации пути к папке и имени загруженного файла.

В вашей form должен использоваться тег:

 <form method="post" enctype="multipart/form-data" action="..."> 

Используйте multiple/form-data как enctype .

Вы используете возвращаемое значение move_uploaded_file() неправильным образом:

 if(move_uploaded_file($_FILES['userfile']['tmp_name'], $upload_file)) { $result['error'] = 'true'; } else { $result['error'] = 'false'; $result['file_loc'] = $upload_file; }