当前位置:首页 > PHP > 正文内容

php proc_open子进程无法请求网络

高老师6年前 (2021-02-04)PHP1299

最近通过proc_open创建子进程,为了区分进程,特别在创建进程时添加了进程环境变量来标识,但是发现子进程无法正常请求网络。

模拟进行复现

a.php主进程:

<?php
$cmd = "C:/phpEnv/php/php-7.0/php.exe D:/wwwroot/learn/b.php";
$desc = [];
$env = [
    'process_name' => 1
];
proc_open($cmd, $desc, $pipes, null, $env, [
    'bypass_shell ' => true
]);
sleep(100);

b.php子进程

<?php
while (true)
{
    $res = file_get_contents('https://blog.20230611.cn/?id=1756');
    var_dump($res);
}

输出:Warning: file_get_contents(): php_network_getaddresses: getaddrinfo failed: ֪  in D:\wwwroot\learn\b.php on line 5

经过排查是由于请求网络时依赖于进程中的环境变量,而我传递参数时没有保留原进程的环境变量。正确的方法是取得当前主进程的环境变量$_ENV进行追加传递到子进程,同时修改php.ini的variables_order 配置项,否则无法获取。只是记录下问题,事实上因为要靠php.ini修改配置,最终未采用。

扫描二维码推送至手机访问。

版权声明:本文由高久峰个人博客发布,如需转载请注明出处。

本文链接:https://blog.20230611.cn/post/195.html

分享给朋友:

“php proc_open子进程无法请求网络” 的相关文章

 php 判断是否post,php判断是否post提交,php 判断是否为post,php 判断get 还是post

php 判断是否post,php判断是否post提交,php 判断是否为post,php 判断get 还是post

if($_SERVER['REQUEST_METHOD'] == 'POST') { echo('This is  post '); } elseif ($_SERVER['...

抛弃salt,使用password_hash()加密

抛弃salt,使用password_hash()加密

md5/sha1+salt方式是目前各大cms常用的加密方式,虽然salt安全,但是各大md5网站也在研究这个方向,那么我们应该选择password_hash动态hash来助力,一种密码有多种hash结果.看代码模拟登陆.<?php //01.注册 $user ='zhang...

PHP异常处理,PHP自定义错误,PHP记录错误日志

PHP异常处理,PHP自定义错误,PHP记录错误日志

面试中PHP面试官会问调用一个不存在的方法,如何知道是哪个文件哪行调用的?假设方法是getWorkLoad()回答1:开启PHP错误输出,PHP会输出Fatal error: Call to undefined function getWorkLoad() in D:\wwwroot\thinkpa...

【二】PHP多进程学习-进程信号管理

【二】PHP多进程学习-进程信号管理

(1).学习目标:    了解常见信号类型(百度PHP支持的信号类型),(2).相关函数学习:    (2.1).pcntl_signal函数用于设置一个信号管理器接收进程信号,参数1:信号类型,参数2:回调函数,用于在接收到参数1类型的信...

pcntl_signal(): Error assigning signal

pcntl_signal(): Error assigning signal

当我想在一个进程中监听kill 和 kill -9命令报了这个错误。//监听kill pcntl_signal(SIGTERM, function () {     posix_kill(0, SIGTERM); });...

tp orm事务提交未执行的教训和总结

tp orm事务提交未执行的教训和总结

最近在项目中处理一个关于商品数据重复需要删除多余的商品记录,但是删除一条商品必然要把关联的其他表商品的id和其他商品信息更换为正确的,删除一个商品记录,同时要去修改100多张表的关联商品数据,在项目中引用了tp orm 1.2版本,由于项目是php5.6版本,没法使用最新orm,在代码中每处理1个商...