Выполнение PHP-файлов
- Указывание конкретного файла для запуска.
$ php my_script.php $ php -f my_script.php
Оба способа (с указыванием опции -f или без) запустят файл my_script.php . Нет ограничений, какой файл запускать, и PHP-скрипты не обязаны иметь расширение .php.
Замечание: Если необходимо передать аргументы в скрипт, то при использовании опции -f первым аргументом должен быть — .
$ php -r 'print_r(get_defined_constants());'
Необходимо быть особо осторожным при использовании этого способа, так как может произойти подстановка переменных оболочки при использовании двойных кавычек.
Замечание: Внимательно прочтите пример: в нем нет открывающих и закрывающих тегов! Опция -r просто в них не нуждается. Их использование приведет к ошибке парсера.
$ some_application | some_filter | php | sort -u > final_output.txt
Как и любое другое консольное приложение, бинарный файл PHP принимает аргументы, но PHP-скрипт также может получать аргументы. PHP не ограничивает количество аргументов, передаваемых в скрипт (оболочка консоли устанавливает некоторый порог количества символов, которые могут быть переданы; обычно этого лимита хватает). Переданные аргументы доступны в глобальном массиве $argv . Первый индекс (ноль) всегда содержит имя вызываемого скрипта из командной строки. Учтите, что если код вызывается на лету из командной строки с помощью опции -r , значением $argv[0] будет просто дефис (—). То же самое верно и для кода, переданного через конвейер из STDIN.
Вторая зарегистрированная глобальная переменная — это $argc , содержащая количество элементов в массиве $argv ( (а не количество аргументов, переданных скрипту).
Если передаваемые аргументы не начинаются с символа —, то особых проблем быть не должно. Передаваемый в скрипт аргумент, который начинается с — создаст проблемы, так как PHP решит, что он сам должен его обработать. Для предотвращения подобного поведения используйте разделитель списка аргументов —. После того как этот разделитель будет прочитан PHP, все последующие аргументы будут переданы в скрипт нетронутыми.
# Эта команда не запустит данный код, но покажет информацию об использовании PHP $ php -r 'var_dump($argv);' -h Usage: php [options] [-f] [args. ] [. ] # Эта команда передаст аргумент '-h' в скрипт, предотвратив показ справки PHP $ php -r 'var_dump($argv);' -- -h array(2) < [0]=>string(1) "-" [1]=> string(2) "-h" >
Однако, в Unix-системах есть еще один способ использования PHP для консольных скриптов. Можно написать скрипт, первая строка которого будет начинаться с #!/usr/bin/php (или же другой корректный путь к бинарному файлу PHP CLI ). После этой строки можно поместить обычный PHP-код, заключенный в открывающие и закрывающие теги PHP. Как только будут установлены корректные атрибуты запуска на файл (например, chmod +x test), скрипт может быть запущен как обычный консольный или perl-скрипт:
Пример #1 Запуск PHP-скрипта как консольного
Подразумевая что этот файл называется test и находится в текущей директории, можно сделать следующее:
$ chmod +x test $ ./test -h -- foo array(4) < [0]=>string(6) "./test" [1]=> string(2) "-h" [2]=> string(2) "--" [3]=> string(3) "foo" >
Как можно увидеть, в этом случае не нужно заботиться о передаче параметров, которые начинаются с —.
Исполняемый PHP-файл может использоваться для запуска PHP-скриптов независимо от веб-сервера. В случае, работы в Unix-подобной системе, необходимо добавить ко всем скриптам особую строку #! (называемую также «shebang») в начало файла и сделать их исполняемыми, чтобы указать, какая из программ должна обрабатывать эти скрипты. На Windows-платформах можно назначить обработчик php.exe для файлов с расширениями .php либо создать пакетный (.bat) файл для запуска скриптов посредством PHP. Строка, добавляемая в начале скрипта для Unix-систем, не влияет на их работу в ОС Windows, таким образом можно создавать кроссплатформенные скрипты. Ниже приведен простой пример скрипта, выполняемого из командной строки:
Пример #2 Скрипт, предназначенный для запуска из командной строки (script.php)
if ( $argc != 2 || in_array ( $argv [ 1 ], array( ‘—help’ , ‘-help’ , ‘-h’ , ‘-?’ ))) ?>
Это консольный PHP-скрипт, принимающий один аргумент.
Любое слово, которое вы хотели бы
напечатать. Опции —help, -help, -h,
или -? покажут текущую справочную информацию.
Скрипт приведенный выше включается в себя специальную Unix строку, указывающую на его запуск с помощью PHP. Работа ведется с CLI -версией, поэтому не будет выведено ни одного HTTP -заголовка.
Также приведенный пример проверяет количество переданных аргументов. В случае, если их больше или меньше одного, а также в случае, если переданный аргумент был —help , -help , -h или -? , выводится справочное сообщение с использованием $argv[0] , которое содержит имя выполняемого скрипта. В противном случае просто выводится полученный аргумент.
Для запуска приведенного примера в Unix-системе, необходимо сделать его исполняемым и просто выполнить в консоли script.php echothis или script.php -h. В Windows-системе можно создать пакетный файл:
Пример #3 Пакетный файл для запуска PHP-скрипта из командной строки (script.bat)
@echo OFF "C:\php\php.exe" script.php %*
Предполагая, что скрипт называется script.php и полный путь к CLI php.exe совпадает с C:\php\php.exe , приведенный пакетный файл запустит скрипт с переданными параметрами: script.bat echothis либо script.bat -h.
Также можно ознакомиться с расширением Readline, которое можно использовать для усовершенствования консольного PHP-скрипта.
В Windows запуск PHP можно настроить без необходимости указывать C:\php\php.exe и расширение .php. Подробнее эта тема описана в разделе Запуск PHP из командной строки в Microsoft Windows.
Как запустить PHP-скрипт через командную строку?
Для чего нужен запуск php-скриптов через командную строку? Он позволяет проверить и отладить работу скриптов на новой версии PHP или с иными значениями PHP-директив, не меняя их для всего сайта целиком (например, если на более высокой версии PHP скрипт работает некорректно, то его запуск через консоль не нарушит работу сайта, что может произойти если сменить версию на самом сайте).
Также это позволит обойти ограничение времени работы скриптов при запуске их через браузер, которое есть на всех хостингах (делается это для того, чтобы некорректно написанные скрипты, например зацикленные, не могли нарушить работу сервера в целом) — скрипт будет работать, пока достаточно ресурсов на услуге хостинга.
Подключить SSH-доступ
1. Чтобы иметь возможность запустить PHP скрипт из командной строки, необходимо иметь услугу хостинга с активным SSH-доступом. Проверить, активен ли SSH-доступ у Вас, можно в панели хостинга в разделе «Инструменты». Если при открытии данного раздела есть пункт «Shell-клиент», то SSH-доступ на Вашей услуге хостинга открыт.
Если же такого пункта нет, то Вам нужно через личный аккаунт создать запрос в службу поддержки, чтобы данный доступ предоставили. Как создать запрос в техподдержку, читайте на нашем сайте.
Подключение по SSH
2. После получения SSH-доступа, подключимся к нашей услуге через любой SSH-клиент.
Либо можно использовать Shell-клиент из панели хостинга, но он не совсем удобен, для тех случаев, когда команды требуется откуда-то копировать и затем вставлять в консоль.
Команды для подключения через терминал Linux или утилиту PowerShell Windows будет иметь следующий вид:
ssh -p 34716 логин@имя или IP-адрес сервера.
Логином служит имя пользователя от панели хостинга.
Примеры:
ssh -p 34716 usertest@fry.handyhost.ru
ssh -p 34716 usertest@109.95.210.219
После подключения можем приступать к запуску.
Запуск PHP-скрипта
3. Самый простой вариант — команда вида php/путь/к/скрипту. Такая команда запустит указанный Вами скрипт через нативную версию PHP (системную версию PHP, которая по умолчанию устанавливалась для ОС сервера с Вашей услугой хостинга), с теми настройками, которые установлены на сервере по умолчанию.
Пример:
php /var/www/usertest/data/www/fryhh.onhh.ru/info.php
Узнать какая версия PHP используется по умолчанию на сервер с Вашей услугой можно командой: php -v
В данном примере версией PHP, используемой по умолчанию является версия 7.3.
4. Для запуска через конкретную версию PHP указать в нашей команде путь к сборке PHP соответствующей версии. Команда будет иметь вид:
/opt/alt/phpXX/usr/bin/php/путь/к/скрипту
Примеры:
/opt/alt/php53/usr/bin/php /var/www/usertest/data/www/fryhh.onhh.ru/info.php
/opt/alt/php72/usr/bin/php /var/www/usertest/data/www/fryhh.onhh.ru/info.php
/opt/alt/php81/usr/bin/php /var/www/usertest/data/www/fryhh.onhh.ru/info.php
Список доступных сборок:
/opt/alt/php51/usr/bin/php
/opt/alt/php52/usr/bin/php
/opt/alt/php53/usr/bin/php
/opt/alt/php54/usr/bin/php
/opt/alt/php55/usr/bin/php
/opt/alt/php56/usr/bin/php
/opt/alt/php70/usr/bin/php
/opt/alt/php71/usr/bin/php
/opt/alt/php72/usr/bin/php
/opt/alt/php73/usr/bin/php
/opt/alt/php74/usr/bin/php
/opt/alt/php80/usr/bin/php
/opt/alt/php81/usr/bin/php
На скриншоте запуск скрипта через версию PHP 5.1.
5. Важно — если в настройки той версии PHP, через которую запускается скрипт, были внесены изменения через панель хостинга, то скрипт также запустится с этими настройками PHP. Как поменять настройки php.ini, читайте в нашей статье.
Скрипт, используемый в качестве примера в данной статье, выводит информацию о версии и настройках PHP, через которые он запущен.
На скриншоте показаны результаты его запуска через нативную версию PHP 7.4, для которой значение параметра memory_limit менялось и версию PHP 7.2, для которой изменения настроек не производилось (к результатам работы применен фильтр через функцию grep по параметру memory_limit).
Если нам по каким-то причинам требуется запустить скрипт через определенную версию PHP с настройками, отличающимися от тех, что заданы для этой версии через панель, то можно использовать опцию -n — не будут учитываться никакие ini-файлы и соответственно внесенные через панель изменения, либо опцию -d для переопределения конкретной директивы.
Примеры:
/opt/alt/php74/usr/bin/php -d memory_limit=1000M /var/www/usertest/data/www/fryhh.onhh.ru/info.php
/opt/alt/php74/usr/bin/php -n /var/www/usertest/data/www/fryhh.onhh.ru/info.php
На скриншоте показаны результаты запуска скрипта через PHP 7.4, для которой значений параметра memory_limit установлено на 350 Мб через панель хостинга. Запуск производился с опцией -n, опцией -d memory_limit=1000M, которая устанавливает значение параметра memory_limit на 1000 Мб и без дополнительных опций. К результатам вывода также применен фильтр через функцию grep по параметру memory_limit.