Подтвердить что ты не робот

Ошибка 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) } }
4b9b3361

Ответ 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 должно быть имя файла, а не путь к каталогу.