php-cli
在前面的簡(jiǎn)單介紹中,我們已經(jīng)了解了有php-cli這個(gè)模式,現(xiàn)在我們繼續(xù)詳細(xì)了解下php-cli和傳統(tǒng)web模式不一樣的地方吧
超時(shí)時(shí)間
在php-cli中,默認(rèn)超時(shí)時(shí)間為永久不超時(shí),但是可以通過(guò)set_time_limit
設(shè)置超時(shí)時(shí)間.
<?php
set_time_limit(1);
while (1){
}
buffer緩沖
在常規(guī)web模式中,echo,var_dump,phpinfo等輸出語(yǔ)句/函數(shù),默認(rèn)情況是先進(jìn)入php緩沖區(qū),等緩沖區(qū)到達(dá)一定數(shù)量,才開(kāi)始傳輸給web服務(wù)器的,但是在php-cli模式中,默認(rèn)關(guān)閉buffer,直接輸出,例如以下代碼:
<?php
ob_start();//開(kāi)啟buffer緩沖區(qū) php-cli下默認(rèn)關(guān)閉buffer,由于web訪問(wèn)測(cè)試較麻煩,該段代碼只為了查看以及測(cè)試緩沖區(qū)的作用,在web模式下,默認(rèn)開(kāi)啟,無(wú)需手動(dòng)開(kāi)啟,可自行配置
for($i=0;$i<1000;$i++){
echo $i;
sleep(1);
if($i%10==0){
//當(dāng)i為10的倍數(shù)時(shí),將直接結(jié)束并輸出緩沖區(qū)的數(shù)據(jù),然后再次開(kāi)啟緩沖區(qū)
ob_end_flush();
ob_start();
}
}
也可通過(guò)ob_get_contents函數(shù)獲取緩沖區(qū)內(nèi)容,ob緩沖系列函數(shù)可自行搜索了解
標(biāo)準(zhǔn)輸入/輸出/錯(cuò)誤
執(zhí)行一個(gè)命令行都存在3個(gè)標(biāo)準(zhǔn)文件(linux一切皆文件):
- 標(biāo)準(zhǔn)輸入 (stdin,通常對(duì)應(yīng)終端的鍵盤(pán),進(jìn)程可通過(guò)該文件獲取鍵盤(pán)輸入的數(shù)據(jù))
- 標(biāo)準(zhǔn)輸出 (stdout,對(duì)應(yīng)終端的屏幕,進(jìn)程通過(guò)寫(xiě)入數(shù)據(jù)到該文件,將數(shù)據(jù)顯示到屏幕)
- 標(biāo)準(zhǔn)錯(cuò)誤 (stderr,對(duì)應(yīng)終端的屏幕,進(jìn)程通過(guò)寫(xiě)入數(shù)據(jù)到該文件,將錯(cuò)誤信息顯示到屏幕)
在php-cli命令行下,可通過(guò)以上3個(gè)文件句柄進(jìn)行一系列的邏輯操作,比如:
啟動(dòng)php文件,監(jiān)聽(tīng)標(biāo)準(zhǔn)輸入,獲取到輸入的網(wǎng)址,php再進(jìn)行網(wǎng)址的數(shù)據(jù)請(qǐng)求/接收 等等操作 而在常規(guī)web模式下,標(biāo)準(zhǔn)輸出會(huì)被攔截echo var_dump等輸出函數(shù)其實(shí)就是stdout,但是在常規(guī)web訪問(wèn)下被重定向到了web服務(wù)器,然后由web服務(wù)器輸出
php-cli 專(zhuān)屬擴(kuò)展
php有些擴(kuò)展在常規(guī)web下運(yùn)行時(shí)沒(méi)用/沒(méi)有意義的 例如:
- swoole擴(kuò)展
- socket擴(kuò)展
- 等