PHP Conference Japan 2024

在 Windows 系統的命令列上執行 PHP

本節包含關於在 Windows 命令列執行 PHP 的注意事項和提示。

注意:

請先閱讀手動安裝步驟

您可以在不修改 Windows 的情況下,讓 PHP 從命令列執行。

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

但有一些簡單的步驟可以讓操作更簡便。其中一些步驟您可能已經執行過,但為了提供完整的逐步操作流程,我們在此重複說明。

    注意:

    PATHPATHEXT 都是 Windows 中重要的預先存在的系統變數,請注意不要覆蓋這些變數,而是在其後新增內容。

  • 將 PHP 執行檔的位置(根據 PHP 版本和顯示偏好設定,可能是 php.exephp-win.exephp-cli.exe)加入到 PATH 環境變數中。關於如何將適當的目錄添加到 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 論壇文章提供了相關說明。

新增註記

使用者貢獻的註記 2 則註記

pimroes at gmail dot com
13 年前
請確保以系統管理員身分執行 CMD.exe,否則在執行指令時會收到「拒絕存取」的訊息。
rudigerw at hotmail dot com
8 年前
在 Windows 10 中,於提升權限的命令提示字元中僅輸入腳本名稱來啟動 php 時,會彈出一個對話方塊,要求選擇應用程式。
原來 Windows 在透過 ftype 關聯的程式無法執行 php 檔案時會出現這種情況。在這種情況下,這是因為它試圖在非管理員模式下運行 php.exe,即使是從提升權限的命令提示字元啟動也是如此。要解決此問題,請找到您的 php.exe,按右鍵,選擇「內容」、「相容性」,在設定下勾選「以系統管理員身分執行此程式」;然後也點擊「變更所有使用者的設定」。
To Top