268 votes

Obtenir le chemin d’accès absolu du script courant

J'ai cherché haut et bas et d'obtenir beaucoup de solutions différentes et varialbles contenant des informations pour obtenir le chemin d'accès absolu. Mais ils semblent fonctionner sous certaines conditions et pas dans d'autres. Est-il une balle en argent façon d'obtenir le chemin absolu vers le courant de l'exécution du script en php? Pour moi, le script sera exécuté à partir de la ligne de commande, mais il devrait aussi bien fonctionner si les exécuter dans un délai de apache etc.

Précisions: La première exécution du script (je n'avais qu'une ici, donc j'ai raté indiquant qu')

285voto

zerkms Points 105994

``constante vous donnera de chemin d’accès absolu au fichier en cours.

262voto

snm-yah Points 2067

Par exemple, si vous naviguez sur un http://example.com/folder1/folder2/yourfile.php?var=blabla (Note: si yourfile.php comprend otherfile.php puis les variables sera différent)

__FILE__   (on Hosting)   === /home/xfiddlec/public_html/folder1/folder2/yourfile.php
__FILE__   (on Localhost) === C:\wamp\www\folder1\folder2\yourfile.php 
$_SERVER['HTTP_HOST']     === example.com (or without WWW)          
$_SERVER["PHP_SELF"]      === /folder1/folder2/yourfile.php
$_SERVER["REQUEST_URI"]   === /folder1/folder2/yourfile.php?var=blabla
$_SERVER["DOCUMENT_ROOT"] === /home/xfiddlec/public_html

//basename returns the last filename
basename('/folder1/folder2/yourfile.php') {i.e. basename(__FILE__)  ==== yourfile.php
//dirname returns the part upper part, without filename [same as getcwd()]
dirname('/folder1/folder2/yourfile.php')  {i.e. dirname(__FILE__)   ==== /folder1/folder2

Plusieurs Exemples:

1) Echo URL (c'est à dire http://example.com/folder1/file.php?var=blabla)
<?php echo 'http://'. $_SERVER['HTTP_HOST'].$_SERVER["REQUEST_URI"];?>

2)Pour exiger (ou inclure) un fichier souhaité à partir de l'exécution du script (par exemple, le script courant example.com/folder1/folder2/folder3/phpfile.php est en cours d'exécution, et que vous souhaitez require d'un fichier example.com/otherDirecory/somefile.php, puis utilisez:

<?php
$target_file_path_from_root = 'otherDirecory/somefile.php';

// First step: Current filepaths
$current_file = str_replace('\\','/',__FILE__);

// Second step: if the path contains the root path, lets remove it
if (stristr($current_file, 'public_html'))
    { $current_file=preg_replace('/(.*)public_html\//i','',$current_file); }

// Third step: get the desired number of upper dots
$target_file_path_FINAL = $target_file_path_from_root;
//count the deepness of directories of current filepath
for ($i=0; $i<substr_count($current_file, '/'); $i++ )
    { $target_file_path_FINAL = '../'. $target_file_path_FINAL; }


// now require $target_file_path_FINAL >>> ../../../otherDirecory/somefile.php
?>

pour wordpress, il existe déjà pré-définis des fonctions pour obtenir des plugins ou des thèmes de l'url.

254voto

rik Points 5529
<pre><code></code><p><code></code><code></code>. Mais il faut savoir que PHP_SELF est un risque pour la sécurité !</p></pre>

23voto

pkarecki Points 33

``est la bonne réponse - http://php.net/manual/en/function.getcwd.php

retournera par exemple de chemin d’accès par nom de fichier, sur XAMPP

Ce que vous voulez est d’obtenir le répertoire de travail courant donc utiliser pour obtenir

8voto

Sultanos Points 61
<pre><code></code><p><strong>itinéraire absolue</strong> du fichier en cours d'où vous réclament la route, la route de l’annuaire du serveur.</p><p>exemples de fichiers :</p><p>www/http/html/index.php ; Si vous placez ce code dans votre index.php il retournera :</p><p><code></code></p><p>www/http/html/class/MyClass.php ; Si vous placez ce code dans votre myclass.php il retournera :</p><p><code></code></p></pre>

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X