2011-11-30 19 views
5

Ho bisogno di sapere cosa usare per un percorso di destinazione per la funzione move_uploaded_file di PHP. (vedi http://php.net/manual/en/function.move-uploaded-file.php)percorso di destinazione per move_uploaded_file in php

In questo momento, ho il codice che funziona bene. directory principale del mio dominio contiene le seguenti opzioni (tra gli altri):
arrivi           < -Questa è una cartella
add-photo-submit.php       < -Questo è un file PHP che utilizza move_uploaded_file

In add-photo-submit.php, ho la seguente riga di codice:

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

$ percorso_destinazione i s usato come parametro di destinazione per la funzione. Funziona bene quando accedo al file tramite www.mydomain.com/add-photo-submit.php

Tuttavia, ho recentemente modificato il file .htaccess per rimuovere il file .php e aggiungere una barra finale. Ora il file PHP è accessibile su www.miodominio.com/add-foto-submit/ Penso che il file PHP stia interpretando il percorso di destinazione come "www.mydomain.com/add-photo-submit/uploads/filename.jpg "

ho provato ad utilizzare un percorso assoluto, ma ha detto che non avevo il permesso ...

In futuro vorrei che la mia directory di root per essere messa a punto in questo modo:
radice
  - admin (cartella)
        -add-photo-submit.php
  -uploads

Quale frame di riferimento ha move_uploaded_file?

risposta

23

Si dovrebbe usare document_root per ottenere il percorso assoluto come questo:

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

oppure è possibile utilizzare PHP costante, '__DIR__' come alternativa a' $ _SERVER [ 'DOCUMENT_ROOT'] '... – AnchovyLegend

+0

Dopo 5 anni, aiuta ancora. Grazie – raqulka

1

Le operazioni di nomefile locali di PHP non hanno idea di cosa ha fatto mod_rewrite ai propri URL e si occupano solo dei percorsi effettivi del file system raw. Potresti avere mod_rewrite trasformare il tuo semplice semplice example.com/index.php in un orribile 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 e PHP sarebbe ancora in esecuzione nella stessa directory fisica sul server.

Se lo script PHP vive a /home/sites/example.com/html/index.php, e si utilizza uploads/example.jpg come il vostro percorso mossa, allora PHP tenterà di mettere l'immagine in /home/sites/example.com/html/uploads/example.jpg, indipendentemente da ciò che l'URL richiesto è stato.

0

Oppure utilizzare

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

possiamo usare dirname(__FILE__) invece di root del server dichiarare sotto la linea in uno qualsiasi dei radice di file (index.php)

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

e ora puoi usarlo in tutti i file in cui è necessario il caricamento.

echo $uploads_base_url=$_SESSION["uploads_base_url"]; 
Problemi correlati