PHP move_uploaded_file() терпит неудачу без причины
Я не могу заставить загрузку php работать. PHP 5.4.45 Centos 6.7. Apache 2.2.27.
У меня есть HTML-файл:
<form enctype="multipart/form-data" action="test2.php" method="POST">
Send this file: <input name="userfile" type="file" />
<input type="submit" value="Send File" name="submit"/>
</form>
И у меня есть файл PHP:
<?php
$uploaddir = '/home/michael/public_html/forum/files/';
$uploadfile = $uploaddir . basename($_FILES['userfile']['name']);
echo '<pre>';
if (move_uploaded_file($_FILES['userfile']['tmp_name'], $uploadfile)) {
echo "File is valid, and was successfully uploaded.\n";
} else {
echo "Error!\n";
}
echo 'Here is some more debugging info:';
print_r($_FILES);
print "</pre>";
?>
Когда я запускаю его, я получаю:
Error!
Here is some more debugging info:Array
(
[userfile] => Array
(
[name] => 184958.jpg
[type] => image/jpeg
[tmp_name] => /tmp/phpupab11
[error] => 0
[size] => 1473603
)
)
И файл не перемещается на новое место. Вместо этого я получаю файл 0 с тем же именем в новом месте.
-rw-r--r-- 1 michael michael 0 Apr 5 16:33 184958.jpg
Журнал сервера отмечает ошибку:
[error] [client xx.xx.xx.xx] PHP Warning: move_uploaded_file():
Unable to move '/tmp/phpupab11' to '/home/michael/public_html/forum/files/184958.jpg'
in /home/michael/public_html/forum/test2.php on line 9
Кажется, что файл хорошо загружен в / tmp dir, но не может быть перемещен в другое место. Насколько я читаю, это проблема разрешения. Но разрешение папки "files" кажется хорошим - 777 (с владельцем michael=username):
drwxrwxrwx 2 michael michael 1216512 Apr 5 13:16 files
А также переменные PHP:
post_max_size 20M
upload_max_filesize 20M
upload_tmp_dir /tmp
file_uploads On
memory_limit 1024M
Я был бы рад получить некоторую помощь или, по крайней мере, направление для решения проблемы. Спасибо.
2 ответа
Проблема не была решена. Ни одна папка в / home не смогла получить загруженные файлы. Не помогла ни смена прав, ни права собственности. Во всяком случае, нашел обходной путь. Не идеально и не безопасно, но работает, и этого достаточно, пока я не выясню причину такого странного поведения. Я создал папку в корневом каталоге (/files_of_forum) и разрешения (Майкл: Майкл 777) и изменил в форуме каталог вложений (что было оригинальным "файлы" на "../../../../files_of_forum". Переместил все файлы из исходной папки в новую. Теперь все работает. Спасибо всем, что пытались помочь.
Владелец файла должен быть процессом, под которым работает веб-сервер, вероятно apache. Установите каталог файлов, который будет принадлежать apache с разрешениями на запись.
Для тех, кто пришел сюда из-за схожих ошибок, я нашел решение для своего СПЕЦИАЛЬНОГО уникального случая, я делюсь этим решением на тот случай, если вам, ребята, не повезло, как и мне (если какой-либо контрольный список ниже не является ответом для вас, пожалуйста, проигнорируйте этот ответ):
- Вы в локальной разработке
- У вас установлен Avast
- Ваш WAMP-сервер работает нормально, но сервер, запущенный php artisan serve (Laravel), по некоторым причинам имеет проблемы, вы не можете запустить PHP-метод move_uploaded_file
Ваш Avast блокирует запуск вашего php.exe zzzzzzzzz... Не из-за разрешений, каталоги существуют или нет, размер файлов php.ini, сохранение в публичном месте или хранилище, бла-бла-бла... Надеюсь, это поможет тем, кому не повезло, как мне.