Як виконати PHP-код з командного рядка?


163

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

Як це можливо?


1
робити function_exists () без використання будь-яких інших файлів, що містять визначені користувачем функції, не буде дуже корисним, за винятком тестування версії PHP, яку ви можете дізнатися іншими способами. Яку функцію ви хочете протестувати?
Метт Гібсон

Я шукаю тестування цієї функції: sg_load ()
Стів

2
Звучить як те, що ви насправді хочете, це з’ясувати, чи ввімкнено розширення php-файлу-джерела?
Метт Гібсон

2
тоді phpinfo () повинен вам сказати.
jpic

Відповіді:


256

Якщо ви збираєтеся робити PHP в командному рядку, я рекомендую вам встановити phpsh, гідну оболонку PHP . Це набагато веселіше.

У будь-якому випадку команда php пропонує два перемикачі для виконання коду з командного рядка :

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

Ви можете використовувати -r-перемикач php як такий:

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 (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.inivs /etc/php/apache/php.iniу вікні Gentoo. Дізнайтеся, з яким файлом ini використовується php -i | grep ini.


Можливо, ваша настройка php зламана. Я оновив свою відповідь, включаючи підказки, щоб це зрозуміти.
jpic

Додано примітку про php -a, яка може бути вам корисною.
jpic

6
Зауважте, що phpsh більше не підтримується його автором (Facebook), а хтось із сторінки Google Групи в 2012 році сказав, що "phpsh більше не підтримується і не є корисним" . Ви можете заглянути в Boris REPL для покращеної консолі php.
Бен Крізі

3

У командному рядку:

php -i | grep sourceguardian

Якщо він є, то ви отримаєте текст. Якщо ні, то ви нічого не отримаєте.


4
Або я сліпий, або ця відповідь не має нічого спільного з питанням. Як ця відповідь повинна відповісти на питання із запитом " Як запустити PHP-код безпосередньо з командного рядка, не зберігаючи PHP-код у .phpфайл? "
трейдер

15
@trejder На якусь мить я задумався, чи відповів я неправильно, але потім переглянув історію редагування та коментарі. Це дає відповідь на те, що ОП, здавалося, насправді потребує: з’ясування, чи завантажено конкретне розширення PHP. Питання відтоді переосмислено, тож воно зараз не так добре підходить.
Метт Гібсон

3

Ви можете використовувати:

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

Короткий тег " <? = " Також може бути корисним:

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

Закриваючий тег "?>" Необов'язковий, але не забудьте остаточний ";" !


2
Здається, це більше проблем, ніж прийнята відповідь 7 років. Використовуючи php -rне потрібно турбуватися про відкриття тегів PHP.
miken32

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.