php-cli知識(shí)

以下是 PHP 二進(jìn)制文件(即 php.exe 程序)提供的命令行模式的選項(xiàng)參數(shù),您隨時(shí)可以通過 PHP -h 命令來查詢這些參數(shù)。

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

CLI SAPI 模塊有以下三種不同的方法來獲取您要運(yùn)行的 PHP 代碼:

創(chuàng)新互聯(lián)秉承實(shí)現(xiàn)全網(wǎng)價(jià)值營銷的理念,以專業(yè)定制企業(yè)官網(wǎng),網(wǎng)站設(shè)計(jì)、成都網(wǎng)站設(shè)計(jì),小程序設(shè)計(jì),網(wǎng)頁設(shè)計(jì)制作,成都手機(jī)網(wǎng)站制作營銷型網(wǎng)站幫助傳統(tǒng)企業(yè)實(shí)現(xiàn)“互聯(lián)網(wǎng)+”轉(zhuǎn)型升級(jí)專業(yè)定制企業(yè)官網(wǎng),公司注重人才、技術(shù)和管理,匯聚了一批優(yōu)秀的互聯(lián)網(wǎng)技術(shù)人才,對(duì)客戶都以感恩的心態(tài)奉獻(xiàn)自己的專業(yè)和所長。

 

 

在windows環(huán)境下,盡量使用雙引號(hào), 在linux環(huán)境下則盡量使用單引號(hào)來完成。


  1. 讓 PHP 運(yùn)行指定文件。

    php my_script.php 
    php -f  "my_script.php"

    以上兩種方法(使用或不使用 -f 參數(shù))都能夠運(yùn)行給定的 my_script.php 文件。您可以選擇任何文件來運(yùn)行,您指定的 PHP 腳本并非必須要以 .php 為擴(kuò)展名,它們可以有任意的文件名和擴(kuò)展名。

  2. 在命令行直接運(yùn)行 PHP 代碼。

    php -r "print_r(get_defined_constants());"

    在使用這種方法時(shí),請(qǐng)您注意外殼變量的替代及引號(hào)的使用。

    注: 請(qǐng)仔細(xì)閱讀以上范例,在運(yùn)行代碼時(shí)沒有開始和結(jié)束的標(biāo)記符!加上 -r 參數(shù)后,這些標(biāo)記符是不需要的,加上它們會(huì)導(dǎo)致語法錯(cuò)誤。

  3. 通過標(biāo)準(zhǔn)輸入(stdin)提供需要運(yùn)行的 PHP 代碼。

    以上用法給我們提供了非常強(qiáng)大的功能,使得我們可以如下范例所示,動(dòng)態(tài)地生成 PHP 代碼并通過命令行運(yùn)行這些代碼:

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

 

以上三種運(yùn)行代碼的方法不能同時(shí)使用。

和所有的外殼應(yīng)用程序一樣,PHP 的二進(jìn)制文件(php.exe 文件)及其運(yùn)行的 PHP 腳本能夠接受一系列的參數(shù)。PHP 沒有限制傳送給腳本程序的參數(shù)的個(gè)數(shù)(外殼程序?qū)γ钚械淖址麛?shù)有限制,但您通常都不會(huì)超過該限制)。傳遞給您腳本的參數(shù)可在全局變量 $argv 中獲取。該數(shù)組中下標(biāo)為零的成員為腳本的名稱(當(dāng) PHP 代碼來自標(biāo)準(zhǔn)輸入獲直接用 -r 參數(shù)以命令行方式運(yùn)行時(shí),該名稱為“-”)。另外,全局變量 $argc 存有 $argv 數(shù)組中成員變量的個(gè)數(shù)(而非傳送給腳本程序的參數(shù)的個(gè)數(shù))。

只要您傳送給您腳本的參數(shù)不是以 - 符號(hào)開頭,您就無需過多的注意什么。向您的腳本傳送以 - 開頭的參數(shù)會(huì)導(dǎo)致錯(cuò)誤,因?yàn)?nbsp;PHP 會(huì)認(rèn)為應(yīng)該由它自身來處理這些參數(shù)。您可以用參數(shù)列表分隔符 -- 來解決這個(gè)問題。在 PHP 解析完參數(shù)后,該符號(hào)后所有的參數(shù)將會(huì)被原樣傳送給您的腳本程序。

# 以下命令將不會(huì)運(yùn)行 PHP 代碼,而只顯示 PHP 命令行模式的使用說明:
$ php -r 'var_dump($argv);' -h
Usage: php [options] [-f] <file> [args...]
[...]
 
# 以下命令將會(huì)把“-h”參數(shù)傳送給腳本程序,PHP 不會(huì)顯示命令行模式的使用說明:
$ php -r "var_dump($argv);" -- -h
array(2) {
  [0]=>
  string(1) "-"
  [1]=>
  string(2) "-h"
}

除此之外,我們還有另一個(gè)方法將 PHP 用于外殼腳本。您可以在寫一個(gè)腳本,并在第一行以 #!/usr/bin/php 開頭,在其后加上以 PHP 開始和結(jié)尾標(biāo)記符包含的正常的 PHP 代碼,然后為該文件設(shè)置正確的運(yùn)行屬性。該方法可以使得該文件能夠像外殼腳本或 PERL 腳本一樣被直接執(zhí)行。

#!/usr/bin/php
<?php
    var_dump($argv);
?>

假設(shè)改文件名為 test 并被放置在當(dāng)前目錄下,我們可以做如下操作:

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

正如您所看到的,在您向該腳本傳送以 - 開頭的參數(shù)時(shí),腳本仍然能夠正常運(yùn)行。

 

 

 

php-cli知識(shí)

 

 

 

------------------------------------------------------------------------------命令選項(xiàng)-----------------------------------------------------

 

表格 23-3. 命令行選項(xiàng)

選項(xiàng)名稱描 述
-s

顯示有語法高亮色彩的源文件。

該參數(shù)使用內(nèi)建機(jī)制來解析文件并為其生成一個(gè) HTML 高亮版本并將結(jié)果寫到標(biāo)準(zhǔn)輸出。請(qǐng)注意該過程所做的只是生成了一個(gè) <code> [...] </code> 的 HTML 標(biāo)記符塊,并不包含任何的 HTML 頭。

注: 該選項(xiàng)不能和 -r 參數(shù)同時(shí)使用。

-w

顯示除去了注釋和空格的源代碼。

注: 該選項(xiàng)不能和 -r 參數(shù)同時(shí)使用。

-f

解析并運(yùn)行給定的文件名。該參數(shù)為可選參數(shù)且可以不加,僅指明需要運(yùn)行的文件名即可。

-v

將 PHP、PHP SAPI 及 Zend 的版本信息寫入的標(biāo)準(zhǔn)輸出。例如:

$ 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
-c

用該參數(shù),您可以指定一個(gè)放置 php.ini 文件的目錄,或者直接指定一個(gè)自定義的 INI 文件,其文件名可以不是 php.ini。例如:

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

交互地運(yùn)行 PHP。

-d

用該參數(shù)可以自行設(shè)置 php.ini 文件中設(shè)置變量的值,其語法為:

-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

為調(diào)試器等生成擴(kuò)展信息。

-z

加載 Zend 擴(kuò)展庫。如果僅給定一個(gè)文件名,PHP 將試圖從您系統(tǒng)擴(kuò)展庫的默認(rèn)路徑(在 Linux 系統(tǒng)下,該路徑通常由 /etc/ld.so.conf 指定)加載該擴(kuò)展庫。如果您用一個(gè)絕對(duì)路徑指定文件名,則系統(tǒng)的擴(kuò)展庫默認(rèn)路徑將不會(huì)被使用。如果用相對(duì)路徑指定的文件名,PHP 則僅試圖加載相對(duì)于當(dāng)前目錄的擴(kuò)展庫。

-l

該參數(shù)提供了對(duì)指定 PHP 代碼進(jìn)行語法檢查的方便的方法。如果成功,則向標(biāo)準(zhǔn)輸出寫入 No syntax errors detected in <filename> 字符串,并且外殼返回值為 0。如果失敗,則 Errors parsing <filename> 以及內(nèi)部解析器錯(cuò)誤信息會(huì)一起被寫入到標(biāo)準(zhǔn)輸出,同時(shí)外殼返回值將別設(shè)置為 255。

該參數(shù)將無法檢查致命錯(cuò)誤(如未定義函數(shù)),如果您希望檢測(cè)之名錯(cuò)誤,請(qǐng)使用 -f 參數(shù)。

注: 該參數(shù)不能和 -r 一同使用。

-m

使用該參數(shù),PHP 將打印出內(nèi)置以及已加載的 PHP 及 Zend 模塊:

$ php -m
[PHP Modules]
xml
tokenizer
standard
session
posix
pcre
overload
MySQL
mbstring
ctype
 
[Zend Modules]
-i該命令行參數(shù)會(huì)調(diào)用 phpinfo() 函數(shù),并打印出結(jié)果。如果 PHP 沒有正常工作,我們建議您執(zhí)行 php -i 命令來查看在信息表格之前或者對(duì)應(yīng)的地方是否有任何錯(cuò)誤信息輸出。請(qǐng)注意輸出的內(nèi)容為 HTML 格式,因此輸出的信息篇幅較大。
-r

使用該參數(shù)可以在命令行運(yùn)行 PHP 代碼。您無需加上 PHP 的起始和結(jié)束標(biāo)識(shí)符(<?php 和 ?>),否則將會(huì)導(dǎo)致語法解析錯(cuò)誤。

注: 使用這種形式的 PHP 時(shí),應(yīng)個(gè)別注意避免和外殼環(huán)境進(jìn)行的命令行參數(shù)替換相沖突。

顯示語法解析錯(cuò)誤的范例

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

這里的問題在于即時(shí)使用了雙引號(hào) ",sh/bash 仍然實(shí)行了參數(shù)替換。由于 $foo 沒有被定義,被替換后它所在的位置變成了空字符,因此在運(yùn)行時(shí),實(shí)際被PHP 讀取的代碼為:

$ php -r " = get_defined_constants();"

正確的方法是使用單引號(hào) '。在用單引號(hào)引用的字符串中,變量不會(huì)被 sh/bash 還原成其原值。

$ php -r '$foo = get_defined_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,您可能會(huì)碰到其它的問題。請(qǐng)報(bào)告您碰到的 bug,或者發(fā)郵件到 phpdoc@lists.php.net。

當(dāng)您試圖將外殼的環(huán)境變量引入到馬或者用反斜線來轉(zhuǎn)義字符時(shí)也可能碰到各種各樣的問題,請(qǐng)您在使用時(shí)注意!

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

-h使用該參數(shù),您可以得到完整的命令行參數(shù)的列表及這些參數(shù)作用的簡單描述。

 

PHP 的命令行模式能使得 PHP 腳本能完全獨(dú)立于 WEB 服務(wù)器單獨(dú)運(yùn)行。如果您使用 Unix 系統(tǒng),您需要在您的 PHP 腳本的最前面加上一行特殊的代碼,使得它能夠被執(zhí)行,這樣系統(tǒng)就能知道用什么樣的程序要運(yùn)行該腳本。在 Windows 平臺(tái)下您可以將 php.exe 和 .php 文件的雙擊屬性相關(guān)聯(lián),您也可以編寫一個(gè)批處理文件來用 PHP 執(zhí)行腳本。為 Unix 系統(tǒng)增加的第一行代碼不會(huì)影響該腳本在 Windows 下的運(yùn)行,因此您也可以用該方法編寫跨平臺(tái)的腳本程序。以下是一個(gè)簡單的PHP 命令行程序的范例。

例子 23-1. 試圖以命令行方式運(yùn)行的 PHP 腳本(script.php)

#!/usr/bin/php
<?php

if ($argc != 2 || in_array($argv[1], array('--help', '-help', '-h', '-?'))) {
?>

This is a command line PHP script with one option.

  Usage:
  <?php echo $argv[0]; ?> <option>

  <option> can be some word you would like
  to print out. With the --help, -help, -h,
  or -? options, you can get this help.

<?php
} else {
    echo $argv[1];
}
?>

在以上腳本中,我們用第一行特殊的代碼來指明該文件應(yīng)該由 PHP 來執(zhí)行。我們?cè)谶@里使用 CLI 的版本,因此不會(huì)有 HTTP 頭信息輸出。在您用 PHP 編寫命令行應(yīng)用程序時(shí),您可以使用兩個(gè)參數(shù):$argc 和 $argv。前面一個(gè)的值是比參數(shù)個(gè)數(shù)大 1 的整數(shù)(運(yùn)行的腳本本身的名稱也被當(dāng)作一個(gè)參數(shù))。第二個(gè)時(shí)包含有參數(shù)的數(shù)組,其第一個(gè)元素為腳本的名稱,下標(biāo)為數(shù)字 0($argv[0])。

在以上程序中我們檢查了參數(shù)的個(gè)數(shù)是大于 1 個(gè)還是小于 1 個(gè)。即時(shí)參數(shù)是 --help、-help、-h 或 -?,我們?nèi)匀淮蛴〕鰩椭畔?,并同時(shí)動(dòng)態(tài)輸出腳本的名稱。如果還收到了其它參數(shù),我們也把它們顯示出來。

如果您希望在 Unix 下運(yùn)行以上腳本,您需要使得它成為可執(zhí)行腳本,然后簡單的運(yùn)行 script.php echothis 或 script.php -h。在 Windows 下,您可以為此編寫一個(gè)批處理文件:

分享標(biāo)題:php-cli知識(shí)
URL分享:http://bm7419.com/article6/gippig.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供云服務(wù)器、網(wǎng)站改版、用戶體驗(yàn)微信公眾號(hào)、建站公司、App設(shè)計(jì)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

成都定制網(wǎng)站網(wǎng)頁設(shè)計(jì)