亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > PHP > 正文

PHP基礎 CLI模式開發不需要任何一種Web服務器的詳細介紹

2020-03-22 18:30:00
字體:
來源:轉載
供稿:網友
轉載請注明來源:PHP基礎: CLI模式開發不需要任何一種Web服務器

PHP CLI模式開發不需要任何一種Web服務器(包括Apache或MS IIS等),這樣,CLI可以運行在各種場合。
有兩種方法可以運行PHP CLI腳本。

第一種方法是使用php -f /path/to/yourfile.php。調用PHP CLI解釋器,并給腳本傳遞參數。這種方法首先要設置php解釋器的路徑,Windows平臺在運行CLI之前,需設置類似path c:/php的命令,也失去了CLI腳本第一行的意義,因此不建議使用該方法。

第二種方法是首先運行chmod+x <要運行的腳本文件名>(UNIX/Linux環境),將該PHP文件置為可執行權限,然后在CLI腳本頭部第一行加入聲明(類似于#! /usr/bin/php或PHP CLI解釋器位置),接著在命令行直接執行。這是CLI首選方法,建議采用。

下面我們來看看怎樣編寫PHP CLI腳本。

1.編寫第一個CLI腳本
首先創建一個名為myfile.php的PHP腳本,用于運行PHP CLI。該腳本很簡單,僅顯示“你好 PHP CLI!”。該腳本代碼如下:

#!/usr/local/bin/php –q <?php//Windows平臺上,上行應該為:#!C:/php/php.exe -qecho "你好 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 –qecho "測試獲取參數:/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測試獲取參數:4AlwaysToBeBest

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

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

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

3.處理I/O通道

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

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

我們可以把一個腳本的輸出重定向到一個文件:

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 –qOutput #1.<?phpecho "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 <?phpset_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命令。

以上就是PHP基礎 CLI模式開發不需要任何一種Web服務器的詳細介紹的內容,更多相關內容請關注PHP (www.49028c.com)!

鄭重聲明:本文版權歸原作者所有,轉載文章僅為傳播更多信息之目的,如作者信息標記有誤,請第一時間聯系我們修改或刪除,多謝。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
高清欧美性猛交xxxx黑人猛交| 91在线观看欧美日韩| 亚洲美女视频网站| 欧美一级大片在线观看| 国产精品久久久久久久久免费| 中文字幕亚洲精品| 欧美日韩在线第一页| 亚洲中国色老太| 国产精品久久久久久久久久三级| 国产美女精品视频免费观看| 国产99在线|中文| 秋霞成人午夜鲁丝一区二区三区| 亚洲淫片在线视频| 久久久久女教师免费一区| 亚洲欧洲自拍偷拍| 国产成人精品国内自产拍免费看| 一区二区三区国产视频| 亚洲美女性视频| 国产欧美日韩中文| 青青草成人在线| 国产精品极品美女粉嫩高清在线| 久久国产精品久久久| 亚洲电影免费观看高清完整版在线观看| 日韩av在线高清| 国产精品久久久久久av| 精品一区二区三区四区在线| 成人一区二区电影| 亚洲黄色av女优在线观看| 国产精品极品在线| 91精品国产综合久久久久久久久| 国产在线精品一区免费香蕉| 国产一区私人高清影院| 国内成人精品视频| 欧美色欧美亚洲高清在线视频| 欧美高清第一页| 成人国产亚洲精品a区天堂华泰| 国产综合在线视频| 国产精品99久久久久久白浆小说| 精品无码久久久久久国产| 久久久久久91| 91精品国产综合久久香蕉922| 最近2019中文字幕在线高清| 亚洲午夜女主播在线直播| 精品福利视频导航| 欧美日韩一区二区免费在线观看| 精品丝袜一区二区三区| 色婷婷成人综合| 欧美床上激情在线观看| 川上优av一区二区线观看| 一本色道久久88综合日韩精品| 成人在线激情视频| 免费av一区二区| 国产精品扒开腿做爽爽爽男男| 国产精品白嫩美女在线观看| 91精品视频大全| 欧美激情在线一区| 国产精品最新在线观看| 日韩网站在线观看| 国产精品久久久久久久久久99| 欧美视频专区一二在线观看| 91九色蝌蚪国产| 成人午夜激情网| 国产综合在线视频| 日日骚av一区| 久久亚洲春色中文字幕| 欧美视频国产精品| 668精品在线视频| 国产日韩欧美黄色| 国产精品自拍网| 日韩视频中文字幕| 亚洲美女av网站| 国产成人久久久精品一区| 日韩视频免费中文字幕| 在线不卡国产精品| 成人有码在线播放| 18一19gay欧美视频网站| 亚洲精品国产品国语在线| 精品久久久久久久久中文字幕| 国产xxx69麻豆国语对白| 欧美专区日韩视频| 久久久精品久久久久| 欧美激情在线有限公司| 国产99久久久欧美黑人| 国产精品视频专区| 欧美整片在线观看| 狠狠久久五月精品中文字幕| 国产亚洲一区二区精品| 亚洲性视频网址| 日本高清+成人网在线观看| 国产成人精品999| 久久av中文字幕| 亚洲第一色在线| 国产精品无av码在线观看| 热久久这里只有| 欧美日韩一区二区三区在线免费观看| 欧美精品www在线观看| 欧美福利视频在线| 国产精品∨欧美精品v日韩精品| 一区二区三区 在线观看视| 国产主播精品在线| 97国产精品人人爽人人做| 国产日韩欧美一二三区| 2023亚洲男人天堂| 免费99精品国产自在在线| 欧美在线一级va免费观看| 久久久久九九九九| 国产精品夜色7777狼人| 欧美韩日一区二区| 91国偷自产一区二区三区的观看方式| 日本精品一区二区三区在线| 有码中文亚洲精品| 韩国美女主播一区| 海角国产乱辈乱精品视频| 国产综合在线看| 欧美国产日韩xxxxx| 午夜精品视频在线| 不卡在线观看电视剧完整版| 一区二区三区四区在线观看视频| 国产精品免费一区豆花| 国产精品久久久精品| 久久夜色精品国产| 日韩日本欧美亚洲| 91精品视频免费观看| 国产精品老女人精品视频| 日本高清视频精品| 国产精品大陆在线观看| 久久久久久久久久久久久久久久久久av| 精品中文字幕久久久久久| 亚洲精品在线91| 国产精品高精视频免费| 成人自拍性视频| 美女久久久久久久| 91黑丝在线观看| 日韩视频免费观看| 久久99久久久久久久噜噜| 色综合色综合网色综合| 精品久久久久久久久久国产| 欧美日韩午夜视频在线观看| 中文字幕久精品免费视频| 中文字幕日韩在线视频| 日韩高清a**址| 国产精品免费网站| 久久亚洲精品成人| 亚洲精品99久久久久中文字幕| 亚洲免费人成在线视频观看| 亚洲美女性生活视频| 成人av在线亚洲| 狠狠色狠色综合曰曰| 91久久久久久久一区二区| 日韩在线视频中文字幕| 精品久久久久久久久久ntr影视| 日韩在线免费观看视频| 中文字幕av一区二区三区谷原希美| 国产69久久精品成人| 国模精品视频一区二区三区| 国产免费一区二区三区香蕉精| 91系列在线播放| 午夜欧美大片免费观看| 九九精品在线播放| 日韩精品在线私人| 欧美成人在线影院| 亚洲国产精久久久久久| 久久久久久久久爱| 亚洲人成伊人成综合网久久久|