2012-03-01 3 views
107

Я хотел бы выполнить один оператор php, такой как if(function_exists("my_func")) echo 'function exists';, непосредственно с командной строкой, не используя отдельный файл php.Как выполнить PHP-код из командной строки?

Как это возможно?

+1

Выполнение функции function_exists() без использования каких-либо других файлов, содержащих определенную пользователем функцию, не будет очень хорошим, за исключением тестирования версии PHP, которую вы можете узнать другими способами. На какую функцию вы хотите протестировать? –

+0

Я ищу тестирование этой функции: sg_load() – Steve

+2

Похоже, что вы действительно хотите узнать, включено ли расширение php sourceguardian? –

ответ

173

Если вы собираетесь делать PHP в командной строке, я рекомендую установить phpsh, a decent PHP shell. Это намного веселее.

Во всяком случае, команда РНР два переключателя для выполнения кода из командной строки:

-r <code>  Run PHP <code> without using script tags <?..?> 
-R <code>  Run PHP <code> for every input line 

Вы можете использовать РНР -r переключатель как таковой:

php -r 'echo function_exists("foo") ? "yes" : "no";' 

выше PHP команда выше должна выходno и 0 как вы можете видеть:

>>> php -r 'echo function_exists("foo") ? "yes" : "no";' 
no 
>>> echo $? # print the return value of the previous command 
0 

Другой забавный переключатель PHP -a:

-a    Run as interactive shell 

Это рода хромой по сравнению с phpsh, но если вы не хотите, чтобы установить the awesome interactive shell for php made by facebook to get tab completion, history, and so on, затем использование -a как таковой:

>>> php -a 
Interactive shell 

php > echo function_exists("foo") ? "yes" : "no"; 
no 
php > 

Если он не работает на вашей коробке, как на моей коробке * эс * (испытанной на Ubuntu и Arch), то вероятно, ваша установка PHP нечеткое или сломанный. Если вы запустите эту команду:

php -i | grep 'API' 

Вы должны см:

Server API => Command Line Interface 

Если вы не, это означает, что может быть другая команда обеспечивает CLI SAPI. Попробуйте php-cli, возможно, это пакет или команда, доступная в вашей ОС.

Если вы видите, что ваша команда PHP использует CLI (интерфейс командной строки) SAPI (Server API), а затем запустить php -h | grep code в выяснить, какой сумасшедший переключатель - как это не изменилось за год- позволяет для запуска кода в вашей версии/настройке.

Еще несколько примеров, просто чтобы убедиться, что он работает на моих коробках:

>>> php -r 'echo function_exists("sg_load") ? "yes" : "no";' 
no 
>>> php -r 'echo function_exists("print_r") ? "yes" : "no";' 
yes 

Кроме того, обратите внимание, что это возможно, что расширение загружается в CLI, а не в CGI или Apache SAPI.Вероятно, что несколько PHP SAPI используют разные файлы php.ini, например. /etc/php/cli/php.ini vs /etc/php/cgi/php.ini vs /etc/php/apache/php.ini на коробке Gentoo. Узнайте, какой файл ini используется с php -i | grep ini.

+3

ничего не возвращает – Steve

+0

Возможно, ваша установка php нарушена. Я обновил свой ответ, включая подсказки, чтобы понять это. – jpic

+0

Добавлена ​​заметка о php -a, которая может быть вам полезна. – jpic

1

В командной строке:

php -i | grep sourceguardian 

Если это есть, то вы получите какой-нибудь текст. Если нет, вы ничего не получите.

+0

Либо я слепой, либо этот ответ не имеет никакого отношения к вопросу. Как этот ответ должен отвечать на вопрос, спрашивая: «Как запустить PHP-код непосредственно из командной строки, не сохраняя PHP-код в' .php' файл? _ "? – trejder

+6

@trejder На мгновение я подумал, не ответил ли я на неправильный вопрос, но потом посмотрел историю изменений и комментарии. Это отвечает тому, что действительно нужно OP: выяснение, было ли загружено определенное расширение PHP. С тех пор этот вопрос был перефразирован, поэтому сейчас он не подходит. –

Смежные вопросы