1 votes

Comment faire référence à un chemin d'accès local d'une manière adaptée au système d'exploitation ?

En PHP, comment se référer aux fichiers d'une manière conviviale pour le système d'exploitation ? Je regarde un code comme

<?php
require_once(dirname(dirname(__FILE__)).'/common/config.inc.php');

...

que je dois exécuter sur une machine Windows, mais il n'analyse pas le chemin correctement :

PHP Warning:  require_once(C:\workspace/common/config.inc.php): failed to open stream: No such file or directory in C:\workspace\somescript.php on line 2
PHP Fatal error:  require_once(): Failed opening required 'C:\workspace/common/config.inc.php' (include_path='.;C:\php5\pear') in C:\workspace\somescript.php on line 2

On dirait qu'il essaie de s'ouvrir avec des barres obliques, ce que Windows n'aime pas. Le fichier C:\workspace\commonconfig.inc.php existent. Le script ne le trouve pas parce qu'il contient des barres obliques, n'est-ce pas ?

Dans la déclaration require_once, ne devrais-je pas exprimer la dernière partie du chemin d'une manière compatible avec os ? Comment faire ?

En PHP, existe-t-il une fonction similaire à celle de Python, à savoir os.path.normpath(path) ...qui prend une chaîne de caractères ressemblant à un chemin et renvoie le chemin approprié au système d'exploitation en cours d'exécution...

8voto

nickf Points 185423

Il y a plusieurs choses que vous pourriez utiliser.

Au lieu de coder en dur les barres obliques, utilisez la constante intégrée DIRECTORY_SEPARATOR ou, comme je le préfère, faites-le vous-même :

define('DS', DIRECTORY_SEPARATOR);

cela rend votre code un peu plus compact.

Vous pouvez également utiliser realpath() et exprimez tous vos chemins avec des barres obliques de style Unix, puisque :

Sous Windows, realpath() transforme les chemins d'accès de style Unix en chemins d'accès de style Windows.
<?php echo realpath('/windows/system32'); ?>

L'exemple ci-dessus produira le résultat suivant C:\WINDOWS\System32

2voto

karim Points 111
require\_once(realpath(dirname(\_\_FILE\_\_) . "/the/rest/of/yr/path/and/file.php"));

2voto

cletus Points 276888

C'est ce que je fais :

$dir = str_replace("\\", '/', dirname(dirname(__FILE__));
require_once $dir . '/common/config.inc.php';

Fonctionne sous Windows et Linux. Bien que dans ce cas, pourquoi ne pas le faire :

require_once '../common/config.inc.php';

?

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