Запуск PHP в командной строке системы Windows

Раздел содержит примечания и подсказки, которые касаются запуска PHP из командной строки Windows.

Замечание:

Сначала прочитайте пошаговое руководство по установке!

PHP запускают из командной строки без внесения каких бы то ни было изменений в Windows.

C:\php\php.exe -f "C:\PHP Scripts\script.php" -- -arg1 -arg2 -arg3

Но есть несколько шагов, которые упрощают запуск PHP из командной строки. Отдельные шаги уже выполнили, но они повторяются здесь, чтобы объяснить последовательность действий.

    Замечание:

    Переменные окружения PATH и PATHEXT — важные переменные, которые появились в Windows в самом начале и которые нельзя перезаписывать, а только добавлять для них значения.

  • Добавьте расположение исполняемого файла PHP — php.exe, php-win.exe или php-cli.exe, в зависимости от версии PHP и предпочтений отображения — в переменную окружения PATH. Подробнее о добавлении каталога PHP в переменную окружения PATH рассказывает запись часто задаваемых вопросов.

  • Добавьте расширение .PHP к переменной окружения PATHEXT. Это делают одновременно с изменением переменной окружения PATH. Выполните те же действия, что и в ЧАВО, но измените переменную окружения PATHEXT, а не PATH.

    Замечание:

    Позиция, в которую помещают расширение .PHP, будет определять, какой скрипт или программа выполнится при совпадении имён файлов. Например, расположение расширения .PHP перед расширением .BAT запустит скрипт, а не пакетный файл, если каталог содержит пакетный файл с тем же названием.

  • Настройте ассоциацию расширения .PHP с типом файла путём запуска следующей команды:

    assoc .php=phpfile
    

  • Настройте ассоциацию типа файла phpfile с исполняемым файлом PHP, который соответствует этому типу файла, путём запуска следующей команды:

    ftype phpfile="C:\php\php.exe" -f "%1" -- %~2
    

Эти шаги настроят запуск PHP-скриптов из любого каталога без ввода исполняемого PHP-файла или расширения .PHP, а параметры передадутся скрипту для обработки.

Следующий пример приводит отдельные изменения в реестре, которые вносят вручную.

Пример #1 Пример изменений в реестре

Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\.php]
@="phpfile"
"Content Type"="application/php"

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\phpfile]
@="PHP Script"
"EditFlags"=dword:00000000
"BrowserFlags"=dword:00000008
"AlwaysShowExt"=""

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\phpfile\DefaultIcon]
@="C:\\php\\php-win.exe,0"

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\phpfile\shell]
@="Open"

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\phpfile\shell\Open]
@="&Open"

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\phpfile\shell\Open\command]
@="\"C:\\php\\php.exe\" -f \"%1\" -- %~2"

С этими изменениями эту же команду получится записать вот так:

"C:\PHP Scripts\script" -arg1 -arg2 -arg3
или, если путь "C:\PHP Scripts" записали в переменную окружения PATH:
script -arg1 -arg2 -arg3

Замечание:

При такой технике запуска возникает небольшая проблема с запуском PHP-скриптов в качестве фильтра командной строки, как в примере ниже:

dir | "C:\PHP Scripts\script" -arg1 -arg2 -arg3
или
dir | script -arg1 -arg2 -arg3
Иногда скрипт просто зависает и ничего не выводит. В реестр вносят ещё одно изменение, чтобы это заработало.
Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\policies\Explorer]
"InheritConsoleHandles"=dword:00000001
Дополнительную информацию по этой проблеме даёт »  статья базы знаний Microsoft: 321788. В Windows 10 этот параметр изменили на противоположный, и стандартная установка Windows 10 поддерживает унаследованные дескрипторы консоли. Это »  сообщение на форуме Microsoft даёт объяснение.