<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></span> 登入後複製 |
#CLI SAPI 模組有以下三種不同的方法來取得您要執行的 PHP 程式碼:
在windows環境下,盡量使用雙引號, 在linux環境下則盡量使用單引號來完成。
讓 PHP 執行指定檔案。
<span style="font-size: 14px;">php my_script.php <br/>php -f "my_script.php"<br/></span> 登入後複製 |
#以上兩種方法(使用或不使用 -f 參數)都能夠運行給定的 my_script.php 檔案。您可以選擇任何檔案來執行,您指定的 PHP 腳本並非必須以 .php 為副檔名,它們可以有任意的檔案名稱和副檔名。
在命令列直接執行 PHP 程式碼。
<span style="font-size: 14px;">php -r "print_r(get_defined_constants());"<br/></span> 登入後複製 |
#在使用此方法時,請您注意外殼變數的替代及引號的使用。
註: 請仔細閱讀上述範例,在執行程式碼時沒有開始和結束的標記符!加上 -r 參數後,這些標記符是不需要的,加上它們會導致語法錯誤。
透過標準輸入(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 'var_dump($argv);' -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/><br/> 登入後複製 登入後複製 |
假设改文件名为 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.命令列選項
##選項名稱 | 描述 |
---|---|
-s | 顯示有語法高亮色彩的來源檔案。 此參數使用內建機制來解析檔案並為其產生一個 HTML 高亮版本並將結果寫入標準輸出。請注意該過程所做的只是產生了一個
|
-w | #顯示除去了註解和空格的原始碼。
|
-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 此參數將無法檢查致命錯誤(如未定義函數),如果您希望偵測名稱錯誤,請使用 -f 參數。
|
-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 的起始和結束識別碼(),否則將會導致語法解析錯誤。
|
-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中文網其他相關文章!