Загрузка файла 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 ]

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

Вы используете возвращаемое значение 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;
}
0 голосов
/ 30 ноября 2009

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

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

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

Ваш form должен использовать тег, подобный этому:

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

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

...