多应用+插件架构,代码干净,二开方便,首家独创一键云编译技术,文档视频完善,免费商用码云13.8K 广告
# 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扩展 * 等等