男女疯狂一边摸一边做羞羞视频|啊好深好硬快点用力别停动态图|亚洲一区无码中文字幕|特级无码毛片免费视频播放▽|久久狠狠躁免费观看|国内精品久久久久久网站

執行 PHP 文件

CLI SAPI 有三種不同的方法執行 PHP 代碼:

  1. 讓 PHP 運行指定文件。

    $ php my_script.php
    
    $ php -f my_script.php
    

    以上兩種方法(使用或不使用 -f 參數)都能夠運行給定的 my_script.php 文件。注意,沒(méi)有限制可以執行哪種文件, 特別是文件名也不必用 .php 作為擴展名。

  2. 在命令行中直接傳遞 PHP 代碼執行。

    $ php -r 'print_r(get_defined_constants());'
    

    必須特別注意 shell 變量的替代及引號的使用。

    注意:

    請仔細閱讀以上范例,它們沒(méi)有開(kāi)始和結束標識符!加上 -r 參數后不需要這些標記符,并且加上它們還會(huì )導致語(yǔ)法錯誤。

  3. 通過(guò)標準輸入(stdin)提供需要運行的 PHP 代碼。

    這為動(dòng)態(tài)創(chuàng )建 PHP 代碼并通過(guò)二進(jìn)制文件執行提供了強大的能力,就像下面(虛構的)例子展示的一樣:

    $ some_application | some_filter | php | sort -u > final_output.txt
    
以上三種運行代碼的方法不能混合使用。

和所有的 shell 應用程序一樣,PHP 的二進(jìn)制文件及其 PHP 腳本能夠接受一系列的參數。PHP 沒(méi)有限制傳送給腳本的參數的個(gè)數( shell 對傳遞的字符數有限制,但通常都不會(huì )超過(guò)該限制)。傳遞給腳本的參數可在全局數組 $argv 中獲取。第一個(gè)索引(零)始終包含從命令行中調用的腳本名稱(chēng)。注意在命令行內使用 -r 執行 PHP 代碼時(shí), $argv[0] 的值將是 "Standard input code"; 在 PHP 7.2.0 之前是破折號(-)。如果代碼是通過(guò)來(lái)自 STDIN 的管道執行的,同樣如此。

另外,第二個(gè)全局變量 $argc 包含 $argv 數組中元素的個(gè)數(而不是傳遞給腳本的參數個(gè)數)。

只要傳送給腳本的參數不是以 - 字符開(kāi)頭,就無(wú)需過(guò)多的注意什么。向腳本傳遞以 - 開(kāi)頭的參數會(huì )導致錯誤,因為 PHP 會(huì )認為在執行腳本之前應該由它自身來(lái)處理這些參數。為防止發(fā)生這種情況,可以用列表分隔符 -- 參數來(lái)解決。在 PHP 解析此分隔符之后, 該符號后的所有參數將會(huì )被原樣傳遞給腳本程序。

# 以下命令將不會(huì )運行 PHP 代碼,而只顯示 PHP 命令行模式的使用說(shuō)明
$ php -r 'var_dump($argv);' -h
Usage: php [options] [-f] <file> [args...]
[...]

# 將會(huì )傳遞 “-h” 參數傳送給腳本,且 PHP 不會(huì )顯示命令行模式的使用說(shuō)明
$ php -r 'var_dump($argv);' -- -h
array(2) {
  [0]=>
  string(1) "-"
  [1]=>
  string(2) "-h"
}

然而,在 Unix 系統中還有一個(gè)將 PHP 用于 shell 腳本的方法:寫(xiě)個(gè)腳本,第一行以 #!/usr/bin/php 為開(kāi)頭 (如果 PHP CLI 二進(jìn)制文件路徑不一樣,則可以指定為任意實(shí)際的路徑)。文件的剩余部分應該包含通用的 PHP 開(kāi)始標簽、正常的 PHP 代碼、PHP 結束標簽。一旦設置正確的文件執行屬性(例如 chmod +x test),腳本就像其他 shell/perl 腳本一樣可以執行。

示例 #1 PHP 腳本作為 shell 腳本執行

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

假設在當前目錄下,該文件名為 test,可以做如下操作:

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

正如看到的,在向該腳本傳遞以 - 開(kāi)頭的參數時(shí),無(wú)需關(guān)心這種情況。

PHP 可執行文件可用于運行完全獨立于 web 服務(wù)器的 PHP 腳本。在 Unix 系統上,需要在 PHP 腳本的第一行指定 #!(或者說(shuō) “shebang”)以便系統可以自動(dòng)判斷用哪個(gè)程序運行腳本。 在 Windows 平臺上可以使用雙擊擴展名是.php的文件與 php.exe 相關(guān)聯(lián),也可以編寫(xiě)一個(gè)批處理文件使用 PHP 運行腳本。為 Unix 系統增加的指定 shebang 的第一行代碼不會(huì )影響 Windows (它也是 PHP 注釋的格式),因此也可以用該方法編寫(xiě)跨平臺的程序。以下是編寫(xiě)的一個(gè)簡(jiǎn)單 PHP 命令行程序的示例。

示例 #2 試圖以命令行方式運行的 PHP 腳本(script.php)

#!/usr/bin/php
<?php

if ($argc != || 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];
}
?>

在以上腳本中,用包含 Unix shebang 的第一行代碼來(lái)指明該文件應該由 PHP 來(lái)執行。這里使用 CLI 版本運行,因此不會(huì )輸出 HTTP 頭。

程序首先檢查是否有需要的參數(除了腳本名,因為它也會(huì )被計算進(jìn)來(lái))。如果沒(méi)有參數或者參數是 --help、 -help、 -h、 -?,將會(huì )打印出幫助消息, 在命令行上使用 $argv[0] 動(dòng)態(tài)輸出腳本名稱(chēng)。否則參數將按照接收的方式進(jìn)行準確回顯。

如果在 Unix 下運行以上腳本,它必須有可執行權限,并簡(jiǎn)單的以 script.php echothis 或者 script.php -h 方式調用。在 Windows 下,可以為此類(lèi)任務(wù)編寫(xiě)與以下內容類(lèi)似的批處理文件:

示例 #3 運行 PHP 命令行腳本的批處理文件(script.bat)

@echo OFF
"C:\php\php.exe" script.php %*

假設將上述程序名為 script.php,且 CLI 版的 php.exe 位于 C:\php\php.exe, 該批處理文件將會(huì )運行并傳遞所有追加選項: script.bat echothis 或者 script.bat -h。

參閱 Readline 擴展文檔獲取更多函數,以用于 PHP 中增強命令行應用程序。

在 Windows 上, PHP 可以配置為無(wú)需提供 C:\php\php.exe 或者 擴展名為 .php 的文件運行,如 PHP 在 Microsoft Windows 下的命令行方式中所述。

注意:

在 Windows 上,推薦在真實(shí)用戶(hù)賬戶(hù)下運行 PHP。在網(wǎng)絡(luò )服務(wù)下運行某些操作時(shí)將會(huì )失敗, 因為“帳戶(hù)名與安全標識間無(wú)任何映射完成”。

男女疯狂一边摸一边做羞羞视频|啊好深好硬快点用力别停动态图|亚洲一区无码中文字幕|特级无码毛片免费视频播放▽|久久狠狠躁免费观看|国内精品久久久久久网站