Командная строка PHP в Microsoft Windows
В этом разделе содержатся заметки и советы по работе PHP, запущенного из командной строки.
Замечание:
Сначала прочитайте руководство по установке !
PHP, запущенный из командной строки, может выполняться без каких-либо изменений в Windows.
C:\PHP5\php.exe -f "C:\PHP Scripts\script.php" -- -arg1 -arg2 -arg3
Но есть несколько простых шагов, которые могут упростить задачу. Некоторые из этих шагов уже могли быть выполнены, но будут приведены здесь для того, чтобы последовательность операций не была нарушена.
-
Допишите расположение исполняемых файлов php (php.exe, php-win.exe или php-cli.exe в зависимости от ваших предпочтений и версии PHP) в конец переменной окружения PATH. О том, как добавить вашу директорию к PATH читайте в соответсвующем разделе FAQ.
-
Допишите .PHP расширение в конец переменной окружения PATHEXT. Это может быть сделано при изменении переменной PATH. Сделайте те же шаги, которые описаны в FAQ, для переменной PATH, но для PATHEXT.
Замечание:
Позиция, в которой вы разместите .PHP, будет определять, какой скрипт или программа будут запущенны для обработки файла с соответствующим расширением. Например, разместив .PHP перед .BAT, сначала будет запущен ваш скрипт, а не пакетный файл, если есть исполняемый файл с тем же именем.
-
Ассоциируйте расширение .PHP с конкретным типом фапйла. Это можно сделать выпонив следующую команду:
assoc .php=phpfile
-
Ассоцируйте тип файла phpfile с соответствующим исполняемым PHP файлом. Это можно сделать выполнив команду:
ftype phpfile="C:\PHP5\php.exe" -f "%1" -- %~2
Замечание:
Как PATH, так и PATHEXT являются важными системные переменными в Windows, поэтому важно не затереть их текущее значение, а только дописать нужные данные в конец.
Выполнение этих шагов позволит 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:\\PHP5\\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:\\PHP5\\php.exe\" -f \"%1\" -- %~2"
С этими изменениями команда может быть записана как:
"C:\PHP Scripts\script" -arg1 -arg2 -arg3
script -arg1 -arg2 -arg3
Замечание:
Возникает небольшая проблема, если вы собираетесь использовать эту технику и используете ваши PHP-скрипты как фильтры командной строки, как в примере ниже:
илиdir | "C:\PHP Scripts\script" -arg1 -arg2 -arg3Вы можете увидеть, что ваш скрипт завис и ничего не делает. Для того чтобы оперативно получать об этом информацию, вам нужно внести в реестр еще некоторые изменений.dir | script -arg1 -arg2 -arg3Дополнительную информацию можно найти в » базе знаний Microsoft, статья 321788.Windows Registry Editor Version 5.00 [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\policies\Explorer] "InheritConsoleHandles"=dword:00000001
Коментарии
Make sure your run CMD.exe as an administrator, otherwise you'll get an "access denied" when you run the commands.
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".