目錄
以下是 PHP  二進位檔案(即 php.exe 程式)提供的命令列模式的選項參數,您隨時可以透過 PHP -h 指令來查詢這些參數。 " >以下是 PHP  二進位檔案(即 php.exe 程式)提供的命令列模式的選項參數,您隨時可以透過 PHP -h 指令來查詢這些參數。
首頁 後端開發 php教程 PHP下的命令列執行

PHP下的命令列執行

May 09, 2018 am 11:56 AM
php 命令列 執行

這篇文章主要介紹了關於PHP下的命令列執行,有著一定的參考價值,現在分享給大家,有需要的朋友可以參考一下

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

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 &#39;bar&#39;
  -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 模組有以下三種不同的方法來取得您要執行的 PHP 代碼:

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

  1. 讓 PHP 執行指定檔案。

    php my_script.php 
    php -f  "my_script.php"
    登入後複製

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

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

    php -r "print_r(get_defined_constants());"
    登入後複製

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


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

  2. 透過標準輸入(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 解析完参数后,该符号后所有的参数将会被原样传送给您的脚本程序。

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

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

#!/usr/bin/php
<?php
    var_dump
($argv);
?>
登入後複製
<span style="color:rgb(0,0,0);"><span style="color:rgb(0,0,187);"></span></span>

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

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

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

----------------------------------------- -------------------------------------指令選項----------- ------------------------------------------

表格23-3.命令列選項

## 描述#-s-w-f-v$ 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$ php -c /custom/directory/ my_script.php $ php -c /custom/directory/custom-file.ini my_script.php#-a
選項名稱

顯示有語法高亮色彩的原始檔。

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

 頭。


附註: 此選項不能和 -r

 參數同時使用。


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


附註: 此選項不能和 -r

 參數同時使用。


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

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

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

。例如:

## 互動地執行 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_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,您可能會碰到其它的問題。請回報您碰到的 bug,或寄email到 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:   be< <can<can<can<); you would like  to print out. With the --help, -help, -h,  or -? options, you can get this help.在上述腳本中,我們用第一行特殊的程式碼來指明該檔案應該由 PHP 來執行。我們在這裡使用 CLI 的版本,因此不會有 HTTP 頭資訊輸出。當您用 PHP 編寫命令列應用程式時,您可以使用兩個參數:$argc 和 $argv。前面一個的值是比參數個數大 1 的整數(運行的腳本本身的名稱也被當作一個參數)。第二個時包含有參數的數組,其第一個元素為腳本的名稱,下標為數字 0($argv[0])。

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

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



#@c:\php\cli\php.exe script.php %1 %2 %3 %4

 


############################### ##

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

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱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 尊渡假赌尊渡假赌尊渡假赌

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

適用於 Ubuntu 和 Debian 的 PHP 8.4 安裝和升級指南 適用於 Ubuntu 和 Debian 的 PHP 8.4 安裝和升級指南 Dec 24, 2024 pm 04:42 PM

PHP 8.4 帶來了多項新功能、安全性改進和效能改進,同時棄用和刪除了大量功能。 本指南介紹如何在 Ubuntu、Debian 或其衍生版本上安裝 PHP 8.4 或升級到 PHP 8.4

CakePHP 日期和時間 CakePHP 日期和時間 Sep 10, 2024 pm 05:27 PM

為了在 cakephp4 中處理日期和時間,我們將使用可用的 FrozenTime 類別。

討論 CakePHP 討論 CakePHP Sep 10, 2024 pm 05:28 PM

CakePHP 是 PHP 的開源框架。它旨在使應用程式的開發、部署和維護變得更加容易。 CakePHP 基於類似 MVC 的架構,功能強大且易於掌握。模型、視圖和控制器 gu

CakePHP 檔案上傳 CakePHP 檔案上傳 Sep 10, 2024 pm 05:27 PM

為了進行文件上傳,我們將使用表單助理。這是文件上傳的範例。

CakePHP 建立驗證器 CakePHP 建立驗證器 Sep 10, 2024 pm 05:26 PM

可以透過在控制器中新增以下兩行來建立驗證器。

如何設定 Visual Studio Code (VS Code) 進行 PHP 開發 如何設定 Visual Studio Code (VS Code) 進行 PHP 開發 Dec 20, 2024 am 11:31 AM

Visual Studio Code,也稱為 VS Code,是一個免費的原始碼編輯器 - 或整合開發環境 (IDE) - 可用於所有主要作業系統。 VS Code 擁有大量針對多種程式語言的擴展,可以輕鬆編寫

CakePHP 快速指南 CakePHP 快速指南 Sep 10, 2024 pm 05:27 PM

CakePHP 是一個開源MVC 框架。它使應用程式的開發、部署和維護變得更加容易。 CakePHP 有許多函式庫可以減少大多數常見任務的過載。

您如何在PHP中解析和處理HTML/XML? 您如何在PHP中解析和處理HTML/XML? Feb 07, 2025 am 11:57 AM

本教程演示瞭如何使用PHP有效地處理XML文檔。 XML(可擴展的標記語言)是一種用於人類可讀性和機器解析的多功能文本標記語言。它通常用於數據存儲

See all articles