Как выполнить PHP-код из командной строки?

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

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

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

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

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

Вы можете использовать php -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 , но если вы не хотите устанавливать потрясающую интерактивную оболочку для php, созданной facebook, чтобы получить завершение вкладки, историю и т. Д. , Тогда используйте -a как таковой :

 >>> php -a Interactive shell php > echo function_exists("foo") ? "yes" : "no"; no php > 

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

 php -i | grep 'API' 

Вы должны увидеть:

 Server API => Command Line Interface 

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

Если вы видите, что ваша команда php использует интерфейс командной строки (интерфейс командной строки) SAPI (серверный API), запустите php -h | grep code 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 php -i | grep ini .

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

 php -i | grep sourceguardian 

Если он есть, вы получите текст. Если нет, вы ничего не получите.