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

php proc_open子进程无法请求网络

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

最近通过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 com组件,php调用.net dll,php源码保护

编写php com组件,php调用.net dll,php源码保护

开发com组件可以用c++,vc++,net,我比较熟悉net,演示用dnet(1).创建项目:启动vs2017,新建项目,选择Visual C# ->Windows桌面->类库通用windows(2). 修改Com项目:点击 项目->项目属性,再点击应用程序->程序集信息,...

PHP获取站点根目录,PHP获取应用根目录,cgi和cli都支持

PHP获取站点根目录,PHP获取应用根目录,cgi和cli都支持

重构框架的时候想要考虑支持下cli模式,于是参考了thinkphp的底层。/**  * 获取应用根目录  * @return string  */ public static function getRootP...

php finally使用

php finally使用

<?php /**  * @throws Exception  */ function curl() {     throw  new \Exception('err...

php mcrypt扩展被废弃的解决方案

php mcrypt扩展被废弃的解决方案

使用openssl扩展对应替换mcrypt的函数,(比较麻烦,但是openssl是未来趋势)在新版php中编译mcrypt扩展使用一个纯php代码实现的mcrypt扩展库,git地址为https://github.com/phpseclib/mcrypt_compat,每个mcrypt的方法都已经实...

php迭代器返回值,php yield getReturn

php迭代器返回值,php yield getReturn

php生成器的方法getReturn获取生成器迭代完成后的返回值,当生成器迭代完成会将生成器的返回值返回,因此如果迭代器未进行迭代是获取不到值的,如果你没有return值则返回null,参考代码:<?php function G1() {    &nbs...

php中0和字符串比较时注意的问题

php中0和字符串比较时注意的问题

在正式介绍前先抛出一段代码:<?php //输入的密码 $password = empty($_POST['password']) ? 0 : $_POST['password']; //设置的密码...