PHP: un bon moyen pour universaliser des chemins de traverse OSs slash (les directions)
Mon simple préoccupation est d'être capable de gérer les chemins d'accès à travers les logiciels libres, principalement à l'égard de l'arrière et des barres obliques pour les séparateurs de répertoire.
J'ai été en utilisant DIRECTORY_SEPARATOR
, cependant:
-
C'est long à écrire
-
Chemins peuvent provenir de différentes sources, et pas nécessairement contrôlé par vous
Je suis actuellement à l'aide:
function pth($path)
{
$runningOnWindows = (strtoupper(substr(PHP_OS, 0, 3)) === 'WIN');
$slash = $runningOnWindows ? '\\' : '/';
$wrongSlash = $runningOnWindows ? '/' : '\\' ;
return (str_replace($wrongSlash, $slash, $path));
}
Veux juste savoir qu'il n'y a rien existant dans la langue que je suis en réinventant,
Il y a déjà une fonction intégrée de PHP due pour ce faire?
Il est le
DIRECTORY_SEPARATOR
constante qui contient le système d'exploitation actuel du séparateur. Il vous aidera à vous parce que vous n'avez pas besoin de vérifier runningOnWindows
. Vous avez juste besoin de faire de votre fonction de convertir tous les types de barres obliques sauf celle qui est définie dans DIRECTORY_SEPARATOR
OriginalL'auteur shealtiel | 2011-04-12
Vous devez vous connecter pour publier un commentaire.
La paresse n'est jamais une raison pour rien
ou
Cela en une seule étape, remplacer "le droit à un" avec lui-même, mais qui ne marche pas fait aucune différence.
Si vous savez pour sûr, qu'un chemin existe, vous pouvez utiliser la fonction realpath()
Cependant, ce n'est pas nécessaire à tous, parce que tous les OS comprend une barre oblique
/
comme un répertoire valide séparateur (même windows).'C:\Foo\Bar/baz/what.php'
est totalement un chemin d'accès au PHP.Héhé, ouais, il n'y a vraiment pas de raison de penser que. Autant que je sache, il y a exactement une exception à la règle, cela fait une différence sur la victoire php.net/domdocument.load Aussi, la solution est là 😉
"vous pouvez même mélanger des barres obliques sur Windows". Voici un exemple lorsque cela ne fonctionne pas sur windows: exec("rd chemin\/mixte/barres obliques") considéré la / une touche pour la commande
Je ne sais pas à chaque écueil sur windows, mais ce sujet est une solution en php et une commande exécutée via
exec()
a pas grand chose à faire avec php.Vous avez cité lui sur "la Paresse n'est jamais une raison pour rien", mais il a vraiment affirmé "les Chemins d'accès peuvent provenir de sources différentes, pas forcément contrôlé par vous".
OriginalL'auteur KingCrunch
Il vous manque de l'
DIRECTORY_SEPARATOR
constante prédéfinie.Assurez-vous. Mais il peut perdre la coutume détection de système d'exploitation, qui à mon humble avis est le facteur le plus désagréable dans ce code.
OriginalL'auteur Jon
Si vous allez passer ces chemins à la norme de fonctions de PHP, vous avez réellement n'avez pas besoin de fixer des chemins, autant que je puis dire. Fonctions de base comme
file_get_contents
oufopen
fonctionnent parfaitement bien avec n'importe quel type de chemin que vous jeter sur eux.OriginalL'auteur Ludovic Chabant
celui-ci va également s'assurer qu'il existe un slash de fin
/
lors de l'accès à un répertoire, mais je ne suis pas sûr que Windows serait comme ça.OriginalL'auteur smclaughlin