# php-cli
*****
在前面的簡單介紹中,我們已經了解了有 php-cli 這個模式,現在我們繼續詳細了解下 php-cli 和 傳統 web 模式不一樣的地方吧。
<br />
## 超時時間
在 php-cli 中,是沒有超時時間的,也無法通過 set\_time\_limit 設置超時時間,例如:
```php
<?php
set_time_limit(30);
while (1) {
echo 1;
sleep(1);
}
```
這段代碼,在常規 web 下運行,只要到30秒就會報 Fatal error: Maximum execution time of 30 seconds exceeded in ...... 這樣的錯誤。
而在 php-cli 中,這段代碼將會一直執行,一直輸出到1到控制臺中。
<br />
## buffer緩沖
在常規 web 模式中,echo、var_dump、phpinfo等輸出語句/函數,默認情況下是先進入 php 緩沖區,等緩沖區到達一定數量,才開始傳輸給 web 服務器的,但是在 php-cli 模式中,默認是關閉 buffer,直接輸出,例如以下代碼:
```php
<?php
/**
* php-cli下默認關閉buffer,由于web訪問測試較麻煩,
* 該段代碼只為了查看以及測試緩沖區的作用,在web模式下,默認開啟,無需手動開啟,可自行配置
*/
ob_start(); // 開啟buffer緩沖區
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 緩沖系列函數可自行搜索了解
buffer 緩沖詳細內容可查看:
[關于php的buffer緩沖區](http://blog.huanghui.xyz/2018/12/10/Swoole/Swoole%E5%9F%BA%E7%A1%80/%E5%85%B3%E4%BA%8Ephp%E7%9A%84buffer%E7%BC%93%E5%86%B2%E5%8C%BA/)
<br />
## 標準輸入/輸出/錯誤
執行一個命令行都存在3個標準文件(linux 一切皆文件)
* 標準輸入(stdin,通常對應終端的鍵盤,進程可通過該文件獲取鍵盤輸入的數據)
* 標準輸出(stdout,對應終端的屏幕,進程通過寫入數據到該文件,將數據顯示到到屏幕)
* 標準錯誤(stderr,對應終端的屏幕,進程通過寫入數據到該文件,將錯誤信息顯示到屏幕)
在 php-cli 命令下,可通過以上3個文件句柄 進行一系列的邏輯操作,比如:
啟動 php 文件,監聽標準輸入,獲取到輸入的網址,php 再進行網址的數據請求/接收 等等操作,而在常規 web 模式,標準輸出會被攔截。
> echo var_dump等輸出函數其實就是 stdout,但是在常規 web 訪問下被重定向到了 web 服務器,然后由 web 服務器輸出
了解詳細內容可查看:[PHP的各種I/O流以及用法](http://blog.huanghui.xyz/2018/12/10/Swoole/Swoole%E5%9F%BA%E7%A1%80/php%E7%9A%84%E5%90%84%E7%A7%8DIO%E6%B5%81%E4%BB%A5%E5%8F%8A%E7%94%A8%E6%B3%95/)
<br />
## php-cli 專屬擴展
php 有些擴展在常規 web 下運行時沒用/沒有意義的。例如:
* swoole擴展
* socket擴展
* 等等
- 引言
- Introduction
- 運行模式
- php-fpm
- php-cli
- 基礎介紹
- 網絡協議
- ip
- tcp
- tcp
- http
- webSocket
- udp
- port端口
- 會話管理
- cookie
- session
- api/token
- linux基礎
- lnmp安裝
- 命令
- 進程管理
- 擴展安裝
- 端口監控
- 防火墻說明
- php7.0
- 部分新特性
- php回調/閉包
- 回調事件
- 閉包/匿名函數
- php多進程
- 多進程開啟
- 進程通信
- 進程信號
- 僵尸進程
- 孤兒進程
- 守護進程
- 同步/異步
- 阻塞/非阻塞
- 協程
- Swoole
- 初始Swoole
- 運行機制
- 生命周期
- composer使用
- EasySwoole
- 設計理念
- 組件說明
- 運行過程
- demo
- 提問的藝術