Répertoire PHP séparateurs, forçant barre oblique; non-intrusive

Chaque fois que je travaille avec PHP (souvent) en général, je travail sur une zone de Windows, cependant j' (essayer de) développer la plate-forme agnostique applications; un point essentiel de la question de l'utilisation de séparateurs de répertoire.

Comme beaucoup le savent, faire un système de fichiers de travail dans un environnement Windows en PHP, vous pouvez utiliser des barres obliques au lieu de reculer, et PHP sortes sous le capot. C'est bien beau quand il vient à l'aide de littéraux de chaîne pour passer un chemin de fopen() ou que ce soit; mais lors de la récupération des chemins, il __FILE__ ou en expansion avec realpath(), les chemins extraits sont bien sûr en utilisant le système d'exploitation approprié des barres obliques. Aussi, j'ai remarqué quelques incohérences dans les barres obliques. Une fois ou deux fois par __DIR__ a ajouté un (une barre oblique inverse) et realpath() trop (je préfère le slash de fin, mais pas de façon intermittente)

C'est clairement un problème pour la comparaison de chaînes, parce qu'au lieu de faire:

compare_somehow('path/to/file.php', __DIR__);

Pour des raisons de fiabilité, je vais devoir aller:

compare_somehow('path/to/file.php', rtrim(strtr(__DIR__, '\\', '/'), '/') . '/');

Cela semble être beaucoup de travail. Je peux le déposer dans une fonction, assurez-vous; maintenant, je suis coincé avec une fonction arbitraire de la dépendance dans tous mes OO code.

Je comprends que PHP n'est pas parfait, et le logement nécessaire, mais il doit sûrement exister des plate-forme agnostique solution pour forcer le système de fichiers hits pour récupérer de l'avant réduit les chemins, ou au moins un non-intrusif à introduire une classe indépendante de la fonction de ce but.

Résumé de la question(s):

  • Est-il magique (si fiable) solution de contournement, hack, ou autre pour forcer PHP à coup de pied arrière vers l'avant réduit le système de fichier chemins, quel que soit le système d'exploitation serveur?
  • Je vais supposer que la réponse est pas à la ci-dessus, afin de passer; quelles sont les dispositions qui puis-je faire pour faire respecter barre oblique (ou quel que soit le choix, vraiment) comme séparateur de répertoire? Je suis en supposant que par le biais de ladite fonction de filtre, mais maintenant, où faut-il aller?

Slash pour tout. Même si le système d'exploitation hôte séparateur est #*&@.

avez-vous regardé DIRECTORY_SEPARATOR?
Certainement. Je ne vois pas comment il est de toute prestation. 'path'.DS.'to'.DS.'file.php' si je alias pour DS, mais même cela est une douleur. Aussi, l'utilisateur a fourni des chemins (les fichiers de configuration, etc.) doivent encore être strtr()-ed ou l'utilisation DIRECTORY_SEPARATOR eux-mêmes.
Pourquoi comparez-vous le chemin? Ne pouvez-vous pas simplement tester si le fichier ou le répertoire existe, à l'aide de PHP fonctions? Qui sera OS agnostique n'est-ce pas?

OriginalL'auteur Dan Lugg | 2011-11-17