2012-06-08 38 views
11

Estoy tratando de que PHP mueva un archivo cargado desde el directorio tmp a un lugar permanente en mi servidor web. Parece bastante simple, pero estoy recibiendo este error:PHP: move_uploaded_file() no se pudo abrir la secuencia: No existe ese archivo o directorio

Unable to move 'C:\UniServer\tmp\php3F62.tmp' to 'static/images/slides/1/1.jpg'

Bastante sencillo, ¿verdad? No puede encontrar la carpeta de destino.

Mi pregunta es: ¿Cómo hago referencia al directorio de destino deseado?

¿La referencia relativa a la posición del script en el servidor? ¿O es relativo a la URL? O el PHP DOCUMENT_ROOT? O el sistema de archivos del sistema operativo? ¿O algo mas?

no puedo encontrar la respuesta en la documentación de PHP ni en ninguna de las preguntas similares aquí en SO ..

¿Alguien puede ayudar? Gracias.

+0

Es a partir de la posición del script en el servidor. El mejor uso de una ruta absoluta en todo momento –

+2

utiliza la constante 'DIRECTORY_SEPARATOR' en las rutas para que sea independiente de la plataforma. –

+0

Uno a menudo se encuentra con este error y para solucionarlo rápidamente, siga estos pasos: https://stackoverflow.com/a/36577021/2873507 –

Respuesta

26

Una forma sencilla de realizar un seguimiento de la ruta de acceso es sólo para definir la ruta absoluta en su index.php

define ('SITE_ROOT', realpath(dirname(__FILE__))); 

A continuación, sólo usarlo como:

move_uploaded_file($_FILES['file']['tmp_name'], SITE_ROOT.'/static/images/slides/1/1.jpg'); 
+0

Así es como lo hago también. Es mejor que usar la raíz del documento porque de esta manera, puede tener su aplicación en un subdirectorio –

+0

Esta es la solución correcta, ¡gracias!(Es un poco preocupante que varias personas pensaran que DIRECTORY_SEPARATOR ayudaría, sin embargo: - /) –

+0

Nunca lo he usado, id solo lo uso si iba a dar la ruta de salida al usuario. Gracias por aceptar :) –

0

¡Es desde la posición del script en el servidor! Y por otra parte, es necesario tener permisos de escritura en esta carpeta:

'static/images/slides/1/1.jpg' 

En cambio, es mejor utilizar una ruta absoluta de esta manera:

'C:\UniServer\***\static\images\slides\1\1.jpg 

utilizar una ruta absoluta.

+2

PHP acepta ambos \ y/como separadores de ruta válidos en todos los sistemas operativos. –

+0

@DjangoReinhardt Gracias por la información, pero solo para tener más cuidado, conocer el sistema operativo. :) –

+0

¿Cuál es el motivo del voto a favor? –

2

que tenían el mismo problema con mi carga Vea mi ejemplo y quizás pueda ayudarlo.

El archivo que creé se llama "cargas".

$uploads_dir = 'uploads/'; 
$name = $_FILES['userfile']['name']; 
if (is_uploaded_file($_FILES['userfile']['tmp_name'])) 
{  
    //in case you want to move the file in uploads directory 
    move_uploaded_file($_FILES['userfile']['tmp_name'], $uploads_dir.$name); 
    echo 'moved file to destination directory'; 
    exit; 
} 
0
$destination = dirname(dirname(dirname(dirname(__FILE__))))."/runtime/tmp/"; 
chown($destination, 0755); 
move_uploaded_file($info['tmp_name'], $destination.$info['name']); 

Esta es mi solución, sólo tiene que utilizar mkdir para crear un directorio para poner mi imagen que quiero mover. Ojalá ayude.

Cuestiones relacionadas