導航:首頁 > 編程語言 > phpcli是什麼

phpcli是什麼

發布時間:2023-02-03 01:56:51

1. dockerfile使用phpcli模式

dockerfile使用phpcli模式需要調用。Dockerfile是一個用來構建鏡像的文本文件,文本內容包含了一條條構建鏡像所需的指令和說明。php-cli是phpCommandLineInterface的簡稱。

2. 執行php.exe程序cli提示錯誤如何解決

#!/usr/local/bin/php –q
<?php
//Windows平台上,上行應該為:#!C:\php\php.exe -q
echo "你好 PHP CLI!";
?>
不要忘了給該文件設置為可執行的許可權:
$ chmod 755 myfile.php
然後直接輸入以下命令,按回車鍵即可以運行:
$ ./myfile.php
如果要在Windows系統下運行該腳本,則不需要設置文件屬性,
可以直接運行該腳本。
Microsoft Windows [版本 6.0.6000]
版權所有 (C) 2006 Microsoft Corporation。保留所有權利。
C:\ >myfile.php
你好 PHP CLI!

再重申一次:如果在Windows平台,CLI腳本的第一行一定要寫正確php.exe所在的位置,像這樣(另外,如果要在CLI腳本中加註釋語句,則要把注釋寫在PHP標簽裡面,因為CLI解釋只認識第一行,不在PHP標簽里認為是語法錯誤):

#!C:\php\php.exe -q

這樣,可以看到在命令行下信息已經列印出來,證明該CLI腳本已經成功運行。

2.從命令行上讀取參數
如果想從命令行獲取參數,CLI可以從$_SERVER['argc']和$_SERVER['argv'']取得參數的個數和值。我們再建立一個文件,名字為testargs.php,腳本代碼如下:

#!C:\php\php.exe –q
<?php
//UNIX和linux平台下應該為#!/usr/local/bin/php –q
echo "測試獲取參數:\n";
echo $_SERVER["argc"]."\n";
//顯示傳入的參數值,從索引1開始顯示
echo $_SERVER["argv"][1]."\n";
echo $_SERVER["argv"][2]."\n";
echo $_SERVER["argv"][3]."\n";
echo $_SERVER["argv"][4]."\n";
?>
在命令行輸入如下代碼:
C:\Users\John>testargs.php Always To Be Best
測試獲取參數:
4
Always
To
Be
Best

因為我們輸入了一串單詞,為「Always To Be Best」,腳本參數以空格分隔。因此,PHP將其計為4個參數,下面對此說明。

$_SERVER["argc"]數組返回一個整型的數,代表從命令行上回車後一共輸入了幾個參數。

從上例的結果已經看出,要訪問已經傳入的參數值,需要從索引1開始。因為腳本本身的文件已經佔用了索引0,即$_SERVER["argv"][0]。

3.處理I/O通道
PHP最初設計不是用於與用戶直接的鍵盤輸入或文本輸出結合使用。了解這一設計是至關重要的,因為如果需要在命令行中執行任何操作,都必須能夠與用戶來回通信。

輸入輸出(I/O)通道這個思想來源於UNIX系統,UNIX系統提供3個文件句柄,用以從一個應用程序及用戶終端發送和接收數據。

我們可以把一個腳本的輸出重定向到一個文件:
php world.php > outputfile

如果是在UNIX系統下,也可以使用通道定向到另一個命令或應用程序中。例如:
php world.php | sort.

在PHP 5 CLI中,有一個文件流句柄,可以使用3個系統常量,分別為STDIN、STDOUT和STDERR。下面我們分別介紹。

(1)STDIN
STDIN全稱為standard in或standard input,標准輸入可以從終端取得任何數據。

格式:stdin (』php://stdin』)

下面的例子是顯示用戶輸入:

#!/usr/local/bin/php -q
<?php
$file = file_get_contents("php://stdin", "r");
echo $file;
?>

這段代碼的工作原理與cat命令很相似,回轉提供給它的所有輸入。但是,這時它還不能接收參數。

STDIN是PHP的標准輸入設備,利用它,CLI PHP腳本可以做更多的事情。如下面例子:

#!/usr/local/bin/php -q
<?php
//UNIX平台下第一行應該為#!/usr/bin/php –q
/* 如果STDIN未定義,將新定義一個STDIN輸入流 */
if(!defined("STDIN")) {
define("STDIN", fopen('php://stdin','r'))
}
echo "你好!你叫什麼名字(請輸入):\n";
$strName = fread(STDIN, 100); //從一個新行讀入80個字元
echo '歡迎你'.$strName."\n";
?>
該腳本執行後將顯示:
你好!你叫什麼名字(請輸入):
比如,輸入Raymond之後,將顯示:
歡迎你Raymond

(2)STDOUT
STDOUT全稱為standard out或standard output,標准輸出可以直接輸出到屏幕(也可以輸出到其他程序,使用STDIN取得),如果在PHP CLI模式里使用print或echo語句,則這些數據將發送到STDOUT。

格式:stdout (』php://stdout』)

我們還可以使用PHP函數進行數據流輸出。如下面例子:

#!/usr/local/bin/php –q
<?php
$STDOUT = fopen('php://stdout', 'w');
fwrite($STDOUT,"Hello World");
fclose($STDOUT);
?>
輸出結果如下:
Hello World
例如,echo和print命令列印到標准輸出。
#!/usr/local/bin/php –q
Output #1.
<?php
echo "Output #2.";
print "Output #3."
?>
這將得到:
Output #1.
Output #2.Output #3.

說明:PHP標記外的新行已被輸出,但是echo命令或print命令中沒有指示換行。事實上,命令提示符重新出現在Output #2.Output #3. 所在的行中。PHP擁有的任何其他列印函數將會像此函數一樣運行正常,任何寫迴文件的函數也是一樣的。

#!/usr/local/bin/php -q
<?php
$STDOUT = fopen("php://stdout", "w");
fwrite($STDOUT, "Output #1.");
fclose($STDOUT);
?>

以上代碼將把php://stdout作為輸出通道顯式打開,並且php://output通常以與php://stdout相同的方法運行。

(3)STDERR
STDERR全稱為standard error,在默認情況下會直接發送至用戶終端,當使用STDIN文件句柄從其他應用程序沒有讀取到數據時會生成一個「stdin.stderr」。

格式:stderr (』php://stderr』)

下面的腳本表示如何把一行文本輸出到錯誤流中。

#!/usr/local/bin/php –q
<?php
$STDERR = fopen('php://stderr', 'w');
fwrite($STDERR,"There was an Error");
fclose($STDERR);
?>

PHP 5.2可以直接使用STDOUT作為常量,而不是定義上面使用的變數$STDOUT,為了兼容之前版本,我們仍使用了自定義變數,如果您使用的是PHP 5.2,則可以參考STDIN的第二個例子。

4.後台運行CLI
如果正在運行一個進程,而且在退出賬戶時該進程還不會結束,即在系統後台或背景下運行,那麼就可以使用nohup命令。該命令可以在退出賬戶之後繼續運行相應的進程。

nohup在英文中就是不掛起的意思(no hang up)。該命令的一般形式為:
nohup –f scriptname.php &

使用nohup命令提交作業,在默認情況下該作業的所有輸出都被重定向到一個名為nohup.out的文件中,除非另外指定了輸出文件。
nohup scriptname.php > log.txt &
這樣,PHP CLI腳本執行後的結果將輸出到log.txt中,我們可以使用tail命令查看該內容:
tail -n50 -f log.txt

現在再來實現兩個例子,第一個是每隔10分鍾自動生成一個靜態HTML文件,並一直執行下去。腳本代碼如下:

#! /usr/local/bin/php
<?php
set_time_limit(0);
while(true){
@fopen("/usr/local/www/data-dist/content/
article_".time().".html","w");
sleep(600);
}
?>

保存並且退出vi編輯器,然後賦予genHTML.php文件可執行許可權:

#>chmod 755 genHTML.php
然後讓腳本在後台執行,執行如下命令:
$nohup genHTML.php –f &
執行上述命令後出現如下提示:
[1] 16623

按回車鍵後將出現shell提示符。上面的提示就是說,所有命令執行的輸出信息都會放到nohup.out文件中。

執行上面命令後,每隔10分鍾就會在指定的目錄生成指定的HTML文件,如article_111990120.html等文件。

如何終止CLI程序的後台運行呢?

可以使用kill命令來終止這個進程,終止進程之前要知道進程的PID號,即進程ID,我們使用ps命令:

www# ps
PID TT STAT TIME COMMAND
561 v0 Is+ 0:00.00 /usr/libexec/getty Pc ttyv0
562 v1 Is+ 0:00.00 /usr/libexec/getty Pc ttyv1
563 v2 Is+ 0:00.00 /usr/libexec/getty Pc ttyv2
564 v3 Is+ 0:00.00 /usr/libexec/getty Pc ttyv3
565 v4 Is+ 0:00.00 /usr/libexec/getty Pc ttyv4
566 v5 Is+ 0:00.00 /usr/libexec/getty Pc ttyv5
567 v6 Is+ 0:00.00 /usr/libexec/getty Pc ttyv6
568 v7 Is+ 0:00.00 /usr/libexec/getty Pc ttyv7
16180 p0 I 0:00.01 su
16181 p0 S 0:00.06 _su (csh)
16695 p0 R+ 0:00.00 ps
16623 p0 S 0:00.06 /usr/local/bin/php /usr/local/www/data/genHTML.php
已經看到PHP的進程ID是:16623,於是再執行kill命令:
$ kill -9 16623
[1]+ Killed nohup /usr/local/www/data/genHTML.php
這時該命令的進程就已經被終止了,再使用ps命令:
$ ps
PID TT STAT TIME COMMAND
82374 p3 Ss 0:00.17 -bash (bash)
82535 p3 R+ 0:00.00 ps

剛才的PHP CLI腳本已經沒有了,如果直接運行ps命令無法看到進程,那麼就結合使用ps & apos兩個命令來查看。

注意:上面例子必須運行在UNIX或者Linux系統中,如FreeBSD、Redhat Linux等,在Windows環境不支持nohup命令。

3. php只能在伺服器中編輯和使用嗎

不是的,php也可以用於客戶端編程,可以用在多個方面,比如可以使用php編寫一個桌面程序,這些都是可以的。

4. php cli 下怎麼給

很多沒有基礎的朋友,經常會問php文件怎麼打開,其實PHP是一個網頁腳本,但不同於html xml 標簽語言,直接可以通過瀏覽器打開,需要有PHP的運行環境才可以訪問和打開文件,如果只是編輯PHP打開文件,只需要用記事本或者通過相關的編輯器如(DW、EclipsePHP、editplus 等)打開編輯即可。PHP,是英文超級文本預處理語言Hypertext Preprocessor的縮寫。PHP 是一種 HTML 內嵌式的語言,是一種在伺服器端執行的嵌入HTML文檔的腳本語言,語言的風格有類似於C語言,被廣泛的運用。

大概就是這樣的,還不明白我建議樓主去找後盾人,因為他們那正在搞活動學費九折還包住宿,我正准備去那裡面學習,有興趣一起來

5. php 判斷當前是不是cli模式

需要用到系統函數php_sapi_name() 或者 系統常量 PHP_SAPI,返回 cli 或 cli_server

1 /*
2 判斷當前的運行環境是否是cli模式
3 */
4 function is_cli(){
5 return preg_match("/cli/i", php_sapi_name()) ? true : false;
6 },這樣試試吧,希望能幫到你,我還要抓緊時間自己在後盾人平台學習呢(*´﹃`*)

6. 普及一下知識php如何做桌面客戶端

WinBinder 是一種開源的 PHP 動態擴展(.dll) ,也算是腳本編程語言,為php 在window 下的開發提供用戶界面UI ,它負責調用window 的API 介面。其運行 PHP 程序員輕松地使用 PHP 創建 Windows 應用程序。當然,這個只能在 Windows 下運行。本身是一個軟體,php 程序員可以通過這個軟體開發界面。官方網站說得很不錯,無須編譯php. 只要保存文件擴展為.phpw ,然後用 php.exe 打開就可以運行。具體開發感受如何,要試驗一下才知道。初步感覺不會比php-gtk 差。
可以在此處下載到 WinBinder 的包 , 下那個 .zip 包,一般不需要用 .exe 的。下完之後解壓縮,將 winbinder_xxx\PHP\PHP4\ext 目錄下的(如果用的是 PHP5 則復制 PHP5 目錄下的) php_winbinder.dll 復制到 PHP 擴展目錄下,一般在 C:\php\extensions ,然後修改 php.ini 文件,加上:
extension=php_winbinder.dll
然後到打開命令行(cmd ),進入到 winbinder_xxx\Code\Samples 目錄下,運行:
C:phpcliphp.exe manytests_main.phpw
這樣就可以看到 Windows 窗口了,測試用的例子很多,可以都試試。我試了一下中文,還是支持得不錯的,想想也是,WinBinder 是通過擴展的方式,載入到 PHP 中,其調用的都是 Windows 的 APIs 。實際上可以將 WinBinder 分為兩層,一層是底層,叫 API 層,作為 PHP 擴展直接連接 Windows 的 API ,並為第二層(高層,叫 PHP 層)提供統一的調用介面。
你以為php只能做桌面應用?錯移動應用也照樣拿下。PHP for android讓你用你最熟悉的php開發android軟體。
總之,php的插件工具雖然可以實現開發桌面客戶端,但是並不建議,因為不方便而且開發效率極低。

7. php如何在後台運行

在後台執行,也就是cli模式。
去php安裝目錄找到php.exe這個文件,並且在命令行下執行它。具體方法去查手冊或google:php
cli模式。
不過你說的這個需求,用不用cli模式都無所謂。其實這只是個非同步請求而已。
你說的a腳本在執行過程中給b腳本傳輸數據。其實可以使用http協議,然後post或者get參數來達到傳數據的目的。
5樓給你的那個函數,其實就是放在a腳本中用來通過http協議請求b腳本的一個函數。你可以在b文件中直接使用$http_get_vars或$http_post_vars來得到a腳本傳過去的數據。
另外還可以使用curl庫來實現這種模擬http請求。

8. php是什麼意思

php通常指超文本預處理器,用於面向對象、命令式編程,是一種通用開源腳本語言。

主要特點:

為開源性和免費性、快捷性、資料庫連接的廣泛性、面向過程和面向對象並用。優點是利於學習,使用廣泛。此外,php還可以指菲律賓比索的標准貨幣代碼符號,MPLS網路中的倒數第二跳彈出功能。是英文超級文本預處理語言Hypertext Preprocessor的縮寫。PHP 是一種HTML 內嵌式的語言,是一種在伺服器端執行嵌入HTML文檔的腳本語言,語言風格有些類似於C語言,被廣泛的運用。

簡介:

PHP(外文名:PHP: Hypertext Preprocessor,中文名:「超文本預處理器」)是一種通用開源腳本語言。語法吸收了C語言、Java和Perl的特點,利於學習,使用廣泛,主要適用於Web開發領域。PHP 獨特的語法混合了C、Java、Perl以及PHP自創的語法它可以比CGI或者Perl更快速地執行動態網頁。用PHP做出的動態頁面與其他的編程語言相比,PHP是將程序嵌入到HTML(標准通用標記語言下的一個應用)文檔中去執行,執行效率比完全生成HTML標記的CGI要高許多;PHP還可以執行編譯後代碼,編譯可以達到加密和優化代碼運行,使代碼運行更快。

特性包括:

1、PHP 獨特的語法混合了 C、Java、Perl 以及 PHP 自創新的語法

2、PHP可以比CGI或者Perl更快速的執行動態網頁——動態頁面方面,與其他的編程語言相比,PHP是將程序嵌入到HTML文檔中去執行,執行效率比完全生成htmL標記的CGI要高許多;PHP具有非常強大的功能,所有的CGI的功能PHP都能實現

3、 PHP支持幾乎所有流行的資料庫以及操作系統。

4、最重要的是PHP可以用C、C++進行程序的擴展!

語言特點:

開源免費

PHP是一個受眾大並且擁有眾多開發者的開源軟體項目,Linux + Nginx + Mysql + PHP是它的經典安裝部署方式,相關的軟體全部都是開源免費的,所以使用PHP可以節約大量的正版授權費用。不過PHP作為一個開源軟體,它缺乏大型科技公司的支持背景,網路上對它的唱衰也是經久不衰,不過它的持續迭代和性能持續增強的現實卻是鼓舞人心的,PHP社區用實際行動給予各種質疑強有力的回擊。

快捷高效

PHP的內核是C語言編寫的基礎好效率高,可以用C語言開發高性能的擴展組件;PHP的核心包含了數量超過1000的內置函數,功能應有盡有很全面,開箱即用程序代碼簡潔; PHP數組支持動態擴容,支持以數字、字元串或者混合鍵名的關聯數組,能大幅提高開發效率; PHP是一門弱類型語言,程序編譯通過率高,相對其他強類型語言開發效率快;PHP天然熱部署,在php-fpm運行模式下代碼文件覆蓋即完成熱部署;PHP經過20多年的發展,在互聯網上可以搜到海量的參考資料供參考學習。

性能提升

PHP版本越高它的整體性能越高,根據官方介紹,PHP7.0.0 對比PHP5.6性能就提升了2倍,PHP7.4已經比PHP7.0快了約30%,PHP8.0在性能上又相對PHP7.4大約改進了10%。PHP 8.0 引入了 JIT編譯器特性,同時加入多種新的語言功能,例如命名參數、聯合類型、註解、Constructor Property Promotion、match 表達式、nullsafe 運算符以及對類型系統、錯誤處理和一致性的改進。PHP擁有自己的核心開發團隊,保持5年發布一個大版本、1個月發布2個小版本的頻率,最新的版本是PHP8.08 。

跨平台

每個平台都有對應的php解釋器版本,指針對不同平台均編譯出目標平台的二進制碼(PHP解釋器),php開發的程序可以不經修改運行在windows、linux、unix等多個操作系統上。

常駐內存

php-cli模式下可以實現程序常駐內存,各種變數和資料庫連接都能長久保存在內存實現資源復用,比較常用的做法是結合swoole 組件編寫cli框架。

頁面生命周期

在php-fpm模式下,所有的變數都是頁面級的,無論是全局變數還是類的靜態成員,都會在頁面執行完畢後被清空,對程序員水平要求低,佔用內存非常少,特別適合中小型系統的開發。

運行機制:

PHP常見的運行模式有2種,分別是php-fpm 和php-cli 。當PHP 選擇運行在php-fpm模式下,所有的變數都是頁面級的,無論是全局變數還是類的靜態成員,都會在頁面執行完畢後被清空。運行在php-cli模式下可以實現程序常駐內存,各種變數和資料庫連接都能長久保存在內存 實現資源復用,性能可以得到很大的提升,php-cli開發比較復雜能但是能夠獲取更高的性能,對開發者的要求比較高需要比較高的開發水平,比較常用的模式是結合swoole 組件編寫cli框架,各種變數能保存在跨進程的高性能共享內存 Table ,可以開發出支持熱啟動的php-cli可靠各類應用系統。

php-fpm在PHP 5.3.3 版本成為了官方正式組件(2010-07-22),它提供了穩定可靠的進程管理服務,進程不足時候可以智能擴充數量,閑置時候可以自動回收銷毀多餘的進程,同時它對程序的容錯能力很強大運行非常穩定,可以應付企業級的開發需求。php-fpm友好的完成了使用HTTP/HTTPS等TCP/IP互聯網協議下進行的用戶的輸入輸出,頁面級生命周期各種資源用完即釋放,不存在內存泄漏的問題。php-fpm也提供有一些常駐內存的技術支持,例如PHP 7.4引入的opcache.preload也能實現局部的PHP類和函數的常駐內存,不過這個方法不夠靈活,和伺服器配置捆綁的太死了。

php-cli因為能實現各類資源的常駐內存,所以可以資源復用,更高效完成多進程編程和非同步編程,可以開發出負載能力更高的應用系統。但是相對php-fpm的簡單編程開發,開發者要注意很多的事項和需要做很多附加的控制器開發,否則就無法實現期待中的高性能。

首先開發者需要去實現可靠的進程管理服務,保證系統進程遇到各類錯誤退出運行後能夠自動創建新的進程,只有這樣才能保證後續的服務請求有足夠空閑進程可分配。每個業務代碼段都要做異常處理,讓進程遇到非致命錯誤時候不會退出,因為進程重啟意味程序和各類資源需要再次載入,這個過程性能消耗不小,所以只有進程穩定運行了常駐內存才有意義。

其次因為常駐內存,編寫的新的程序必須重啟服務才能生效,這一點習慣了fpm模式的開發者會感到比較陌生。另外開發者需要手工釋放內存,否則系統長時間運行後會出現內存泄露。同時在cli模式下,我們不能像fpm里直接用 $_SERVER、$_POST、$_GET、$_COOKI和$_FILES 進行編程工作,需要自己去解析各種互聯網通訊協議完成用戶的輸入輸出。要實現多進程編程利用多核CPU計算,還有學習使用pcntl和posix編程,這里涉及到了非同步編程邏輯,這塊難度還是比較大的。比較常用的模式是結合swoole 組件編寫cli框架。

PHP是一個活躍的社區開發語言,有專業的核心開發團隊在持續不斷的迭代,最近一個版本就是PHP 8.0.8 引入了很多的新特性。

語言參考:

內置函數

PHP 有很多標準的函數和結構。還有一些函數需要和特定的擴展模塊一起編譯,否則在使用它們的時候就會得到一個致命的「未定義函數」錯誤。例如,要使用 image 函數中的 imagecreatetrue,需要在編譯 PHP 的時候加上 GD 的支持。或者要使用 mysqli_connect函數,就需要在編譯 PHP 的時候加上 MySQLi 支持。有很多核心函數已包含在每個版本的 PHP 中如字元串和變數函數。調用 phpinfo或者 get_loaded_extensions可以得知 PHP 載入了那些擴展庫。同時還應該注意,很多擴展庫默認就是有效的。

靜態網站與動態網站的區別

靜態網站:web1.0 時代

動態網站:web2.0 時代

靜態網站特點:

1、網頁內容一經發布到網站伺服器,無論是否有用戶訪問,每個靜態頁面的內容都是保存在網站伺服器上的。也就是說,靜態網頁是實實在在保存在伺服器上的文件,每個網頁都是一個獨立的文件。

2、靜態網頁的內容相對穩定,因此容易被搜索引擎檢索。

3、 靜態網頁沒有資料庫的支持,在網站製作和維護方面工作量較大,因此當網站信息量很大時完全依靠靜態網頁製作方式比較困難。

4、靜態網頁的交互性較差,在功能方面有較大的限制。


閱讀全文

與phpcli是什麼相關的資料

熱點內容
xshell連接linux命令 瀏覽:5
把多個文件夾的內容合並在一起 瀏覽:481
基於單片機的澆花系統設計ppt 瀏覽:683
卷積碼編解碼及糾錯性能驗證實驗 瀏覽:352
請在刪除驅動器之前暫停加密什麼意思 瀏覽:785
光催化pdf 瀏覽:98
java字元串包含某字元 瀏覽:526
ssm身份認證源碼 瀏覽:466
預排序遍歷樹演算法 瀏覽:671
加密裝置如何打開ping功能 瀏覽:478
python下載372 瀏覽:901
u盤子文件夾隱藏 瀏覽:296
本地誤刪svn文件夾 瀏覽:685
海康威視python通道名 瀏覽:241
如何用app覆蓋全部曲庫 瀏覽:602
變異布林源碼 瀏覽:686
表格加密設置列印區域 瀏覽:437
卡耐基pdf下載 瀏覽:924
現在最流行的單片機 瀏覽:89
機頂盒刷機源碼 瀏覽:986