В CLI SAPI есть три различных способа запуска PHP-кода:
-
Указание конкретного файла для запуска.
$ php my_script.php $ php -f my_script.php
Оба способа (с указанием опции -f или без) запустят
файл my_script.php. Нет ограничений, какой
файл запускать; в частности, файлы не обязаны иметь
расширение.php
. -
Передать PHP-код напрямую в командной строке.
$ php -r 'print_r(get_defined_constants());'
Необходимо быть особо осторожным при использовании этого способа,
т.к. может произойти подстановка переменных оболочки при использовании
двойных кавычек.Замечание:
Внимательно прочтите пример: в нем нет открывающих и закрывающих тегов!
Опция -r просто в них не нуждается, и их использование
приведёт к ошибке разбора. -
Передать запускаемый PHP-код через стандартный поток ввода
(stdin
).Это даёт мощную возможность создавать PHP-код и
передавать его запускаемому файлу, как показано в этом
(вымышленном) примере:$ some_application | some_filter | php | sort -u > final_output.txt
Вы не можете комбинировать любой из этих трёх способов запуска кода.
Как и любое другое консольное приложение, бинарный файл PHP
принимает аргументы, но PHP-скрипт также может получать
аргументы. PHP не ограничивает количество аргументов,
передаваемых в скрипт (оболочка консоли устанавливает
некоторый порог количества символов, которые могут быть переданы;
обычно этого лимита хватает). Переданные аргументы доступны
в глобальном массиве $argv. Первый индекс
(ноль) всегда содержит имя вызываемого скрипта из командной
строки. Учтите, что если код вызывается на лету из командной
строки с помощью опции -r, значением
$argv[0] будет "Стандартный поток"
(«Standard input code»); до PHP 7.2.0 это был дефис ("-"
). То же самое верно и для кода,
переданного через конвейер из STDIN
.
Вторая зарегистрированная глобальная переменная — это
$argc, содержащая количество элементов
в массиве $argv
(а не количество аргументов,
переданных скрипту).
Если передаваемые аргументы не начинаются с символа
-
, то особых проблем быть не должно.
Передаваемый в скрипт аргумент, который начинается с -
создаст проблемы, т.к. PHP решит, что он сам должен его
обработать. Для предотвращения подобного поведения
используйте разделитель списка аргументов --
.
После того, как этот разделитель будет проанализирован PHP, все последующие
аргументы будут переданы в скрипт нетронутыми.
# Эта команда не запустит данный код, но покажет информацию об использовании PHP $ php -r 'var_dump($argv);' -h Usage: php [options] [-f] <file> [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-скрипта как консольного
#!/usr/bin/php
<?php
var_dump($argv);
?>
Предполагая, что этот файл назван 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)
#!/usr/bin/php
<?phpif ($argc != 2 || in_array($argv[1], array('--help', '-help', '-h', '-?'))) {
?>
Это консольный PHP-скрипт, принимающий один аргумент.
Использование:
<?php echo $argv[0]; ?> <option>
<option> Любое слово, которое вы хотели бы
напечатать. Опции --help, -help, -h,
или -? покажут текущую справочную информацию.
<?php
} else {
echo $argv[1];
}
?>
В приведённом выше скрипте в первой строке содержится shebang,
указывающий что этот файл должен запускаться 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.
Замечание:
В Windows рекомендуется запускать PHP под актуальной учётной записью пользователя.
При работе в сетевой службе некоторые операции не будут выполнены, поскольку
«сопоставление имён учётных записей и идентификаторов безопасности не выполнено».
php at richardneill dot org ¶
10 years ago
On Linux, the shebang (#!) line is parsed by the kernel into at most two parts.
For example:
1: #!/usr/bin/php
2: #!/usr/bin/env php
3: #!/usr/bin/php -n
4: #!/usr/bin/php -ddisplay_errors=E_ALL
5: #!/usr/bin/php -n -ddisplay_errors=E_ALL
1. is the standard way to start a script. (compare "#!/bin/bash".)
2. uses "env" to find where PHP is installed: it might be elsewhere in the $PATH, such as /usr/local/bin.
3. if you don't need to use env, you can pass ONE parameter here. For example, to ignore the system's PHP.ini, and go with the defaults, use "-n". (See "man php".)
4. or, you can set exactly one configuration variable. I recommend this one, because display_errors actually takes effect if it is set here. Otherwise, the only place you can enable it is system-wide in php.ini. If you try to use ini_set() in your script itself, it's too late: if your script has a parse error, it will silently die.
5. This will not (as of 2013) work on Linux. It acts as if the whole string, "-n -ddisplay_errors=E_ALL" were a single argument. But in BSD, the shebang line can take more than 2 arguments, and so it may work as intended.
Summary: use (2) for maximum portability, and (4) for maximum debugging.
email at alexander-bombis dot de ¶
2 years ago
For Windows:
After the years I also have the fact that I have to use double quotation marks after php -r on Windows shell.
But in the Powershell you can use single or double quotation!
gabriel at figdice dot org ¶
6 years ago
Regarding shebang:
In both Linux and Windows, when you execute a script in CLI with:
php script.php
then PHP will ignore the very first line of your script if it starts with:
#!
So, this line is not only absorbed by the kernel when the script file is executable, but it is also ignored by the PHP engine itself.
However, the engine will NOT ignore the first #! line of any included files withing your "outer" script.php.
Any "shebang" line in an included script, will result in simply outputting the line to STDOUT, just as any other text residing outside a <?php ... ?> block.
david at frankieandshadow dot com ¶
7 years ago
A gotcha when using #!/usr/bin/php at the start of the file as noted above:
if you originally edited the file on Windows and then attempt to use it on Unix, it won't work because the #! line requires a Unix line ending. Bash gives you the following error message if it has DOS line endings:
"bash: /usr/local/bin/wpreplace.php: /usr/bin/php^M: bad interpreter: No such file or directory"
(In Emacs I used "CTRL-X ENTER f" then type "unix" and ENTER to convert)
spencer at aninternetpresence dot net ¶
12 years ago
If you are running the CLI on Windows and use the "-r" option, be sure to enclose your PHP code in double (not single) quotes. Otherwise, your code will not run.
petruzanautico at yah00 dot com dot ar ¶
12 years ago
As you can't use -r and -f together, you can circumvent this by doing the following:
php -r '$foo = 678; include("your_script.php");'
synnus at gmail dot com ¶
5 years ago
in php.ini use auto_prepend_file="init.php"
first start script
Как запустить PHP скрипт в командной строке Windows
Для запуска PHP в командной строке необязательно устанавливать веб-сервер, достаточно скачать и распаковать архив с PHP интерпретатором. О том, где скачать PHP с официального сайта и как разобраться с версиями, смотрите эту статью.
Если вы часто будете запускать PHP скрипты из командной строки Windows, то настоятельно рекомендуется Добавить путь до PHP в переменную окружения PATH в Windows. Благодаря этому не придётся каждый раз указывать полный путь до файла php.exe.
Теперь, когда PHP установлен и путь до php.exe добавлен в переменную окружения Windows, открываем командную строку, для этого нажмите сочетание клавиш Win+x и выберите Windows PowerShell.
Для проверки, что нормально установилось, посмотрим справку по PHP:
php -h
На самом деле, мы запускаем файл php.exe, но расширение можно отбросить. То есть предыдущая запись эквивалентна
php.exe -h
Как запустить .php скрипт в командной строке Windows и Linux
Для запуска .php файла в консоли Windows используется следующая команда:
php -f путь\до\файла.php
Опцию -f можно отбросить, то есть предыдущая и следующая команды равнозначны:
php путь\до\файла.php
Я создал тестовый файл, который расположен по пути C:\Users\Alex\Documents\PHP\test.php тогда я могу запустить его в PHP так:
php -f C:\Users\Alex\Documents\PHP\test.php
или так:
php C:\Users\Alex\Documents\PHP\test.php
Для передачи скрипту аргументов, перечислите их после имени файла, разделяя пробелом. Если сами аргументы содержат пробелы или другие символы, которые имеют особое значение для оболочки командной строки, то поместите эти аргументы и одинарные или двойные кавычки.
php путь\до\файла.php 'аргумент1' 'аргумент2' 'аргумент3' 'аргумент_n'
Пример запуска PHP скрипта с тремя аргументами:
php C:\Users\Alex\Documents\PHP\test.php 'Alex' 'hackware.ru' 'Admin'
Как в PHP скрипте обратиться к аргументам
Переданные аргументы содержаться в массиве $argv. Причём, порядковый номер аргумента соответствует номеру в массиве. То есть первый аргумент будет помещён в $argv[1], второй в $argv[2] и так далее.
Самый первый элемент массива $argv[0] содержит полный путь до запускаемого скрипта.
Содержимое файла test.php:
<?php echo 'Name: ' . $argv[1] . PHP_EOL; echo 'Web site: ' . $argv[2] . PHP_EOL; echo 'Status: ' . $argv[3] . PHP_EOL;
Запустим его и передадим в скрипт три аргумента:
php C:\Users\Alex\Documents\PHP\test.php 'Alex' 'hackware.ru' 'Admin'
Как в PHP получить данные от пользователя в консоли
Благодаря передаваемым аргументам, скрипт может выполнять действия не только с прописанными в нём данными, но и с другими значениями, указанными при запуске скрипта.
Кстати, при работе в окружении веб-сервера, то есть когда PHP скрипт выполняет задачи для веб-сайта, возможность передать ему аргументы реализована с помощью HTTP методов GET и POST. Эти аргументы передаются перед запуском скрипта, и уже после запуска PHP скрипта новые данные отправить нельзя — нужно ждать завершения работы программы, и при необходимости запустить её ещё раз с новыми данными.
Во время работы скрипта может потребоваться ввод новых данных, в консоли это достигается с помощью строки запроса, в которую пользователь может ввести значение и нажать Enter для передачи его скрипту. В контексте веб-сайта такой возможности — передать данные уже во время выполнения скрипта — нет. То есть консольный запуск PHP скриптов с аргументами не только проще (не нужно возиться с HTML формой), но и даже более гибкий.
В PHP для запроса пользователю используется функция readline.
Эта функция одинаково работает и на Windows и на Linux. Причём на Linux она имеет интерактивные возможности Bash, например, сохраняет историю ввода, к которой можно вернуться с помощью стрелок. На Windows эта возможность появилась начиная с PHP 7.1.
Если сильно надо, можно настроить автозавершение вводимых данных. Все функции GNU Readline рассмотрены здесь. Я же коснусь только readline, которая считывает введённую пользователем строку. С этой функцией можно указать один опциональный аргумент — строку, которая будет показана пользователю в приглашении.
Пример консольного PHP скрипта, которые запрашивает у пользователя данные в приглашении командной строки:
<?php $len_min = readline("Минимальное количество символов в пароле: "); $len_max = readline("Максимальное количество символов в пароле: "); $base = readline("Основа пароля (0 - цифры; 1 - маленькие буквы; 2 - большие буквы): "); echo "Полученные исходные данные: \r\nДлина пароля от $len_min до $len_max символов "; switch ($base) { case 0: echo "и основой пароля являются цифры."; break; case 1: echo "и основой пароля являются маленькие буквы."; break; case 2: echo "и основой пароля являются большие буквы."; break; }
Выполнение команд PHP в интерактивном режиме
Если вам это нужно, то можно работать с интерпретатором PHP в интерактивном режиме, вводя код построчно. При этом код выполняется после нажатия кнопки Enter, но значения переменных сохраняются в рамках одной сессии. То есть вы можете присвоить значение какой-либо переменной, а затем использовать его в других строках.
Для запуска интерактивного шелла:
php -a
Запуск отдельных команд PHP
Для выполнения отдельных команд используйте опцию -r:
php -r 'echo 2**100;'
Связанные статьи:
- Как подключить PHP к Apache на Windows (100%)
- Установка Apache, PHP, MySQL и phpMyAdmin на Windows XP (100%)
- Для чего нужен веб-сервер Apache (100%)
- Готовая сборка Apache для Windows XP (100%)
- Как добавить путь до PHP в переменную окружения PATH в Windows (100%)
- Модули Apache mods (RANDOM — 50%)
Для выполнения PHP скриптов обычно используются веб-серверы, но иногда может возникнуть необходимость запустить PHP-скрипт непосредственно из командной строки, без использования веб-сервера. Это может быть полезно для отладки или автоматизации задач.
В этой статье мы рассмотрим, как запустить PHP-скрипт без веб-сервера на операционных системах Linux и Windows.
Как запустить PHP-скрипт в командной строке Linux
- Откройте терминал.
- Убедитесь, что PHP установлен на вашей системе. Введите следующую команду, чтобы проверить установку и получить версию PHP:
php -v
Если интерпретатор-PHP не установлен, выполните следующую команду, чтобы установить его:
Ubuntu/Debian:
sudo apt-get install php
CentOS:
sudo yum install php
- Создайте PHP-скрипт, используя консольный текстовый редактор, например, «nano» или «vim». Для создания нового скрипта с именем «script.php», выполните следующую команду:
nano script.php
- В открывшемся редакторе введите PHP-код для вашего скрипта. Например:
php
<?php
echo «Hello, World!»;
?>
- Сохраните скрипт и закройте редактор.
- Теперь вы можете запустить созданный PHP-скрипт. Введите следующую команду в терминале:
php script.php
Готово! Вы успешно запустили PHP-скрипт в командной строке Linux. В данном случае, на экране появится вывод «Hello, World!».
Этот подход можно также использовать для выполнения более сложных скриптов и автоматизации различных задач в Linux-среде.
Как запустить PHP скрипт в командной строке Windows
Вы можете запустить PHP в командной строке, не устанавливая веб-сервер. Достаточно просто работать через PHP-интерпретатор.
- Откройте командную строку в Windows. Для этого зажмите сочетание клавиш Win+R, введите «cmd» и нажмите Enter.
- Убедитесь, что PHP установлен в вашей системе. Чтобы проверить наличие PHP в системе и узнать установленную версию, введите:
php -v
Если PHP не установлен, загрузите и установите его с официального сайта PHP.
Важно! На момент написания нашего руководства релевантная версия PHP – 8.2. Вы же можете установить ту, которая будет актуальна для вас. Всегда выбирайте версию «Thread Safe».
Загрузите соответствующий установщик PHP для Windows и следуйте инструкциям по установке.
- Создайте PHP-скрипт, используя любой текстовый редактор. В данной инструкции мы воспользуемся Блокнотом.
Для создания нового скрипта с именем «script.php», выполните следующую команду:
notepad script.php
- В открывшемся редакторе введите PHP-код для вашего скрипта. Например:
php
<?php
echo «Hello, World!»;
?>
- Сохраните скрипт и закройте редактор.
- Теперь вы можете запустить PHP-скрипт. В командной строке пропишите команду:
php script.php
Готово! Вы успешно запустили PHP-скрипт в командной строке Windows. В данном случае, на экране появится вывод «Hello, World!».
Вы можете использовать этот подход для выполнения более сложных скриптов и автоматизации различных задач в среде Windows.
Различные опции запуска PHP-скриптов в командной строке
Опции запуска PHP скриптов в командной строке предоставляют собой различные возможности и параметры для управления выполнением скриптов. Запустив команду php -h можно ознакомиться со следующими опциями:
Опция |
Полное название |
Функция |
-a |
—interactive |
Запускает PHP в интерактивном режиме. |
-c |
—php-ini |
Указывает каталог, где находится файл php.ini. |
-n |
—no-php-ini |
Ставит задачу не использовать php.ini |
-d |
—define |
Задаёт пользовательское значение для каждой конфигурационной опции php.ini. |
-e |
—profile-info |
Генерирует расширенную информацию для отладчика/профайлера. |
-f |
—file |
Разбирает и выполняет указанный файл. |
-h и -? |
—help и —usage |
Предоставляет справку доступных опций. |
-i |
—info |
Выводит информацию о PHP. |
-l |
—syntax-check |
Проверяет синтаксис кода. |
-m |
—modules |
Показывает встроенные и загруженные модули. |
-r |
—run |
Выполняет PHP-код без использования тегов скрипта. |
-B |
—process-begin |
Выполняет PHP-код перед обработкой входных строк. |
-R |
—process-code |
Выполняет PHP-код для каждой входной строки. |
-F |
—process-file |
Разбирает и выполняет указанный PHP-файл для каждой входной строки. |
-E |
—process-end |
Выполняет PHP-код после обработки всех входных строк. |
-S |
—server |
Запускает встроенный веб-сервер. |
-t |
—docroot |
Указывает корневой каталог документов для встроенного веб-сервера. |
-s |
—syntax-highlight и —syntax-highlighting |
Выводит исходный код с подсветкой синтаксиса HTML. |
-v |
—version |
Указывает номер версии. |
-w |
—strip |
Выводит исходный код без комментариев и пробелов. |
-z |
—zend-extension |
Загружает расширение Zend. |
не задано |
—ini |
Показывает имена конфигурационных файлов. |
—rf |
—rfunction |
Предоставляет информацию об указанной функции. |
—rc |
—rclass |
Предоставляет информацию об указанном классе. |
—re |
—rextension |
Предоставляет информацию об указанном расширении (модуле). |
—rz |
—rzendextension |
Предоставляет информацию об указанном модуле Zend. |
—ri |
—rextinfo |
Предоставляет информацию о конфигурации заданного модуля. |
Больше о существующих опциях вы можете узнать из официальной документации PHP.
Как проверить синтаксис PHP-скрипта с помощью опции -l
Как мы уже рассмотрели выше, при использовании опции -l можно проверить синтаксис кода PHP, чтобы убедиться, что он не содержит ошибок и соответствует правилам.
Для этого способа не требуется запуск скрипта, – проверка будет произведена внутри командной строки.
Общий синтаксис:
php -l путь/к/файлу/.php
Пример использования:
php -l C:/Users/Nicru/Documents/PHP/script.php
В результате выполнения команды будет выведено сообщение о том, является ли синтаксис скрипта корректным или же есть ошибки, которые необходимо исправить.
Если всё верно, вы получите следующий вывод:
No syntax errors detected in C:/Users/Nicru/Documents/PHP/script.php
Если в синтаксисе есть ошибки:
php -l C:/Users/Nicru/Documents/PHP/script.php
PHP Parse error: syntax error, unexpected end of file in C:/Users/Nicru/Documents/PHP/script.php on line 8
Parse error: syntax error, unexpected end of file in C:/Users/Nicru/Documents/PHP/script.php on line 8
Errors parsing C:/Users/Nicru/Documents/PHP/script.php
Иными словами, опция -l – это крайне полезная возможность для обнаружения и устранения ошибок в PHP-коде до его фактического выполнения.
Как запустить PHP-файл в командной строке Windows и Linux
Как в Windows, так и в Linux для запуска .php файла в командной строке, вы можете использовать следующие команды:
php -f путь/к/файлу.php
Вы также можете опустить опцию «-f», так предыдущая и следующая команды останутся равнозначны:
php путь/к/файлу.php
Например, если у вас есть файл, расположенный в директории «C:/Users/Nicru/Documents/PHP/script.php», вы можете запустить его в PHP с помощью следующих команд:
php -f C:/Users/Nicru/Documents/PHP/script.php
Или!
php C:/Users/Nicru/Documents/PHP/script.php
Таким образом, вы можете без особых усилий запускать PHP-скрипты в командной строке как в Windows, так и в Linux, используя соответствующие команды и указывая путь к файлу .php, который вы хотите выполнить.
Как в PHP-скрипте обратиться к аргументам
В PHP вы можете обратиться к аргументам, переданным скрипту, с помощью специального массива $argv. Этот массив содержит значения аргументов командной строки, переданных при запуске скрипта.
Каждый элемент массива $argv соответствует отдельному аргументу, где $argv[0] содержит имя самого скрипта, а $argv[1], $argv[2] и прочие содержат значения последующих аргументов.
Например, если у вас есть PHP-скрипт «script.php», который запускается с аргументами командной строки, вы можете получить доступ к этим аргументам следующим образом:
<?php
$argc = count($argv);
if ($argc > 0) {
for ($i = 1; $i < $argc; $i++) {
echo «Аргумент $i: » . $argv[$i] . «\n»;
}
}
?>
Таким образом, вы можете обратиться к аргументам командной строки в PHP скрипте, используя массив «$argv», и выполнять операции на основе переданных значений аргументов.
Запуск отдельных команд PHP
В командной строке вы также можете запускать отдельные команды PHP, не используя целый PHP-скрипт.
Запускать отдельные команды PHP можно с помощью опции -r (или —run). Она позволяет передавать PHP-код непосредственно в командную строку.
Вот как это работает:
Введите следующую команду:
php -r ‘код’
Где «код» – это PHP-код, который вы хотите выполнить. Например, для вывода строки «Hello, World!» вы можете использовать:
php -r ‘echo ‘Hello, World!’;’
После ввода команды и нажатия Enter, PHP выполнит указанный код и выведет результат в командной строке. В данном примере, результатом будет строка «Hello, World!».
Вы можете смело использовать этот метод для запуска отдельных команд PHP в командной строке. Он может быть особенно полезным, когда вам необходимо выполнить небольшую часть кода или провести быструю проверку функциональности без создания отдельного файла.
Заключение
Запуск PHP скриптов в командной строке без веб-сервера является удобным способом выполнения PHP-кода для отладки, автоматизации задач и выполнения различных сценариев. В этой статье мы рассмотрели, как запустить PHP скрипт в командной строке Linux и Windows, а также ознакомились с опциями запуска PHP-скриптов и запуском отдельных команд PHP.
Теперь вы можете использовать этот гибкий способ работы с PHP в вашей системе.
В CLI SAPI есть три различных способа запуска PHP-кода:
-
Указывание конкретного файла для запуска.
$ php my_script.php $ php -f my_script.php
Оба способа (с указыванием опции -f
или без) запустят
файл my_script.php. Нет ограничений, какой
файл запускать, и PHP-скрипты не обязаны иметь
расширение .php.Замечание:
Если необходимо передать аргументы в скрипт,
то при использовании опции -fпервым аргументом должен быть — .
-
Передать PHP-код напрямую в командной строке.
$ php -r 'print_r(get_defined_constants());'
Необходимо быть особо осторожным при использовании этого способа,
так как может произойти подстановка переменных оболочки при использовании
двойных кавычек.Замечание:
Внимательно прочтите пример: в нем нет открывающих и закрывающих тегов!
Опция -r
просто в них не нуждается. Их использование
приведет к ошибке парсера. -
Передать запускаемый PHP-код через стандартный поток ввода
(stdin).Это дает мощную возможность создавать PHP-код и
скармливать его запускаемому файлу, как показано в этом
(вымышленном) примере:$ 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] <file> [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-скрипта как консольного
#!/usr/bin/php
<?php
var_dump($argv);
?>
Подразумевая что этот файл называется 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)
#!/usr/bin/php
<?phpif ($argc != 2 || in_array($argv[1], array('--help', '-help', '-h', '-?'))) {
?>
Это консольный PHP-скрипт, принимающий один аргумент.
Использование:
<?php echo $argv[0]; ?> <option>
<option> Любое слово, которое вы хотели бы
напечатать. Опции --help, -help, -h,
или -? покажут текущую справочную информацию.
<?php
} else {
echo $argv[1];
}
?>
Скрипт приведенный выше включается в себя специальную 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 в командной строке
I’m a PHP Developer by profession.
I’m using a Lenovo Ideapad laptop that runs on Windows 10 Home Single Language 64-bit Operating System
I’ve also installed XAMPP Control Panel v3.2.2 at location «C:\xampp» to execute PHP programs in a web browser on my machine.
The «php.exe» file is present at the location «C:\xampp\php».
The document root directory to save the PHP files is at the location «C:\xampp\htdocs».
I’m able to run the PHP programs that I created and saved in a directory C:\xampp\htdocs\html_playground by starting the XAMPP software(by double clicking on XAMPP shortcut present on my desktop) and entering the URL of a program file like this «http://localhost/html_playground/sample.php» in a browser’s address bar.
This way I’m able to run the PHP programs finely but I want to run the same program from Windows Command Prompt
For it I done following steps :
- Went to Went to Advanced System Settings (Control Panel\System and Security\System\Advanced System Settings)
- Then clicked on Environment Variables
- Then selected the variable Path
- Then clicked Edit… button
- Then after the ending semicolon of existing string I added the string «C:\xampp\php» by adding a blank space after the semicolon.
The final new string was looking like below :
%USERPROFILE%\AppData\Local\Microsoft\WindowsApps; C:\xampp\php
- Then clicked on Ok
- Opened command prompt
- Went to the path C:\xampp\htdocs\html_playground on command prompt using cd command
- Typed in sample.php(The file contaning my PHP program)
Then instead of showing the output of the program it opened the same file in Sublime Text(The editor I’m using to write the code)
The sample.php file has got the following PHP executable code :
<?php
echo 'Hello World!';
?>
For your reference I’m also attaching the screen-shot of the command prompt window :
Now my question is
- Why I’m not able to see the output at command prompt or in a web browser?
- Am I doing any mistake or what?
- Is it necessary to start the XAMPP server like I normally do to run the program in a web browser for executing the program from command prompt too?
- Did I make any mistake in setting environment variables?
- Is there really a need to set environment variables? If yes why? If no why?
- As PHP is supposed to be the suitable language for web development then I think it’s always good to run the program in web developer’s software i.e. a Web Browser. But I’m not understanding the reason why people do insist for running the PHP programs from Command Line rather than running the same program from web browser only?
Please somebody help me out by answering my queries and helping me in running the program from command prompt.
Even I tried restarting the PC and run the php -v command but it also didn’t work out. Following is the screen-shot of the same :