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