Remplacer le chemin réel de PHP ()
Apparemment, realpath
est très bogué. En PHP 5.3.1, il provoque des plantages aléatoires.
En 5.3.0 et moins, realpath
au hasard échoue et renvoie false (pour la même chaîne, bien sûr), plus il échoue toujours sur realpath
-ing la même chaîne à deux reprises/plus (et bien sûr, il fonctionne de la première heure).
Aussi, il est donc buggy dans les précédentes versions de PHP, qu'il est complètement inutilisable. Et bien...c'est déjà le cas, puisque ce n'est pas cohérent.
De toute façon, quelles options dois-je avoir? Peut-être réécrire par moi-même? Est-ce recommandé?
source d'informationauteur Christian
Vous devez vous connecter pour publier un commentaire.
Merci à Sven Arduwie du code (souligné par Pekka) et de quelques modifications, j'ai construit une (on l'espère) une meilleure mise en œuvre:
NB: Contrairement à PHP
realpath
cette fonction ne retourne pas false en cas d'erreur, il renvoie un chemin d'accès qui est aussi loin que possible, à la résolution de ces bizarreries.Note 2: Apparemment, certaines personnes ne peuvent pas lire correctement. Truepath() ne fonctionne pas sur les ressources du réseau, y compris l'UNC et les Url. Il travaille pour le système de fichiers local.
voici le code modifié qui prend en charge les chemins d'accès UNC ainsi
Pour ceux Zend d'utilisateurs là-bas, CETTE réponse peut vous aider, comme il l'a fait moi:
Je n'ai jamais entendu parler de tels d'énormes problèmes avec
realpath()
(j'ai toujours pensé qu'il vient d'interfaces de certains OS sous-jacent de la fonctionnalité serait intéressé par des liens), mais le L'Utilisateur A Contribué Notes à la page de manuel ont un certain nombre d'autres implémentations. Ici en est un qui semble correct.Bien sûr, il n'est pas garanti que ces implémentations de prendre soin de toutes les croix-plate-forme de bizarreries et d', de sorte que vous auriez à faire un test pour voir si elle répond à vos besoins.
Aussi loin que je peux voir, cependant, aucun d'entre eux renvoie à un canoniser chemin, ils seulement de résoudre des chemins relatifs. Si vous avez besoin, je ne suis pas sûr de savoir si vous pouvez obtenir autour de
realpath()
(à l'exception peut-être de l'exécution d'une (dépendant du système) de la console de commande qui vous donne le chemin d'accès complet.)Je sais que c'est un vieux thread, mais il est vraiment utile.
Je rencontre un drôle de Phar::interceptFileFuncs problème lorsque j'ai mis en place chemin relatif dans phpctagsle
realpath()
est vraiment vraiment buggy à l'intérieur de phar.Grâce à ce thread me donner quelques lumières, vient ici avec mon implémentation basée sur christian's la mise en oeuvre de ce fil et ce commentaires.
Espère que cela fonctionne pour vous.
Sur Windows 7, le code fonctionne très bien. Sur Linux, il y a un problème dans le chemin généré commence avec (dans mon cas) home/xxx quand il doit commencer par /home/xxx ... c'est à dire la première /, en indiquant le dossier racine, est manquant.
Le problème n'est pas tellement avec cette fonction, mais avec ce que getcwd retourne sous Linux.