2009-11-18 7 views
2

PHP semble donner différentes valeurs de hachage lorsque j'utilise php -r <code> sur la ligne de commande et lorsque j'exécute le fichier avec php <file>, php -f <file>, ou exécutez le code dans Apache.Résultats PHP différents avec l'option -r

Par exemple, une utilisation SHA1 sur la ligne de commande à l'aide -r:

$ php -r "print sha1('$1S*90');" 
77cd8b48ceca53e018f80536b0a44c5b6710425f 

Lorsque je tente la même chose avec le fichier testSHA.php ci-dessous:

<?php 
print sha1('$1S*90'); 
?> 

et l'exécuter sur la ligne de commande ou à l'intérieur d'Apache en utilisant mod_php5:

$ php testSHA.php 
201cb5aaa7d4db1a49d9be1f2c06d45e4c2a69f2 

Stra Cependant, les hachages correspondent à l'aide des deux méthodes lorsque j'essaie une chaîne d'entrée différente telle que "123456789". Je ne pense pas que j'utilise un encodage ou un jeu de caractères différent dans les deux méthodes. J'ai également essayé d'utiliser MD5 et toujours obtenir différents hachages sur la ligne de commande avec -r et '-f'.

Quelqu'un pourrait-il expliquer pourquoi les hachages seraient différents en utilisant les deux méthodes ci-dessus? Y at-il un moyen d'exécuter PHP sur la ligne de commande où je peux taper le code sans l'entrer dans un fichier, et voir la sortie comme si elle était exécutée dans un fichier/Apache? J'utilise la ligne de commande pour les tests d'extraits rapides lorsque le débogage de code pas à pas n'est pas configuré.

Merci. PS: J'utilise PHP 5.2.11 avec Suhosin-Patch 0.9.7 (cli) sur OpenSUSE 11.1.

Répondre

9

Lorsque vous exécutez $ php -r "print sha1('$1S*90');" sur votre shell bash, bash interprète $1 comme une variable shell, qui est probablement vide sauf si vous l'avez défini.

, PHP voit ceci: print sha1('S*90');

Le résultat est: 77cd8b48ceca53e018f80536b0a44c5b6710425f, la valeur première fois été devient. :)

Vous pouvez y échapper comme ceci:.

$ php -r "print sha1('\$1S*90');" 
+0

Merci, Ben m'a manqué le Bash pourrait bien l'interpréter Je suis tombé dans le même piège que je cherche mes collègues :) Echapper aide quand il y a quelques caractères à s'échapper et nous connaissons les caractères que le shell peut interpréter Python et Ruby peuvent s'exécute en mode interpréteur sur la ligne de commande comme le fait Bash, échappant ainsi au problème de l'interpréteur de shell. Seriez-vous capable de savoir si PHP peut être exécuté de cette façon? Il pourrait être quelque chose comme l'outil de console Yii, yiic, sans dépendance Yii. – SSJ

+0

'$ $ php -a' vous donne un mode interactif (un peu limité) –

+0

Oui, j'ai essayé' $ php -a' dans le passé mais je n'ai pas compris comment afficher le résultat de l'exécution. J'ai fait des recherches après que vous l'ayez fait remarquer. Il semble que nous devons utiliser ' SSJ

0

Le $ et ou * dans votre chaîne sera interprété, peut-être à cause de la "au lieu de"

Questions connexes