2011-04-01 13 views
7

Esto suena como una pregunta estúpida pero, después de cargar un archivo, el archivo no está en la ubicación que php dijo que sería.Carga de archivos no en/tmp

En primer lugar la página de prueba sencilla:

<html><body> 
<h1><?=$_FILES['imgup']['tmp_name'];?></h1> 
<? 
     print_r($_FILES); 
?> 
<form enctype="multipart/form-data" method="post" action="upload.php"> 
<input type="file" name="imgup" id="imgup"> 
<input type="submit"> 
</form> 
</body></html> 

Ahora, el print_r en texto:

Array ([imgup] => Array ([name] => ace.jpg [type] => image/jpeg [tmp_name] => /tmp/phpEdfBjs [error] => 0 [size] => 29737)) 

Así que no hay error, del camino que mira estándar, pero/tmp no tiene ese archivo. Además, ejecutando un hallazgo en todo mi sistema aparece bubkis.

FYI: php.ini tiene

max_execution_time = 120 
file_uploads = On 
upload_max_filesize = 2M 

y el archivo que he sido carga es 29k

¿Alguna idea?

Respuesta

16

El archivo temporal se elimina cuando el script PHP que lo recibió se ha terminado de ejecutar: es solo un archivo temporal.

El script PHP a la que envías el formulario - upload.php - debe mover el archivo temporal a una ubicación no temporal, utilizando move_uploaded_file()


Básicamente, la idea es:

  • El usuario carga un archivo de secuencia de comandos,
    • Ese archivo se almacena en una lcoation temporal.
  • La secuencia de comandos funciona en ese archivo:
    • Comprueba si el archivo está bien (tipo de contenido, tamaño, ...)
  • Y si el archivo está bien, su la escritura se mueve al directorio de almacenamiento permanente (dondequiera que usted desee)

Si la carga no finaliza correctamente, o si no te mueves t El archivo en otro lugar, el archivo temporal se elimina automáticamente.


Como referencia, debe leer la siguiente sección del manual: Handling file uploads - POST method uploads

Citando la parte de ella que está relacionada con su problema:

El archivo se elimina de la directorio temporal al final de la solicitud si no se ha movido o renombrado.

+0

bien, he añadido: $ mv = move_uploaded_file ($ _ FILES ['imgup'] ['tmp_name'], "/var/www/testimg.jpg"); al principio del archivo. $ mv siempre es falso, sin advertencia emitida. ¿Algo que estoy haciendo mal allí? –

+1

¿El usuario del servidor web * (como 'www-data' en algunas distribuciones de Linux) * tiene los permisos para escribir en'/var/www/'? –

+0

Eso lo resolvió. ¡Muchas gracias! –