Различные результаты PHP с опцией -r - PullRequest
2 голосов
/ 18 ноября 2009

PHP, похоже, дает различные значения хеш-функции, когда я использую php -r <code> в командной строке и когда я запускаю файл с php <file>, php -f <file> или запускаю код внутри Apache.

Например, использование 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'.

Может ли кто-нибудь указать, почему хэши могут отличаться, используя два метода выше? Есть ли способ запустить PHP в командной строке, где я могу ввести код, не вводя его в файл, и посмотреть вывод, как если бы он был запущен внутри файла / Apache? Я использую командную строку для быстрого тестирования фрагмента, когда пошаговая отладка кода не настроена.

Спасибо.

PS: я использую PHP 5.2.11 с Suhosin-Patch 0.9.7 (cli) на OpenSUSE 11.1.

Ответы [ 2 ]

9 голосов
/ 18 ноября 2009

Когда вы запускаете $ php -r "print sha1('$1S*90');" на вашей оболочке bash, bash интерпретирует $1 как переменную оболочки, которая, вероятно, пуста, если вы ее не установили.

Итак, PHP видит только это: print sha1('S*90');

Результат которого: 77cd8b48ceca53e018f80536b0a44c5b6710425f, значение, которое вы получали в первый раз. :)

Вы можете избежать этого следующим образом:

$ php -r "print sha1('\$1S*90');"
0 голосов
/ 18 ноября 2009

$ и или * в вашей строке будут интерпретироваться, возможно из-за "вместо"

...