Загрузка файла PHP, файлы исчезают из / tmp перед перемещением_файлов - PullRequest
15 голосов
/ 30 ноября 2009

У меня есть очень простой скрипт загрузки, вероятно, снятый со страницы функции 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 просто нет.

Ответы [ 13 ]

10 голосов
/ 29 декабря 2009

1) Содержат ли post_max_size и upload_max_filesize более высокое значение, чем размер файла, который вы пытаетесь загрузить?

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

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

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

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

6 голосов
/ 30 ноября 2009

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

1 голос
/ 07 мая 2012

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

1 голос
/ 24 апреля 2012

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

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

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

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

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

1 голос
/ 27 сентября 2011

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

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

bool move_uploaded_file ( string $filename , string $destination )
0 голосов
/ 14 апреля 2013

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

0 голосов
/ 11 июля 2012

Простой тест, выполняемый непосредственно перед функцией 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"]);
0 голосов
/ 14 ноября 2010

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

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

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

0 голосов
/ 07 апреля 2010

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

0 голосов
/ 30 ноября 2009

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

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

...