2011-06-15 11 views
2

J'ai un script que j'ai écrit que je vends à d'autres qui veulent une application cadeau virtuelle sur Facebook. Comme beaucoup de clients qui achètent ce script n'ont pas de connaissances en programmation, j'essaie de simplifier les choses autant que possible en rassemblant autant de données que je peux sans leur entrée (comme en utilisant $_SERVER vars).Moyen efficace pour trouver un nom de répertoire particulier?

Je rencontre un problème lorsque j'essaie d'établir un répertoire statique pour les images, cependant, que le code peut lire et toujours savoir où se trouve ce répertoire.

Par exemple, sur mon « masterfile.php » qui figure sur la plupart chaque page je ceci:

$app_info['server_url']="http://".$_SERVER['SERVER_NAME']; 
$app_info['callback_url']=$app_info['server_url'].dirname($_SERVER['PHP_SELF'])."/"; 
$app_info['image_url']=$app_info['callback_url'].'images/'; 

Cela me donne toutes les informations nécessaires dont j'ai besoin de savoir où se trouvent les dossiers ... à moins que J'utilise un répertoire dans le répertoire parent pour le script entier (IE:/dossier/ajax /).

Je rencontre un problème où le dossier 'images' doit toujours être '/ folder/images /' au lieu de se terminer par '/ dossier/ajax/images /' lorsque je travaille avec d'autres répertoires dans le parent . Je ne peux pas simplement coder en dur le nom du répertoire parent car certains clients les téléchargent vers des répertoires tels que '/ dossier/dossier/dossier/dossier/script /' - c'est pourquoi j'utilise $_SERVER['PHP_SELF'] pour établir le répertoire parent.

Existe-t-il un moyen (ou une variable) que je peux utiliser pour ce problème? Je dois juste m'assurer que le $app_info['callback_url'] est toujours le même, quel que soit le répertoire courant.

Merci!

Répondre

0

Cest combien de dossiers l'utilisateur a tellement ../ sera inclus dans le chemin pour les images.

$dir = scandir('/testdir'); 
$dots = '/'; 

for($i = 0;$i < sizeof($dir)-2;$i++) // -2 not to count . and .. as folders 
{ 
    $dots .= '../'; 
} 

$app_info['server_url'] = "http://" . $_SERVER['SERVER_NAME']; 
$app_info['callback_url'] = $app_info['server_url'] . dirname($_SERVER['PHP_SELF']) . "/"; 
$app_info['image_url'] = $app_info['callback_url'] . "{$dots}images/"; 
+0

Malheureusement, le dossier images se trouve dans le répertoire parent, pas seulement sur le serveur. Je sais ce que vous pensez, mais lorsque vous vendez à des clients, vous devez prendre en compte le fait qu'ils peuvent avoir leurs propres dossiers qu'ils ne veulent pas ajuster. – Phillip

+0

Comme il n'y a pas de limite pour les dossiers et que vous pouvez faire beaucoup de dossiers/chemin/vers/dossier/un/vous pouvez utiliser /../../../../images/. Exemple: $ app_info ['image_url'] = $ app_info ['server_url']. '/../../../../images/'; –

+0

Eh bien, le problème est que je ne saurai pas exactement combien de dossiers se trouvent entre le répertoire de l'image et le serveur. Cela varie d'un client à l'autre. – Phillip

3

Je définirais une base constante dans un fichier de type bootstrap de votre application.

define('BASE_DIR', basedir(__FILE__)); 

(si vous pouvez garantir> = PHP 5.3, vous pouvez simplement utiliser __DIR__.)

Ensuite, il suffit d'inclure des fichiers basés sur cette constante ...

include BASE_DIR . '/something.php'; 
+0

J'ai eu des problèmes avec cela auparavant (quelque chose à faire surtout avec des clients utilisant des hôtes gratuits dans d'autres pays, en particulier africains ou européens). Je peux juste acheminer tous les appels AJAX à travers un fichier de gestion dans le répertoire parent, de cette façon j'ai toujours accès aux répertoires corrects. – Phillip

Questions connexes