2

php -r <code>当我在命令行上使用以及使用 , 执行文件php <file>php -f <file>在 Apache 中运行代码时,PHP 似乎给出了不同的哈希值。

例如,在命令行上使用 SHA1 使用-r

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

当我尝试对testSHA.php以下文件进行相同操作时:

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

并使用以下命令在命令行或 Apache 内部运行它mod_php5

$ php testSHA.php
201cb5aaa7d4db1a49d9be1f2c06d45e4c2a69f2

但奇怪的是,当我尝试使用不同的输入字符串(例如“123456789”)时,哈希值确实使用这两种方法匹配。

我不认为我在这两种方法中使用了不同的编码或字符集。我还尝试使用 MD5,但仍然在命令行上使用-r“-f”和“-f”获得不同的哈希值。

有人可以指出为什么使用上述两种方法哈希会有所不同吗?有没有办法在命令行上运行 PHP,我可以在不输入文件的情况下键入代码,并查看输出,就好像它在文件/Apache 中运行一样?当未设置逐步代码调试时,我使用命令行进行快速代码段测试。

谢谢。

PS:我在 OpenSUSE 11.1 上使用 PHP 5.2.11 和 Suhosin-Patch 0.9.7 (cli)。

4

2 回答 2

9

当你$ php -r "print sha1('$1S*90');"在你的 bash shell 上运行时,bash 被解释$1为一个 shell 变量,除非你设置它,否则它可能是空的。

所以 PHP 只看到了这个:print sha1('S*90');

结果是:77cd8b48ceca53e018f80536b0a44c5b6710425f,您第一次获得的值。:)

你可以像这样逃避它:

$ php -r "print sha1('\$1S*90');"
于 2009-11-18T20:42:18.483 回答
0

您的字符串中的 $ 和或 * 将被解释,可能是因为 " 而不是 '

于 2009-11-18T20:49:41.387 回答