2010-10-04 25 views
12

Puede alguien ayudarme a entender por qué esto está volviendo falsa?move_uploaded_file fracaso

if ((move_uploaded_file($_FILES[$field]['tmp_name'], $path))) { 

Como en, las posibles causas. He comprobado que las variables son correctas y he verificado los permisos en la carpeta de destino que es 777.

¡Salud!

Para aquellos que desean ver 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

Mi primer pensamiento sería preguntar si $ field está configurado correctamente, es decir, si está especificando un nombre de ruta correcto. Entonces preguntaría lo mismo por $ path. Intenta var_dumping cada uno de ellos. – lonesomeday

Respuesta

1

Con move_uploaded_file no necesita permisos 777. ¿Cuál es la salida de $path? ¿Has verificado que existe $path? ¿Has verificado que existe $field?

O $ field o $ path no existen, o open_basedir es mi suposición.

¿Está habilitada la restricción open_basedir? Eso podría evitar que se escriba el destino del archivo cargado. Mire en su php.ini para open_basedir, si hay una ruta especificada, entonces está habilitada y desea ver si la ruta de destino de su archivo cargado está dentro de esta ruta. Si es así, es por eso que está fallando.

actualización

$ ruta no puede ser una dirección URL, debe ser una ruta local como /home/user/public_html/

+0

$ path y $ field return string esperado. Puedo publicar el resultado más reciente si me sirve. – YsoL8

+0

@Yoi eres consciente de que $ path debe ser un nombre de archivo, no una ruta, ¿verdad? –

+0

open_basedir no tiene ningún valor en phpinfo – YsoL8

0

pasos básicos de la depuración:

  • ¿Cómo es una print_r($_FILES) como?
  • ¿El archivo fuente realmente existe?
  • es la bandera de "error" de la carga de archivos cero (será visible durante la práctica del print_r)
  • que se ve el objetivo $path como?
  • ¿Está especificar un nombre de archivo completo de la ruta de destino?

Supongo que $path es solo una ruta a una carpeta, no a un nombre de archivo completo.

Actualización: Debe especificar un ruta del sistema de archivos como $ path.

+0

Todos estos son como deberían ser (supongo que te refieres a un absoluto ruta de destino) – YsoL8

+0

@ YsoL8 '$ path' necesita ser un nombre de archivo completo que aún no existe, no solo una ruta a un directorio. –

+0

$ path = http://www.barbadostravelbuddy.co.uk/demo/images/carhire/accountile10420103260403000000pm.png más recientemente – YsoL8

1

¿Marcó el permiso en la carpeta de carga temporal?

¿Qué te dice php si lo hace:

var_dump($_FILES); 
1

No utilice

$path = "http://www.barbadostravelbuddy.co.uk/demo/images/carhire 
    /accountile10420103260403000000pm.png" 

pero

$path = "/home/sites/barbadostravelbuddy.co.uk/public_html/demo/images/carhire/ 
    accountile10420103260403000000pm.png" 

Tiene que ser una ruta en el sistema, no una URL.

+0

Probé/public_html/demo/images/carhire que no funcionó. La estructura de mi directorio es root> public_html> demo> images> carhire – YsoL8

+0

Ok. Intenta hacer un mkdir (http://php.net/manual/en/function.mkdir.php) en ese directorio. Eso verificará que el directorio sea correcto y que tenga derechos sobre él. –

+0

Lo sentimos, pero eso no funcionó – YsoL8

21

He comprobado las variables

No marque las variables excepto mensajes de errores de ajuste.
Es lo único que necesita.
Añadir estas líneas en la parte superior de su código

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

y ver lo que dice.
Si el archivo move_uploaded_file falló, será siempre provocar un error con explicación detallada.
Usted no lo crea, pero la lectura de mensajes de error es manera de la manera más eficiente para encontrar un problema que conjeturas que ha intentado antes

No puedo creer que nadie ha mencionado ya.

+0

Es bueno saber que nunca he tenido problemas con move_uploaded_file, así que nunca tuve la necesidad de saberlo. – Webnet

+1

Error/error cuando 'move_uploaded_file()' probablemente es causado por un problema de permiso en la carpeta/directorio de destino. Y sí, puede ver los mensajes de error con estas respuestas para verificar los mensajes de error en lugar de verificar las variables en busca de errores. – Aryo

+0

Sr. sentido común, gracias. – Andrew

1

¿Editó su php.ini para asegurarse de que upload_tmp_dir apunta a un directorio temporal?

1

Loïc Février, ¡gracias, me has ahorrado mucho tiempo!

Aquí está mi parte ... impresión de posibles errores durante la carga.

En primer lugar crear el directorio de subida/uploadedfiles A continuación, use el código de abajo ...

$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

Usando $ _SERVER [DOCUMENT_ROOT] también lo solucionó. – yaz

0

$path tiene que ser un nombre de archivo y no una ruta a un directorio.

Cuestiones relacionadas