Я хотел бы иметь возможность запускать строку кода PHP в командной строке, аналогичную тому, как работают следующие параметры:
:~> perl -e "print 'hi';" :~> python -c "print 'hi'" :~> ruby -e "puts 'hi'"
Я хотел бы иметь возможность сделать:
:~> php "echo 'hi';"
Я читал, что есть опция -r, которая может делать то, что мне нужно для php, но, похоже, она недоступна, когда я пытаюсь ее использовать. Я пробовал использовать PHP 5.2.13 и PHP 4.4.9, а также не имеет опции -r.
Я написал этот скрипт (который я назвал run_php.php) – который работает, но я не являюсь его огромным поклонником только потому, что чувствую, что должен быть более «правильный» способ сделать это.
#!/usr/bin/php5 -q <?php echo eval($argv[1]); ?>
Мой вопрос: есть ли опция -r? Если да, то почему он недоступен, когда я запускаю –help? Если нет опции -r, каков наилучший способ сделать это (если это возможно), если это возможно).
Благодаря!
=== EDIT ===
Поскольку я не думаю, что это было очень ясно выше, опция -r НЕ доступна мне. Вот вывод php -h для обеих версий PHP, которые я запускаю.
PHP 4.4.9
Usage: php [-q] [-h] [-s] [-v] [-i] [-f <file>] php <file> [args...] -a Run interactively -C Do not chdir to the script's directory -c <path>|<file> Look for php.ini file in this directory -n No php.ini file will be used -d foo[=bar] Define INI entry foo with value 'bar' -e Generate extended information for debugger/profiler -f <file> Parse <file>. Implies `-q' -h This help -i PHP information -l Syntax check only (lint) -m Show compiled in modules -q Quiet-mode. Suppress HTTP Header output. -s Display colour syntax highlighted source. -v Version number -w Display source with stripped comments and whitespace. -z <file> Load Zend extension <file>.
php 5.2.13
Usage: php [-q] [-h] [-s] [-v] [-i] [-f <file>] php <file> [args...] -a Run interactively -C Do not chdir to the script's directory -c <path>|<file> Look for php.ini file in this directory -n No php.ini file will be used -d foo[=bar] Define INI entry foo with value 'bar' -e Generate extended information for debugger/profiler -f <file> Parse <file>. Implies `-q' -h This help -i PHP information -l Syntax check only (lint) -m Show compiled in modules -q Quiet-mode. Suppress HTTP Header output. -s Display colour syntax highlighted source. -v Version number -w Display source with stripped comments and whitespace. -z <file> Load Zend extension <file>.
Существует опция NO -r. Когда я пытаюсь использовать параметр -r, я получаю:
Error in argument 1, char 2: option not found r
Извините за путаницу.
EDIT2: Да, он есть в клиенте SAP 5.2 .
EDIT: если вы не можете обновить, и это так, что такой возможности нет в PHP 5.2 (у меня нет его под рукой для тестирования), вы можете сделать это:
glopes @ nebm: ~ $ echo "<? php echo \" hi \\ n \ ";" | PHP Здравствуй
Оригинал:
Существует действительно опция -r
(хотя я не уверен в PHP 5.2):
D: \> php -r "echo 'hi';"; Здравствуй
Просто убедитесь, что вы используете версию командной строки PHP. php --version
должно дать вам что-то вроде этого (обратите внимание на cli):
D: \> php --версия PHP 5.3.0 (cli) (построено: 20 мая 2010 19:05:12) (DEBUG) Copyright (c) 1997-2009 PHP Group Zend Engine v2.3.0, Copyright (c) 1998-2009 Zend Technologies
В новых версиях PHP вы просто набираете «php -a», и вы прыгаете в интерактивный режим, где вы можете экспериментировать с PHP.
Взгляните на эту страницу на функциях командной строки PHP , если вы еще этого не сделали. Есть несколько сообщений по вопросам, основанным на ОС, и двойные или одинарные кавычки.
Я также хотел бы проверить информацию PHP
php -i
чтобы узнать, был ли скомпилирован PHP с отключенной поддержкой CLI (–disable-cli).
В конце концов, дополнительная полуколонка не требуется.
Вы можете упомянуть php -r "echo 'hi';"
вместо php -r "echo 'hi';";
Другой пример (Чтобы получить текущую временную метку в командной строке):
php -r 'print time()."\n";'
Самый простой способ сделать это – использовать флаг -r. Однако я обнаружил, что он не допускает многострочные входы. Чтобы обойти это, вы можете сделать это:
php -r "passthru(file_get_contents('php://stdin'));"
Это позволяет вам подключаться от stdin, например:
echo -n "echo 'test';" | php -r "passthru(file_get_contents('php://stdin'));"
Однако, чтобы ответить на исходный вопрос, если у вас нет флага -r, также можно использовать флаг -f – просто передайте stdin в качестве файла для открытия: php -f /dev/stdin
Если вы это сделаете, имейте в виду, что a) вам нужно включить пробел в начале ввода, и b) вам нужно открыть с помощью <?php
. Пример:
echo -ne " <?php\necho 'test';" | php -f /dev/stdin