Командная строка PHP в Microsoft Windows

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

Замечание:

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

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

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

Но есть несколько шагов, которые помогут упростить этот процесс. Некоторые из этих шагов уже должны были быть предприняты, но они повторяются здесь, чтобы иметь возможность предоставить полную пошаговую последовательность.

    Замечание:

    И 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 предоставляет объяснение.

add a note add a note

User Contributed Notes 4 notes

up
4
vechenjivot at gmail dot com
8 years ago
On Windows 10, the above registry entries didn't work for me. In order for them to work, you need to write to
HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.php\UserChoice
for which you don't have access, even if you run regedit as admin (probably because of the Hash key).
The solution is actually much easier - right-click a PHP file in Explorer and associate it to always open with php.exe.
And then you need to modify the PATH variable:
setx PATH "%PATH%;c:\path\to\php" /M
if you want to execute files with commands like
php file.php
up
4
pimroes at gmail dot com
13 years ago
Make sure your run CMD.exe as an administrator, otherwise you'll get an "access denied" when you run the commands.
up
1
rudigerw at hotmail dot com
8 years ago
On Windows 10 starting php by only typing the script name in an elevated command prompt pops up a dialog to choose an app.
It turns out Windows does that when the program associated with phpfiles through ftype cannot be executed. In this case this happens because it is trying to run php.exe in non-admin mode, even when launched from an elevated command prompt. To fix this, locate your php.exe, right-click, "Properties",  "Compatibility", under Settings check "Run this program as an administrator; then also click "Change settings for all users".
up
-1
elhadjouattara at gmail dot thrcom
8 years ago
On Windows 8, with php 5.6.8 win32 VC11 in command line, need to indicate path with / rather than backslash \
Hence C:\Users\toshiba\Documents\php\test.php shall be C:/Users/toshiba/Documents/php/test.php
To Top