Подтвердить что ты не робот

Выполнить строку кода PHP в командной строке

Я хотел бы иметь возможность запускать строку кода 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.

Я написал этот script (который я назвал run_php.php) - который работает, но я не являюсь его большим поклонником только потому, что чувствую, что должен быть более "правильный" способ сделать это.

#!/usr/bin/php5 -q
<?php echo eval($argv[1]); ?> 

Мой вопрос: есть ли опция -r? Если да, то почему он недоступен, когда я запускаю --help? Если нет опции -r, что это лучший способ сделать это (не записывая посредника script, если это возможно)?

Спасибо!

=== РЕДАКТИРОВАТЬ ===

Поскольку я не думаю, что это было очень ясно выше, опция -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 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 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

Извините за путаницу.

4b9b3361

Ответ 1

EDIT2: Да, это там, в PHP 5.2 cli SAPI.

РЕДАКТИРОВАТЬ: Если вы не можете обновить и что случай нет такой опции в PHP 5.2 (у меня ее нет под рукой для тестирования), вы можете сделать это:

[email protected]:~$ echo "<?php echo \"hi\\n\";" | php
hi

Оригинал:

Есть действительно опция -r (хотя я не уверен в PHP 5.2):

D:\>php -r "echo 'hi';";
hi

Просто убедитесь, что вы используете версию PHP для командной строки. php --version должен дать вам что-то вроде этого (обратите внимание на "cli" ):

D:\>php --version
PHP 5.3.0 (cli) (built: May 20 2010 19:05:12) (DEBUG)
Copyright (c) 1997-2009 The PHP Group
Zend Engine v2.3.0, Copyright (c) 1998-2009 Zend Technologies

Ответ 2

В новых версиях PHP вы просто набираете "php -a", и вы прыгаете в интерактивный режим, где вы можете экспериментировать с PHP.

Ответ 3

Взгляните на эту страницу на функции командной строки PHP, если вы еще этого не сделали. Есть несколько сообщений о проблемах на основе ОС и двойных или одинарных кавычек.

Я бы также проверил информацию PHP

php -i

чтобы узнать, был ли PHP скомпилирован с отключенной поддержкой CLI (--disable-cli).

Ответ 4

В конце концов не требуется дополнительной полуколонки.

Вы можете указать php -r "echo 'hi';" вместо php -r "echo 'hi';";

Другой пример (для получения текущей метки времени в командной строке):

php -r 'print time()."\n";'

Ответ 5

Самый простой способ сделать это - использовать флаг -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