跳转到主内容
websoft网络软件专家 - 深耕网络技术,打造实用软件!

php如何从fpm-fcgi切换运行模式到cli

在使用一个 php 爬虫的时候提示一定要用cli环境 我查看了当前php版本信息如下: 我打印
PHP_SAPI
显示
fpm-fcgi
PHP 8.5.5 PHP 8.5.5 是 PHP 8.5 分支的维护更新版本。该版本延续了“小步快跑”的迭代逻辑,通过深度错误修复、底层性能微调以及安全加固,旨在为开发者提供一个更健壮、更高效的运行环境。该版本严格遵守语义化版本规范,不包含破坏性变更。 下载 如何才能变成
cli
服务器环境是linux+nginx 立即学习 “ PHP免费学习笔记(深入) ”; 补充:我能不能理解为cli一定是要命令行模式? 刚刚在命令行里测试了
PHP_SAPI
输出了
cli
问:能不能http模拟调用实现cli 回复内容: 在使用一个php爬虫的时候提示一定要用cli环境 我查看了当前php版本信息如下: 我打印
PHP_SAPI
显示
fpm-fcgi
如何才能变成
cli
服务器环境是linux+nginx 立即学习 “ PHP免费学习笔记(深入) ”; 补充:我能不能理解为cli一定是要命令行模式? 刚刚在命令行里测试了
PHP_SAPI
输出了
cli
问:能不能http模拟调用实现cli CLI = command-line interface = 命令行界面 你可以在php-fpm里用popen或proc_open异步调用php-cli执行一个php脚本,比如:
例子1(popen): array('pipe','r'), //stdin (用fwrite写入数据给管道) 1 => array('pipe','w'), //stdout(用stream_get_contents获取管道输出) 2 => array('pipe','w'), //stderr(用stream_get_contents获取管道输出) //2 => array('file','/tmp/err.txt','a') //stderr(写入到文件) ), $pipes, //管道(stdin/stdout/stderr) '/tmp', //当前PHP进程的工作目录 array('foo' => 'bar') //php.ini 配置 variables_order = "EGPCS" 其中E表示$_ENV,否则$_ENV输出为空 ); //var_dump($pipes); //resource of type (stream) if(is_resource($proc)) { //stdin $stdin = serialize(array('time' => time())); fwrite($pipes[0], $stdin); //把参数传给脚本task.php fclose($pipes[0]); //fclose关闭管道后proc_close才能退出子进程,否则会发生死锁 register_shutdown_function(function() use($pipes, $proc) { //事件驱动(脚本结束事件),异步回调 //stdout $stdout = stream_get_contents($pipes[1]); fclose($pipes[1]); //stderr $stderr = stream_get_contents($pipes[2]); fclose($pipes[2]); //exit code (返回进程的终止状态码,如果发生错则返回-1) $status = proc_close($proc); $data = array( 'stdout' => $stdout, 'stderr' => $stderr, 'status' => $status, ); var_export($data); //echo json_encode($data); }); } } foo(); //输出: array ( 'stdout' => 'a:1:{s:4:"time";s:19:"2016-09-11 21:26:29";}', 'stderr' => '', 'status' => 0, )
cli就是命令行,linux下就是
php
这个命令。php执行命令行有很多方式,可以用
exec
等函数同步执行,也有方法异步执行,去详细地看看文档吧 用终端直接运行脚本就行

相关文章