搜尋
首頁後端開發php教程PHP命令列執行詳解

PHP命令列執行詳解

Mar 10, 2018 am 11:55 AM
php命令列執行

以下是 PHP 二進位檔案(即 php.exe 程式)提供的命令列模式的選項參數,您隨時可以透過 PHP -h 指令來查詢這些參數。

<span style="font-size: 14px;">Usage: php [options] [-f] <file> [args...]<br>       php [options] -r <code> [args...]<br>       php [options] [-- args...]<br>  -s               Display colour syntax highlighted source.<br>  -w               Display source with stripped comments and whitespace.<br>  -f <file>        Parse <file>.<br>  -v               Version number<br>  -c <path>|<file> Look for php.ini file in this directory<br>  -a               Run interactively<br>  -d foo[=bar]     Define INI entry foo with value 'bar'<br>  -e               Generate extended information for debugger/profiler<br>  -z <file>        Load Zend extension <file>.<br>  -l               Syntax check only (lint)<br>  -m               Show compiled in modules<br>  -i               PHP information<br>  -r <code>        Run PHP <code> without using script tags ..?><br>  -h               This help<br> <br>  args...          Arguments passed to script. Use -- args when first argument <br>                   starts with - or script is read from stdin<br></code></code></file></file></file></path></file></file></code></file></span>

#CLI SAPI 模組有以下三種不同的方法來取得您要執行的 PHP 程式碼:

在windows環境下,盡量使用雙引號, 在linux環境下則盡量使用單引號來完成。

  1. 讓 PHP 執行指定檔案。

    <span style="font-size: 14px;">php my_script.php <br/>php -f  "my_script.php"<br/></span>

    #以上兩種方法(使用或不使用 -f 參數)都能夠運行給定的 my_script.php 檔案。您可以選擇任何檔案來執行,您指定的 PHP 腳本並非必須以 .php 為副檔名,它們可以有任意的檔案名稱和副檔名。

  2. 在命令列直接執行 PHP 程式碼。

    <span style="font-size: 14px;">php -r "print_r(get_defined_constants());"<br/></span>

    #在使用此方法時,請您注意外殼變數的替代及引號的使用。

    註: 請仔細閱讀上述範例,在執行程式碼時沒有開始和結束的標記符!加上 -r 參數後,這些標記符是不需要的,加上它們會導致語法錯誤。

  3. 透過標準輸入(stdin)提供需要執行的 PHP 程式碼。

    以上用法為我們提供了非常強大的功能,讓我們可以如下範例所示,動態地產生 PHP 程式碼並透過命令列執行這些程式碼:

    $ some_application | some_filter | php | sort -u >final_output.txt

#以上三種執行程式碼的方法不能同時使用。

和所有的外殼應用程式一樣,PHP 的二進位檔案(php.exe 檔案)及其執行的 PHP 腳本能夠接受一系列的參數。 PHP 沒有限制傳送給腳本程式的參數的個數(外殼程式對命令列的字元數有限制,但您通常不會超過該限制)。傳遞給您腳本的參數可在全域變數 $argv 中取得。此陣列中下標為零的成員為腳本的名稱(當 PHP 程式碼來自標準輸入獲直接以 -r 參數以命令列方式執行時,名稱為「-」)。另外,全域變數 $argc 存有 $argv 數組中成員變數的個數(而非傳送給腳本程式的參數的個數)。

只要您傳送給您腳本的參數不是以 - 符號開頭,您就不需要太多的注意力。傳送以 - 開頭的參數到您的腳本會導致錯誤,因為 PHP 會認為應該由它本身來處理這些參數。您可以用參數清單分隔符號 -- 來解決這個問題。在 PHP 解析完參數後,符號後所有的參數將會被原樣傳送給您的腳本程式。

<span style="font-size: 14px;"># 以下命令将不会运行 PHP 代码,而只显示 PHP 命令行模式的使用说明:<br/>$ php -r &#39;var_dump($argv);&#39; -h<br/>Usage: php [options] [-f] <file> [args...]<br/>[...]<br/> <br/># 以下命令将会把“-h”参数传送给脚本程序,PHP 不会显示命令行模式的使用说明:<br/>$ php -r "var_dump($argv);" -- -h<br/>array(2) {<br/>  [0]=><br/>  string(1) "-"<br/>  [1]=><br/>  string(2) "-h"<br/>}<br/></span>
#

除此之外,我们还有另一个方法将 PHP 用于外壳脚本。您可以在写一个脚本,并在第一行以 #!/usr/bin/php 开头,在其后加上以 PHP 开始和结尾标记符包含的正常的 PHP 代码,然后为该文件设置正确的运行属性。该方法可以使得该文件能够像外壳脚本或 PERL 脚本一样被直接执行。

#!/usr/bin/php
<br/>
rgv);
?>

假设改文件名为 test 并被放置在当前目录下,我们可以做如下操作:

$ chmod 755 test<br/>$ ./test -h -- foo<br/>array(4) {<br/>  [0]=><br/>  string(6) "./test"<br/>  [1]=><br/>  string(2) "-h"<br/>  [2]=><br/>  string(2) "--"<br/>  [3]=><br/>  string(3) "foo"<br/>}<br/>

如您所看到的,當您傳送以 - 開頭的參數給該腳本時,腳本仍然能夠正常運作。

表格23-3.命令列選項

##-c
##選項名稱 描述
-s

顯示有語法高亮色彩的來源檔案。

此參數使用內建機制來解析檔案並為其產生一個 HTML 高亮版本並將結果寫入標準輸出。請注意該過程所做的只是產生了一個  [...]  的 HTML 標記符塊,並不包含任何的 HTML 頭。

註: 此選項不能和 -r 參數同時使用。

-w

#顯示除去了註解和空格的原始碼。

註: 此選項不能和 -r 參數同時使用。

-f

#解析並執行給定的檔案名稱。此參數為可選參數且可不加,僅指明需要運行的檔案名稱即可。

-v

##P、PHP SAPI 及Zend 的版本資訊寫入的標準輸出。例如:

$ php -v PHP 4.3.0-dev (cli), Copyright (c) 1997-2002 The PHP Group Zend Engine v1.3.0, Copyright (c) 1998-2002 Zend Technologies

用此參數,您可以指定一個放置 php.ini 檔案的目錄,或直接指定一個自訂的 INI 文件,其檔案名稱可以不是 php.ini。例如:

$ php -c /custom/directory/ my_script.php $ php -c /custom/directory/custom-file.ini my_script.php

-a

交互地運行PHP。

-d

#############用此參數可以自行設定 php.ini 檔案設定變數的值,其語法為:#########-d configuration_directive[=value]#########範例:######## Ommiting the value part will set the given configuration directive to "1" $ php -d max_execution_time       -r '$foo = ini_get("max_execution_time"); var_dump($foo);' string(1) "1" # Passing an empty value part will set the configuration directive to "" php -d max_execution_time=       -r '$foo = ini_get("max_execution_time"); var_dump($foo);' string(0) "" # The configuration directive will be set to anything passed after the '=' character $  php -d max_execution_time=20      -r '$foo = ini_get("max_execution_time"); var_dump($foo);' string(2) "20" $  php       -d max_execution_time=doesntmakesense       -r '$foo = ini_get("max_execution_time"); var_dump($foo);' string(15) "doesntmakesense"
#-e

為偵錯器等產生擴充資訊。

-z

#載入 Zend 擴充功能庫。如果僅給定一個檔案名,PHP 將試圖從您系統擴充功能庫的預設路徑(在 Linux 系統下,該路徑通常由 /etc/ld.so.conf 指定)載入該擴充功能庫。如果您用一個絕對路徑指定檔案名,則系統的擴充庫預設路徑將不會被使用。如果使用相對路徑指定的檔案名,PHP 則僅試圖載入相對於目前目錄的擴充庫。

-l

#此參數提供了對指定 PHP 程式碼進行語法檢查的方便的方法。如果成功,則向標準輸出寫入 No syntax errors detected in  字串,並且外殼回傳值為 0。如果失敗,則 Errors parsing  以及內部解析器錯誤訊息會一起寫入標準輸出,同時外殼回傳值將別設為 255。

此參數將無法檢查致命錯誤(如未定義函數),如果您希望偵測名稱錯誤,請使用 -f 參數。

註: 此參數不能和 -r 一同使用。

-m

#使用該參數,PHP 將列印出內置以及已載入的PHP 及Zend 模組:

$ php -m [PHP Modules] xml tokenizer standard session posix pcre overload mysql mbstring ctype [Zend Modules]
-i #此命令列參數會呼叫 phpinfo() 函數,並且列印出結果。如果 PHP 沒有正常運作,我們建議您執行 php -i 指令來查看在資訊表格之前或對應的地方是否有任何錯誤訊息輸出。請注意輸出的內容為 HTML 格式,因此輸出的資訊篇幅較大。
-r

#使用此參數可以在命令列中執行 PHP 程式碼。您無需加上 PHP 的起始和結束識別碼(),否則將會導致語法解析錯誤。

注: 使用这种形式的 PHP 时,应个别注意避免和外壳环境进行的命令行参数替换相冲突。

显示语法解析错误的范例

$ php -r "$foo = get_defined_constants();" Command line code(1) : Parse error - parse error, unexpected '='

这里的问题在于即时使用了双引号 ",sh/bash 仍然实行了参数替换。由于 $foo 没有被定义,被替换后它所在的位置变成了空字符,因此在运行时,实际被 PHP 读取的代码为:

$ php -r " = get_defined_constants();"

正确的方法是使用单引号 '。在用单引号引用的字符串中,变量不会被 sh/bash 还原成其原值。

$ php -r '$foo = get_defi
<br/>
ned_constants(); var_dump($foo);' array(370) {  ["E_ERROR"]=>  int(1)  ["E_WARNING"]=>  int(2)  ["E_PARSE"]=>  int(4)  ["E_NOTICE"]=>  int(8)  ["E_CORE_ERROR"]=>  [...]

如果您使用的外壳不是 sh/bash,您可能会碰到其它的问题。请报告您碰到的 bug,或者发邮件到 phpdoc@lists.php.net。

当您试图将外壳的环境变量引入到马或者用反斜线来转义字符时也可能碰到各种各样的问题,请您在使用时注意!

注: -r 在 CLI SAPI 中有效,在 CGI SAPI 中无效。

-h 使用该参数,您可以得到完整的命令行参数的列表及这些参数作用的简单描述。


PHP 的命令行模式能使得 PHP 脚本能完全独立于 WEB 服务器单独运行。如果您使用 Unix 系统,您需要在您的 PHP 脚本的最前面加上一行特殊的代码,使得它能够被执行,这样系统就能知道用什么样的程序要运行该脚本。在 Windows 平台下您可以将 php.exe 和 .php 文件的双击属性相关联,您也可以编写一个批处理文件来用 PHP 执行脚本。为 Unix 系统增加的第一行代码不会影响该脚本在 Windows 下的运行,因此您也可以用该方法编写跨平台的脚本程序。以下是一个简单的PHP 命令行程序的范例。

例子 23-1. 试图以命令行方式运行的 PHP 脚本(script.php)

#!/usr/bin/phpThis is a command line PHP script with one option.  Usage:   

在上述腳本中,我們用第一行特殊的程式碼來指明該檔案應該由 PHP 來執行。我們在這裡使用 CLI 的版本,因此不會有 HTTP 頭資訊輸出。當您用 PHP 編寫命令列應用程式時,您可以使用兩個參數:$argc 和 $argv。前面一個的值是比參數個數大 1 的整數(運行的腳本本身的名稱也被當作一個參數)。第二個時包含有參數的數組,其第一個元素為腳本的名稱,下標為數字 0($argv[0])。

在上述程式中我們檢查了參數的個數是大於 1 個還是小於 1 個。即時參數是 --help、-help、-h 或 -?,我們仍然列印出幫助訊息,並同時動態輸出腳本的名稱。如果還收到了其它參數,我們也把它們顯示出來。

如果您希望在 Unix 下運行以上腳本,您需要使得它成為可執行腳本,然後簡單的運行 script.php echothis 或 script.php -h。在Windows 下,您可以為此編寫一個批次檔:

相關推薦:

基於命令列執行帶參數的php腳本並取得參數的方法

基於命令列執行帶參數的php腳本並取得參數的方法,php腳本_PHP教程

PHP上的命令列執行

以上是PHP命令列執行詳解的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
PHP的當前狀態:查看網絡開發趨勢PHP的當前狀態:查看網絡開發趨勢Apr 13, 2025 am 12:20 AM

PHP在現代Web開發中仍然重要,尤其在內容管理和電子商務平台。 1)PHP擁有豐富的生態系統和強大框架支持,如Laravel和Symfony。 2)性能優化可通過OPcache和Nginx實現。 3)PHP8.0引入JIT編譯器,提升性能。 4)雲原生應用通過Docker和Kubernetes部署,提高靈活性和可擴展性。

PHP與其他語言:比較PHP與其他語言:比較Apr 13, 2025 am 12:19 AM

PHP適合web開發,特別是在快速開發和處理動態內容方面表現出色,但不擅長數據科學和企業級應用。與Python相比,PHP在web開發中更具優勢,但在數據科學領域不如Python;與Java相比,PHP在企業級應用中表現較差,但在web開發中更靈活;與JavaScript相比,PHP在後端開發中更簡潔,但在前端開發中不如JavaScript。

PHP與Python:核心功能PHP與Python:核心功能Apr 13, 2025 am 12:16 AM

PHP和Python各有優勢,適合不同場景。 1.PHP適用於web開發,提供內置web服務器和豐富函數庫。 2.Python適合數據科學和機器學習,語法簡潔且有強大標準庫。選擇時應根據項目需求決定。

PHP:網絡開發的關鍵語言PHP:網絡開發的關鍵語言Apr 13, 2025 am 12:08 AM

PHP是一種廣泛應用於服務器端的腳本語言,特別適合web開發。 1.PHP可以嵌入HTML,處理HTTP請求和響應,支持多種數據庫。 2.PHP用於生成動態網頁內容,處理表單數據,訪問數據庫等,具有強大的社區支持和開源資源。 3.PHP是解釋型語言,執行過程包括詞法分析、語法分析、編譯和執行。 4.PHP可以與MySQL結合用於用戶註冊系統等高級應用。 5.調試PHP時,可使用error_reporting()和var_dump()等函數。 6.優化PHP代碼可通過緩存機制、優化數據庫查詢和使用內置函數。 7

PHP:許多網站的基礎PHP:許多網站的基礎Apr 13, 2025 am 12:07 AM

PHP成為許多網站首選技術棧的原因包括其易用性、強大社區支持和廣泛應用。 1)易於學習和使用,適合初學者。 2)擁有龐大的開發者社區,資源豐富。 3)廣泛應用於WordPress、Drupal等平台。 4)與Web服務器緊密集成,簡化開發部署。

超越炒作:評估當今PHP的角色超越炒作:評估當今PHP的角色Apr 12, 2025 am 12:17 AM

PHP在現代編程中仍然是一個強大且廣泛使用的工具,尤其在web開發領域。 1)PHP易用且與數據庫集成無縫,是許多開發者的首選。 2)它支持動態內容生成和麵向對象編程,適合快速創建和維護網站。 3)PHP的性能可以通過緩存和優化數據庫查詢來提升,其廣泛的社區和豐富生態系統使其在當今技術棧中仍具重要地位。

PHP中的弱參考是什麼?什麼時候有用?PHP中的弱參考是什麼?什麼時候有用?Apr 12, 2025 am 12:13 AM

在PHP中,弱引用是通過WeakReference類實現的,不會阻止垃圾回收器回收對象。弱引用適用於緩存系統和事件監聽器等場景,需注意其不能保證對象存活,且垃圾回收可能延遲。

解釋PHP中的__ Invoke Magic方法。解釋PHP中的__ Invoke Magic方法。Apr 12, 2025 am 12:07 AM

\_\_invoke方法允許對象像函數一樣被調用。 1.定義\_\_invoke方法使對象可被調用。 2.使用$obj(...)語法時,PHP會執行\_\_invoke方法。 3.適用於日誌記錄和計算器等場景,提高代碼靈活性和可讀性。

See all articles

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

AI Hentai Generator

AI Hentai Generator

免費產生 AI 無盡。

熱門文章

R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
3 週前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳圖形設置
3 週前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.如果您聽不到任何人,如何修復音頻
3 週前By尊渡假赌尊渡假赌尊渡假赌
WWE 2K25:如何解鎖Myrise中的所有內容
4 週前By尊渡假赌尊渡假赌尊渡假赌

熱工具

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

Safe Exam Browser

Safe Exam Browser

Safe Exam Browser是一個安全的瀏覽器環境,安全地進行線上考試。該軟體將任何電腦變成一個安全的工作站。它控制對任何實用工具的訪問,並防止學生使用未經授權的資源。

EditPlus 中文破解版

EditPlus 中文破解版

體積小,語法高亮,不支援程式碼提示功能

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

WebStorm Mac版

WebStorm Mac版

好用的JavaScript開發工具