2011-11-30 18 views
5

Necesito saber qué usar para una ruta de destino para la función move_uploaded_file de PHP. (ver http://php.net/manual/en/function.move-uploaded-file.php)ruta de destino para move_uploaded_file en php

En este momento, tengo un código que funciona bien. directorio raíz de mi dominio contiene los elementos siguientes (entre otros):
subidas           < -Esta es una carpeta
add-foto-submit.php       < -Este es un archivo PHP que utiliza move_uploaded_file

En complemento de foto-submit.php, tengo la siguiente línea de código:

$target_path = "uploads/" . basename($_FILES['uploadedFile']['name']); 

$ i TARGET_PATH s utilizado como el parámetro de destino para la función. Esto funciona bien cuando tengo acceso al archivo a través de www.midominio.com/add-photo-submit.php

Sin embargo, recientemente cambié el archivo .htaccess para eliminar el .php y agregar una barra al final. Ahora se puede acceder al archivo PHP en www.mydomain.com/add-photo-submit/ Creo que el archivo PHP interpreta la ruta de destino como "www.mydomain.com/add-photo-submit/uploads/filename.jpg "

he intentado utilizar una ruta absoluta, pero dijo que no tenía permiso ...

En el futuro me gustaría que mi directorio raíz para ser configurado de esta manera:
raíz
  - admin (carpeta)
        -add-photo-submit.php
  -uploads

¿Qué marco de referencia tiene move_uploaded_file have?

Respuesta

23

Debe utilizar document_root para obtener la ruta absoluta de esta manera:

$target_path = $_SERVER['DOCUMENT_ROOT'] . "/uploads/" . basename($_FILES['uploadedFile']['name']); 
+1

o puede utilizar PHP constante, '__DIR__' como una alternativa a' $ _SERVER [ 'DOCUMENT_ROOT'] '... – AnchovyLegend

+0

después de 5 años, todavía ayuda. Gracias – raqulka

1

Las operaciones del nombre de archivo local de PHP no tienen idea de lo que mod_rewrite hizo a sus urls, y se ocupan solo de las rutas del sistema de archivos RAW. Podrías hacer que mod_rewrite convirtiera tu simple y simple example.com/index.php en un espantoso example.com/a/b/c/d/e/f/g/h/i/j/k/l/m/n/o/p/q/r/s/t/u/v/w/x/yz y PHP aún se estaría ejecutando en el mismo directorio físico en el servidor.

Si el script PHP vive en /home/sites/example.com/html/index.php, y se utiliza uploads/example.jpg como su trayectoria movimiento, entonces PHP intentará poner esa imagen en /home/sites/example.com/html/uploads/example.jpg, independientemente de lo que fue la dirección URL solicitada.

0

O utilice

$target_path = "../uploads/" . basename($fileUpload['name']); 
0

podemos utilizar dirname(__FILE__) en lugar de la raíz del servidor declarar por debajo de la línea en cualquiera de raíz archivo (index.php)

$_SESSION["uploads_base_url"]=dirname(__FILE__); 

y ahora puede usar esto en cualquier archivo donde se necesite cargar.

echo $uploads_base_url=$_SESSION["uploads_base_url"]; 
Cuestiones relacionadas