Запуск PHP-скрипта з командного рядка


84

Як я можу запустити PHP-скрипт із командного рядка за допомогою інтерпретатора PHP, який використовується для синтаксичного аналізу веб-сценаріїв?

У мене є встановлений phpinfo.phpфайл, до якого можна отримати доступ з веб-шоу German. Однак, якщо я запускаю phpinfo.phpкомандний рядок за допомогою - php phpinfo.phpі grepдля German, я не знаходжу його. Отже, обидва phps різні. Мені потрібно запустити сценарій, phpна якому Germanвстановлений.

Як я можу це зробити?


1
просто зробіть php -iі проаналізуйте це
Лоуренс Чероне

1
Що це означає? Я все-таки це зробив, але нічого
Сіддхарт,

1
Будь ласка, додайте більше подробиць про встановлене програмне забезпечення веб-сервера , наприклад, додайте вихідні дані phpinfo();до свого запитання. Також оновив свою відповідь.
Сампо Саррала - codidact.org

Відповіді:


163

ОНОВЛЕННЯ:

Після непорозуміння я нарешті зрозумів те, що ви намагаєтесь зробити. Вам слід перевірити файли конфігурації сервера; ви використовуєте apache2 чи інше серверне програмне забезпечення?

Шукайте рядки, які починаються з LoadModule php... Ймовірно, є конфігураційні файли / каталоги з іменами modsабо щось подібне, почніть звідти.

Ви також можете перевірити вихідні дані php -r 'phpinfo();' | grep phpта порівняти рядки phpinfo();з веб-сервером.

Щоб запустити phpінтерактивно:

(щоб ви могли вставити / написати код у консолі)

php -a

Щоб зробити аналіз файлу та виведення на консоль:

php -f file.php

Проаналізувати файл і вивести в інший файл:

php -f file.php > results.html

Вам ще щось потрібно?

Щоб запустити лише невелику частину, один рядок або подібне, ви можете використовувати:

php -r '$x = "Hello World"; echo "$x\n";'

Якщо ви використовуєте Linux, то виконайте це man phpна консолі.

якщо вам потрібно / хочете запустити php через fpm, використовуйте cli fcgi

SCRIPT_NAME="file.php" SCRIP_FILENAME="file.php" REQUEST_METHOD="GET" cgi-fcgi -bind -connect "/var/run/php-fpm/php-fpm.sock"

де /var/run/php-fpm/php-fpm.sock - це ваш файл сокета php-fpm.


4
Ні. Проблема полягає в тому, що в системі є кілька phps. Мені потрібно з’ясувати, який php використовується для синтаксичного аналізу веб-сценаріїв. Якщо я запускаю php з консолі, він не може знайти клас - але якщо я зателефоную до цього сценарію з Інтернету, то цієї проблеми немає. Отже, це означає, що використовуваний PHP відрізняється, чи не так?
Сіддхарт,

2
@Siddharth Вам слід перевірити це на конфігурації вашого сервера. Додайте дані свого сервера до запитання.
Сампо Саррала - codidact.org

2
Так. Як я можу це перевірити? Коротше кажучи, як я можу використовувати правильний php з командного рядка?
Сіддхарт,

2
У Linux ви можете використовувати, which phpщоб повідомити, який виконуваний файл ви використовуєте за замовчуванням. Щоб використовувати інший виконуваний файл, ви повинні вказати повний шлях до виконуваного файлу, який ви хочете використовувати:/path/to/specific/php -f file.php > results.html
Emilio P.

1
приємна деталь, +1 для пояснення. Просто тут, щоб коментувати, будьте уважні, змінюючи середовище, можливо, вам потрібно використовувати повний шлях до каталогу, навіть коли скрипт знаходиться в тому ж каталозі, що і php.exe
Леандро

3

Я шукав вирішення цієї проблеми в Windows, і, схоже, якщо у вас немає середовищ, які змінюються, вам потрібно вставити повний каталог. Наприклад, з файлом в тому ж каталозі, що і PHP:

F:\myfolder\php\php.exe -f F:\myfolder\php\script.php

Якщо ви запустіть цей дослівний текст із командного рядка, >на початку програма, ймовірно, перенаправить вихід -f ...(можливо, помилка) у ваш файл php.exe та видалить вміст.
mwfearnley

2

У SuSE існує два різні файли конфігурації для PHP: один для Apache і один для CLI (інтерфейс командного рядка). У каталозі / etc / php5 / ви знайдете каталог "apache2" та каталог "cli". Кожен має файл "php.ini". Файли призначені для однакових цілей (конфігурація php), але застосовуються до двох різних способів запуску PHP. Ці файли, серед іншого, завантажують модулі, які використовує PHP.

Якщо ваша ОС схожа, то ці два файли, ймовірно, не однакові. Ваш Apache php.ini, ймовірно, завантажує модуль редуктора, тоді як cli php.ini ні. Коли модуль було встановлено (автоматично або вручну), він, ймовірно, лише оновив файл Apache php.ini.

Ви можете просто скопіювати файл Apache php.ini у каталог cli, щоб зробити середовище CLI точно таким, як середовище Apache.

Або ви можете знайти рядок, який завантажує модуль редуктора у файл Apache, і скопіювати / вставити лише його у файл CLI.

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