2010-10-04 2 views
12

Может кто-нибудь помочь мне понять, почему это возвращает false?сбой move_uploaded_file

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) } } 
+0

Моя первая мысль заключалась в том, чтобы спросить, правильно ли задано поле $ field, то есть укажите ли вы правильное имя пути. Тогда я бы попросил то же самое для $ path. Попробуйте var_dumping каждый из них. – lonesomeday

ответ

1

С move_uploaded_file вам не нужны 777 разрешений. Каков вывод $path? Вы подтвердили, что существует $path? Вы подтвердили, что существует $field?

Либо $ field или $ path не существует, либо open_basedir - это мое предположение.

open_basedir ограничение разрешено? Это может помешать отправке загруженного файла. Посмотрите на свой php.ini для open_basedir, если указан путь, он включен и вы хотите узнать, находится ли путь назначения вашего загруженного файла к этому пути. Если это так, то это не работает.

обновление

$ путь не может быть URL, он должен быть локальный путь, такой как /home/user/public_html/

+0

$ path и $ field возвращают ожидаемые строки. Я могу опубликовать последний результат, если это поможет. – YsoL8

+0

@Yoi вы знаете, что $ path должен быть именем файла, а не дорогой, правильно? –

+0

open_basedir не имеет значения в phpinfo – YsoL8

0

Основные этапы отладки:

  • Что делает print_r($_FILES) выглядеть?
  • Существует ли исходный файл?
  • Является ли флаг ошибки «Ошибка загрузки» (будет отображаться при печати)
  • Как выглядит цель $path?
  • Вы указываете полное имя файла в целевом пути?

Я предполагаю, что $path - это только путь к папке, а не полное имя файла.

Обновление: Вы должны указать путь к файловой системы как $ пути.

+0

Все они такие, какими они должны быть (я полагаю, вы имеете в виду абсолютное target path) – YsoL8

+0

@ YsoL8 '$ path' должно быть полным именем файла, которое еще не существует, а не только путь к каталогу. –

+0

$ path = http://www.barbadostravelbuddy.co.uk/demo/images/carhire/accountile10420103260403000000pm.png совсем недавно – YsoL8

1

Вы проверили разрешение на временную папку для загрузки?

Что PHP сказать вам, если вы:

var_dump($_FILES); 
1

Не используйте

$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.

+0

Я попытался/public_html/demo/images/carhire, который не сработал. Моей директорией является root> public_html> demo> images> carhire – YsoL8

+0

Ok. Попробуйте сделать mkdir (http://php.net/manual/en/function.mkdir.php) в этом каталоге. Это проверяет правильность каталога и права на него. –

+0

Извините, но это не сработало – YsoL8

21

Я проверил переменные

Не проверять переменные, но сообщения об ошибках проверки.
Это единственное, что вам нужно.
Добавьте эти строки в верхней части кода

ini_set('display_errors',1); 
error_reporting(E_ALL); 

и посмотреть, что он говорит.
Если файл move_uploaded_file не удался, он будет всегда поднять ошибку с подробное объяснение.
Вы не поверите, но чтение сообщений об ошибках является способом более эффективным способом, чтобы найти проблему, чем догадок вы пробовали раньше

Я не могу поверить, что никто не упомянул об этом уже.

+0

Полезно знать, у меня никогда не было проблем с файлом move_uploaded_file, поэтому мне никогда не нужно было знать. – Webnet

+1

Ошибка/сбой, когда 'move_uploaded_file()', скорее всего, вызван проблемой разрешения в папке назначения/каталоге. И да, вы можете видеть сообщения об ошибках с этими ответами, чтобы проверять сообщения об ошибках, а не проверять переменные на наличие ошибок. – Aryo

+0

Г-н здравый смысл, спасибо. – Andrew

1

Вы редактировали свой php.ini, чтобы убедиться, что upload_tmp_dir указывает на временный каталог?

1

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); 
} 
+0

Использование $ _SERVER [DOCUMENT_ROOT] исправил его и для меня. – yaz

0

$path должен быть именем файла, а не путь к каталогу.

Смежные вопросы