使用-r选项可以获得不同的PHP结果

使用-r选项可以获得不同的PHP结果,php,sha1,Php,Sha1,当我在命令行上使用PHP-r以及使用PHP、PHP-f执行文件或在Apache内部运行代码时,PHP似乎给出了不同的哈希值 例如,使用-r在命令行上使用SHA1: $ php -r "print sha1('$1S*90');" 77cd8b48ceca53e018f80536b0a44c5b6710425f 当我尝试使用下面的文件testSHA.php时: <?php print sha1('$1S*90'); ?> 但奇怪的是,当我尝试不同的输入字符串(如“123456789

当我在命令行上使用
PHP-r
以及使用
PHP
PHP-f
执行文件或在Apache内部运行代码时,PHP似乎给出了不同的哈希值

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

$ php -r "print sha1('$1S*90');"
77cd8b48ceca53e018f80536b0a44c5b6710425f
当我尝试使用下面的文件
testSHA.php
时:

<?php
print sha1('$1S*90');
?>
但奇怪的是,当我尝试不同的输入字符串(如“123456789”)时,使用这两种方法哈希值确实匹配

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

有人能指出为什么使用上述两种方法的散列会有所不同吗?有没有一种方法可以在命令行上运行PHP,这样我就可以键入代码而无需在文件中输入代码,并且可以像在文件/Apache中运行一样查看输出?当没有设置单步调试代码时,我使用命令行进行快速代码段测试

谢谢


PS:我在OpenSUSE 11.1上使用PHP5.2.11和Suhosin修补程序0.9.7(cli)。

当您在bash shell上运行
$PHP-r“print sha1('$1S*90');“
时,bash将
$1
解释为shell变量,除非您已经设置它,否则该变量可能为空

所以PHP看到的是:
printsha1('S*90')

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

你可以这样逃避它:

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

字符串中的$and或*将被解释,可能是因为“而不是”

谢谢,本。我错过了狂欢会可能会解释它。我落入了我的同事们要寻找的同一个陷阱:)当有几个字符需要转义并且我们知道shell可能解释的字符时,转义有帮助。Python和Ruby可以像Bash一样在命令行上以解释器模式运行,从而避免shell解释问题。您知道PHP是否可以这样执行吗?它可能类似于Yii控制台工具,yiic,没有Yii依赖关系。
$php-a
提供了一种(有点有限的)交互模式是的,我过去尝试过
$php-a
,但不知道如何显示执行结果。在你指出之后,我做了一些搜索。似乎我们需要使用
是否可以让对此投否决票的人告诉我错误是什么?谢谢
$ php -r "print sha1('\$1S*90');"