2010-06-10 4 views
2

Je travaille sur une petite fonction pour prendre un URL et retourner un chemin relatif en fonction de l'endroit où il se trouve.PHP pathinfo se fait berner par url dans la chaîne quert. Une solution de contournement?

Si l'URL contient un chemin dans la chaîne de requête, pathinfo renvoie des résultats incorrects. Ceci est démontré par le code ci-dessous:

$p = 'http://localhost/demos/image_editor/dir_adjuster.php?u=http://localhost/demos/some/dir/afile.txt'; 
$my_path_info = pathinfo($p); 
echo $p . '<br/><pre>'; 
print_r($my_path_info); 
echo '</pre>'; 

que les sorties de code:

http://localhost/demos/image_editor/dir_adjuster.php?u=http://localhost/demos/some/dir/afile.txt 

Array 
(
    [dirname] => http://localhost/demos/image_editor/dir_adjuster.php?u=http://localhost/demos/some/dir 
    [basename] => afile.txt 
    [extension] => txt 
    [filename] => afile 
) 

Ce qui est évidemment faux. Une solution de contournement?

Répondre

7

Une solution de contournement?

Oui, faire right;)

$url = urlencode('http://localhost/demos/some/dir/afile.txt'); 
$p = 'http://localhost/demos/image_editor/dir_adjuster.php?u='.$url; 

et pour les URL, en particulier ceux avec des chaînes de requête, parse_url() devrait être plus fiable pour extraire le composant de chemin; Après cela, exécutez le pathinfo() dessus.

+0

Merci! Cela obtient '[dirname]' correct, ce qui me donnait des problèmes, mais '[extension]' et '[nom de fichier]' sont toujours incorrects. Quoi qu'il en soit, mon problème est résolu car je me suis occupé de '[dirname]', mais je laisserais la question ouverte pendant une heure pour voir si quelqu'un peut obtenir tous les composants correctement. –

+0

@Majid ah, bien sûr, c'est une URL. parse_url() devrait fonctionner mieux pour cela: http://www.php.net/parse_url –

+0

Merci Pekka. Oui! Donc, j'utiliserais d'abord parse_url() pour obtenir un "chemin" correct, ensuite j'utiliserais pathinfo() dessus. Vous voudrez peut-être intégrer votre solution dans votre réponse afin qu'elle soit plus utile aux personnes qui la liront plus tard, mais si vous ne trouvez pas que cela en vaut la peine, modifiez la question et incluez votre méthode. –

Questions connexes