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

php proc_open子进程无法请求网络

高老师5年前 (2021-02-04)PHP1181

最近通过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调用 java webservice接口

php调用 java webservice接口

php调用Webservice基本语法如下:$url ='xxxxxxx.cn'  //链接服务器端 $client = new SoapClient($url);通过以上语法已经连接到webservice,也可将wsdl在本地使用,...

 php header属性,php header 详解,php header的作用

php header属性,php header 详解,php header的作用

header() 函数向客户端发送原始的 HTTP 报头。(官方解释)通俗的讲header函数将参数中的字符串作为服务端的响应头来返回给客户端。什么是服务端的响应头?打开谷歌浏览器看看network中的请求response header信息即可。更多的参数百度response header即可浏览器...

 php mysql 行锁,php mysql 行级锁,php mysql 行锁定

php mysql 行锁,php mysql 行级锁,php mysql 行锁定

应用场景:PHP模拟购买,商品数量大于0才能购买常见代码:<?php //连接数据库 $con=mysqli_connect("localhost","ihuohuo","927464cy","ihuohuo");...

 php监听事件,php触发事件

php监听事件,php触发事件

逛公众号文章看到文章"php实现事件监听与触发的方法,你用过吗?",我就好奇了,php又不是asp.net的webform,哪里来的服务端事件监听。于是学习了一波。先看下监听类:class Event {     /** &nbs...

cookie跨域,cookie p3p跨域

cookie跨域,cookie p3p跨域

最近在公司开发一个新的项目假设项目域名是a.com,需要接入b.com的单点登陆系统。(1).首先我们会在a.com的登陆页面用iframe引入b.com来显示登陆界面,实际上登陆验证操作都是在b.com上面(2).当b.com验证通过,会在前端ajax请求a.com的回调地址,这个回调地址目的就是...

php异步信号处理

php异步信号处理

php7.1引入了PHP异步信号处理函数pcntl_async_signals() 来处理阻塞问题。在php7之前信号处理方式有2种,第一种是基于ticks来每执行一行代码来触发执行信号监听,第二种是直接while(true){  //监听信号 }第一种方式如果某行的代码阻塞时间较长会影响...