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


85

Как я могу запустить сценарий PHP из командной строки с помощью интерпретатора PHP, который используется для анализа веб-сценариев?

У меня есть установленный phpinfo.phpфайл, доступ к которому осуществляется через Интернет German. Однако, если я запускаю phpinfo.phpиз командной строки с помощью - php phpinfo.phpи grepfor German, я не нахожу его. Так что оба phps разные. Мне нужно запустить скрипт, phpна котором Germanустановлен.

Как я могу это сделать?


1
просто сделай php -iи проанализируй это
Лоуренс Черон

1
Что это значит? Тем не менее, я сделал это, но ничего
Сиддхарт

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

Ответы:


166

ОБНОВИТЬ:

После недоразумения я наконец понял то, что вы пытаетесь сделать. Вы должны проверить файлы конфигурации вашего сервера; вы используете 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

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

Если ваша ОС похожа, то, вероятно, эти два файла не совпадают. Ваш Apache php.ini, вероятно, загружает модуль gearman, а cli php.ini - нет. Когда модуль был установлен (автоматически или вручную), он, вероятно, обновил только файл Apache php.ini.

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

Или вы можете найти строку, загружающую модуль gearman в файле Apache, и скопировать / вставить только ее в файл CLI.


3

Я искал решение этой проблемы в Windows, и, похоже, если у вас нет окружений в порядке, вам нужно поместить полный каталог. Например, с файлом в том же каталоге, что и PHP:

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

Если вы запустите это дословно из командной строки, то >при запуске, вероятно, перенаправит вывод -f ...(вероятно, ошибку) в ваш файл php.exe и сотрет содержимое.
mwfearnley
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.