Ошибка move_uploaded_file
Может кто-нибудь помочь мне понять, почему это возвращает false?
if ((move_uploaded_file($_FILES[$field]['tmp_name'], $path))) {
Как и в, потенциальные причины. Я проверил, что переменные верны, и я проверил разрешения на папку назначения, которая составляет 777.
Ура!
Для тех, кто хочет видеть var_dump ($ _FILES);
array(1) { ["image"]=> array(5) { ["name"]=> string(14) "accountile.png"
["type"]=> string(9) "image/png" ["tmp_name"]=> string(14) "/tmp/php28IQhv"
["error"]=> int(0) ["size"]=> int(394) } }
Ответы
Ответ 1
Я проверил переменные
Не проверяйте переменные, но проверяйте сообщения об ошибках.
Это единственное, что вам нужно.
Добавьте эти строки вверху своего кода
ini_set('display_errors',1);
error_reporting(E_ALL);
и посмотреть, что он говорит.
Если файл move_uploaded_file не удался, он будет всегда вызывать ошибку с подробным объяснением.
Вы не поверите, но чтение сообщений об ошибках - это более эффективный способ найти проблему, чем догадки, которые вы пробовали раньше.
Не могу поверить, что никто уже не упомянул об этом.
Ответ 2
С move_uploaded_file
вам не нужно 777 разрешений. Каков результат $path
? Вы подтвердили, что существует $path
? Вы подтвердили, что существует $field
?
Либо $field, либо $path не существует, или open_basedir - это мое предположение.
Разрешено ли ограничение open_basedir
? Это может помешать отправке загруженного файла. Посмотрите в php.ini для open_basedir
, если там указан путь, он включен и вы хотите узнать, находится ли путь назначения вашего загруженного файла к этому пути. Если да, то почему он не работает.
Обновление
$path не может быть URL-адресом, он должен быть локальным путем, например /home/user/public_html/
Ответ 3
Вы проверяли разрешение на временную папку для загрузки?
Что скажет php, если вы делаете:
var_dump($_FILES);
Ответ 4
Не используйте
$path = "http://www.barbadostravelbuddy.co.uk/demo/images/carhire
/accountile10420103260403000000pm.png"
но
$path = "/home/sites/barbadostravelbuddy.co.uk/public_html/demo/images/carhire/
accountile10420103260403000000pm.png"
Это должен быть путь в системе, а не URL.
Ответ 5
Вы отредактировали ваш php.ini, чтобы убедиться, что upload_tmp_dir указывает на временный каталог?
Ответ 6
Loïc Février, спасибо, вы спасли меня много времени!
Вот моя часть...
печать возможных ошибок во время загрузки.
Сначала создайте каталог Uploader/UploadedFiles
Затем используйте код ниже...
$destination=$_SERVER[DOCUMENT_ROOT]."/Uploader/UploadedFiles/" . $_FILES["file"]["name"];
if(move_uploaded_file($_FILES["file"]["tmp_name"], $destination)){
echo ("Stored in".$_SERVER[DOCUMENT_ROOT]."/Uploader/UploadedFiles/".$_FILES["file"]["name"]);
}else{
$html_body = '<h1>File upload error!</h1>';
switch ($_FILES[0]['error']) {
case 1:
$html_body .= 'The file is bigger than this PHP installation allows';
break;
case 2:
$html_body .= 'The file is bigger than this form allows';
break;
case 3:
$html_body .= 'Only part of the file was uploaded';
break;
case 4:
$html_body .= 'No file was uploaded';
break;
default:
$html_body .= 'unknown errror';
}
echo ($html_body);
}
Ответ 7
Основные этапы отладки:
- Как выглядит
print_r($_FILES)
?
- Существует ли исходный файл?
- Является ли флаг "error" файла загруженным нолем (будет отображаться при выполнении print_r)
- Как выглядит цель
$path
?
- Вы указываете полное имя файла в целевом пути?
Я предполагаю, что $path
- это только путь к папке, а не полное имя файла.
Обновление: вам нужно указать путь к файловой системе как $path.
Ответ 8
$path
должно быть имя файла, а не путь к каталогу.