move_uploaded_file зависает? - PullRequest
       7

move_uploaded_file зависает?

0 голосов
/ 13 июня 2009

Кажется, у меня странная ошибка, которую я просто не могу понять. Мой веб-сайт работал на одном сервере, но когда я перевел его на новый, он перестал работать. Я считаю, что сузил ошибку до этой строки кода:

$ret = move_uploaded_file($tmp_name, $orig_path);

Это выполняется с помощью вызова AJAX, поэтому его немного сложно отладить, но скрипт может отправить обратно код ошибки, и тогда мой JavaScript alert сделает это. Итак, я обернул его в два из этих операторов отладки:

echo json_encode(array(

    'success' => false,

    'errno' => $tmp_name.' -> '.$orig_path,

));

exit;



$ret = move_uploaded_file($tmp_name, $orig_path);



echo json_encode(array(

    'success' => false,

    'errno' => 'no error',

));

exit;

Первый работает нормально и выдает что-то вроде:

error /tmp/phpk3RICU -> /home/username/Websites/website/photos/o/2-4a3354dd017a9.jpg

Возможно, я немного новичок в Linux, но на самом деле я не могу найти /tmp/phpk3RICU в моей системе (удаляется ли он, как только скрипт завершается, или как?). Подробнее об этом через секунду.

Если я удаляю первую проверку отладки и запускаю move_uploaded_file, вторая проверка отладки, кажется, никогда не выполняется, что заставляет меня поверить, что move_uploaded_file зависает.

Если вместо использования $tmp_name я использую файл, который я знаю, не существует, то 2-ая проверка ДОЛЖНА выполняться. Так что ... похоже, что он просто не хочет перемещать этот tmp-файл, но не сообщает об ошибке.

Я запускаю свежую установку стека LAMP на мою машину Unbutu, установленную через apt-get ... дайте мне знать, если вам нужна дополнительная информация.

Оу ... и не знаю, имеет ли это отношение, но файл загружается через flash.

Ответы [ 3 ]

1 голос
/ 13 июня 2009

Попробуйте сказать PHP, чтобы он выплевывал все ошибки:

error_reporting(E_ALL);

Это может быть несоответствие конфигурации, которое может нарушить ее на одном из ваших серверов Со страницы move_uploaded_file() :

Примечание: move_uploaded_file() это оба безопасный режим и open_basedir в курсе. Тем не менее, ограничения устанавливаются только на пути назначения, чтобы позволить перемещение загруженных файлов, в которых имя файла может конфликтовать с таким ограничения. move_uploaded_file() обеспечивает безопасность этой операции разрешив загружать только эти файлы через PHP для перемещения.

1 голос
/ 13 июня 2009

Вы загружаете файл через AJAX-вызов? Загруженные файлы удаляются, как только скрипт, в который вы их загрузили, завершает работу - поэтому вы не можете найти его в /tmp.

0 голосов
/ 13 июня 2009

Тьфу. Проблема была с разрешениями. 755 было достаточно на другом сервере, но не для этого сервера, кажется ... не совсем уверен, почему, я думаю, PHP работает под другим пользователем? Я не совсем уверен, как работает весь материал с разрешениями. Что меня действительно поражает, так это то, что mkdir и move_uploaded_file не потерпели неудачу и вернули false ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...