Загрузка в php - PullRequest
       66

Загрузка в php

1 голос
/ 16 ноября 2009

Я изучаю книгу О'Рейли «Изучение PHP и MySQL», 2-е изд. Микеле Дэвис и Джон Филлипс.

Я застрял на примере 11-28. Цель состоит в том, чтобы загрузить изображение и переместить его из /tmp в папку для загрузки, если оно удовлетворяет определенным условиям: размеру файла, типу и тому, был ли он загружен. Это хранится на моем домашнем сервере Ubuntu.

Форма здесь , а код здесь . Трудно заставить его появиться.

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

Warning: unlink() [function.unlink]: No such file or directory in /home/luna/public_html/learn_php/up_urs.php on line 10

Когда я отправляю файл больше maxsize, я получаю сообщение об ошибке:

Error. File must be less than 28480 bytes.

Когда я отправляю файл неправильного типа, я получаю сообщение об ошибке:

You may only upload .gif & .jpg files.

Когда я отправляю файл правильного типа и размера, я получаю следующее предупреждение и мое сообщение ОК:

Warning: move_uploaded_file(learn_php/uploads/) [function.move-uploaded-file]: failed to open stream: No such file or directory in /home/luna/public_html/learn_php/up_urs.php on line 21

Warning: move_uploaded_file() [function.move-uploaded-file]: Unable to move '/tmp/php4Mhykl' to 'learn_php/uploads/' in /home/luna/public_html/learn_php/up_urs.php on line 21 Thanks for your upload.

Что я пробовал:

  • Я думал, что проблема была в разрешениях, но изменение каталога learn_php на 777 не имело значения, поэтому я изменил его обратно на 755.
  • Изменение пути с «загрузки» на /home/luna/public_html/learn_php/uploads
  • Использование getcwd() до и после команд unlink & move_uploaded_file, но это только сказало мне, что я был в learn_php...
  • Я пытался раскомментировать //print_r($_FILES);, но мне ничего не показывалось после нажатия кнопки Отправить.

Не уверен, что искать сейчас. Спасибо за любую помощь:)

Ответы [ 4 ]

2 голосов
/ 16 ноября 2009

Первая ошибка, которую вы видите, связана с тем, что вы пытаетесь отсоединить файл, который не существует в строке 10. После того, как вы выполните проверку is_uploaded_file(), вы должны сделать быстрый if ( isset($_FILES['upload_file']['tmp_name']) ) перед выполнением отмены связи.

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

Как новичок, я бы также порекомендовал проверить возвращаемые значения этих функций, чтобы вы не возвращали «все хорошо», когда по какой-то причине все действительно не удалось. Начните вводить код как if ( !move_uploaded_file($_FILES['upload_file']['tmp_name'], "/path/to/learn_php/uploads/".$_files['upload_file']['name']) ) { $error = "Could not move the file to the uploads directory."; } else { print "All good, thanks for the upload."; exit(); }

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

Предупреждение: move_uploaded_file () [function.move-uploaded-file]: невозможно переместить '/ tmp / php4Mhykl' в 'learn_php / uploads /' в /home/luna/public_html/learn_php/up_urs.php по линии 21

Это говорит о том, что папка, в которую вы пытаетесь переместиться (learn_php / uploads /), не существует. Дважды проверьте, что вы создали эту папку на вашем сервере.

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

Вместо того, чтобы угадывать путь к коду, попробуйте поработать сверху вниз.

$uploadpath=$_SERVER['DOCUMENT_ROOT'].'\learn_php\uploads\';

Я могу ошибаться, поскольку вы не опубликовали свой источник, но у вас отсутствует косая черта перед каталогом, поэтому он может пытаться сохранить его в \learn_php\learn_php\uploads\, который не существует, поскольку файл PHP уже находится в этот каталог, поэтому он пытается получить доступ к подкаталогу.

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

http://php.net/manual/en/features.file-upload.php

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

Смотрите мой ответ здесь . Это даст вам функцию для поиска текущего корневого каталога, который вы можете использовать в качестве префикса для загрузки файлов и манипуляций с изображениями.

Затем, перед запуском unlink, сначала выполните проверку is_file () (и перед перемещением вы можете запустить ее, чтобы убедиться, что она существует в tmp, если вы параноик)

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