2010-04-04 1 views
0

J'essaie d'écrire un script de téléchargement PHP pour télécharger des fichiers dans différents dossiers. Mon code fonctionne pour le chemin direct (quelque chose comme 'chemin/vers/répertoire') mais pas pour le chemin dynamique pris depuis l'exécution.Le téléchargement de fichiers PHP ne fonctionne pas avec le chemin dynamique

$directory_self = dirname($_SERVER['PHP_SELF']); 
$folder = $_POST['folder_name']; //final folder 
$toupload = $_SERVER['DOCUMENT_ROOT'] . $directory_self .'/files'. $folder; 
$uploadsDirectory = str_replace (" ", "", $toupload); 

Lorsque j'écho $ uploadsDirectory, il indique le chemin exact. Quelqu'un pourrait-il m'aider à ce qui pourrait être mauvais dans ce domaine?

+0

Utiliser les fonctions de chemin et de répertoire PHP pour vérifier que le $ uploadsDirectory IS_A Répertoire IS_WRITABLE, puis essayez de déplacer les fichiers vers la destination. Certaines fonctions que vous pourriez envisager: realpath(), is_dir() - s'il vous plaît vérifier le manuel pour d'autres fonctions – Andreas

Répondre

0

Essayez d'utiliser dirname(__FILE__);

<?php 
$directory_self = dirname(__FILE__); 
$folder = "faruk"; //final folder 
$toupload = $_SERVER['DOCUMENT_ROOT'] . $directory_self .'/files/'. $folder; 
$uploadsDirectory = trim($toupload); 
echo $uploadsDirectory."\n"; 

?> 

sortie sur mon ordinateur portable;

/home/test/Desktop/files/test 
+0

je ne peux pas utiliser dirname (__ FILE__) parce que je travaille sur Windows Server qui entraîne la barre oblique pour $ directory_self et forward pour la racine du document. – Devdarsh

+0

@Devdarsh ​​- donc, utilisez regex ou une méthode de remplacement de chaîne pour corriger cela. – Moshe

0

Vous devez vérifier et voir si le dossier est créé et si le script a l'autorisation d'y écrire des fichiers.

Quelle est la sortie exacte du script de téléchargement? (Quelles erreurs faut-il jeter?)

+0

La permission d'écriture est là et je peux écrire des fichiers en donnant un chemin direct. Je n'ai d'erreur que sur la définition de $ _SERVER ['DOCUMENT_ROOT']. $ directory_self. '/ files'. $ dossier; Il jette "Une erreur est survenue: réception du répertoire insuffiecient permission ..." – Devdarsh

+0

$ dossier va changer au moment de l'exécution – Devdarsh

+0

Je ne comprends toujours pas :). La chaîne _generated_ correspond-elle à un dossier existant ou non? Si vous essayez de télécharger dans '$ _SERVER ['DOCUMENT_ROOT']. $ directory_self. '/ files'. $ dossier', '$ dossier' est'/abc' et '[...]/abc' n'existe pas vous obtenez une erreur. –

0

Essayez d'ajouter des trucs de débogage pour voir si le chemin que vous générez existe et est accessible en écriture:

$directory_self = dirname($_SERVER['PHP_SELF']); 
$folder = $_POST['folder_name']; //final folder 
$uploaddir = $_SERVER['DOCUMENT_ROOT'] . $directory_self . '/files'; 

$uploadsDirectory = str_replace (" ", "", $uploaddir); 

if (!is_dir($uploadDirectory)) { 
    die("$uploadDirectory is not a directory"); 
} 

if (!is_writeable($uploadDirectory)) { 
    die("$uploaddir is not writeable"); 
} 

$toupload = $uploadDirectory . $folder; 

if (!is_writeable($toupload)) { 
    die("$toupload is not writeable"); 
} 
+0

Salut, j'ai essayé votre suggestion, il jette "E:/TechPlat/apache/htdocs/uploads/abc n'est pas un répertoire". Mais j'ai ce dossier créé et je peux charger le chemin imprimé dans la barre d'explorateur et charge le dossier. J'utilise Windows Server. – Devdarsh

+0

E: un lecteur local ou un partage réseau? Est-ce que vous utilisez un LiveCD et E: est le cdrom? Est-ce que le compte d'utilisateur sous lequel Apache s'exécute a accès à ce dossier? Même si vous le faites, Apache pourrait ne pas. Essayez de sauvegarder l'arbre, un niveau à la fois, et voyez si l'un des répertoires parents fonctionne. .../htdocs/uploads, puis .../htdocs, etc .... –