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

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

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

6 ответов

Решение

Если вы собираетесь использовать 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 использует 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 против /etc/php/cgi/php.ini против /etc/php/apache/php.ini на коробке Gentoo. Узнайте, какой файл INI используется с php -i | grep ini,

Использование PHP из командной строки

используйте " вместо " в Windows при использовании версии cli с -r

php -r "echo 1"

-- верный

php -r 'echo 1'

- неверный

  PHP Parse error:  syntax error, unexpected ''echo' (T_ENCAPSED_AND_WHITESPACE), expecting end of file in Command line code on line 1

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

php -i | grep sourceguardian

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

Ты можешь использовать:

 echo '<?php if(function_exists("my_func")) echo "function exists"; ' | php

Короткий тег "" Также может быть полезен:

 echo '<?= function_exists("foo") ? "yes" : "no";' | php
 echo '<?= 8+7+9 ;' | php

Закрывающий тег "?>" Необязателен, но не забывайте последний ";"!

Чтобы запустить оболочку PHP через команду Windows,

  1. php -a

Он откроет указанную ниже оболочку PHP в Windows, где я тестировал, простой square_val() функция.

      function square_val($num, $pow){
  return $num**$pow;
}

Приведенный выше код был протестирован.

Чтобы проверить работу приведенного выше кода echo square_val(4, 2); а потом echo square_val(4, 0.5);

Если вы используете Laravel, вы можете использовать php artisan tinkerчтобы получить потрясающую интерактивную оболочку для взаимодействия с вашим приложением Laravel. Однако Tinker под капотом работает с "Psysh", который является популярным PHP REPL, и вы можете использовать его, даже если вы не используете Laravel (чистый PHP):

       // Bare PHP:
>>> preg_match("/hell/", "hello");
=> 1

// Laravel Stuff:
>>> Str::slug("How to get the job done?!!?!", "_");
=> "how_to_get_the_job_done"

Одна замечательная особенность Psysh, которая мне действительно нравится, заключается в том, что он обеспечивает быстрый способ прямого поиска документов PHP из командной строки. Чтобы заставить его работать, вам нужно всего лишь выполнить следующие простые шаги:

       apt install php-sqlite3

а затем получите необходимую базу данных документации PHP и переместите ее в нужное место:

       wget http://psysh.org/manual/en/php_manual.sqlite
mkdir -p /usr/local/share/psysh/ && mv php_manual.sqlite /usr/local/share/psysh/

сейчас например:

Другие вопросы по тегам