使用-r选项的不同PHP结果

时间:2009-11-18 20:35:35

标签: php sha1

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

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

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

当我尝试使用下面的文件testSHA.php时:

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

使用mod_php5

在命令行或Apache内部运行它
$ php testSHA.php
201cb5aaa7d4db1a49d9be1f2c06d45e4c2a69f2

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

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

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

感谢。

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

2 个答案:

答案 0 :(得分:9)

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

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

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

你可以这样逃避:

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

答案 1 :(得分:0)

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