如何在 CentOS 上为 php file_get_contents 配置系统范围的代理?

如何在 CentOS 上为 php file_get_contents 配置系统范围的代理?

我想让 php file_get_content 函数通过系统范围的代理连接到网络。我尝试在 /etc/environment 中添加以下几行:

http_proxy=http://localhost:3128/
HTTP_PROXY=http://localhost:3128/
https_proxy=http://localhost:3128/
HTTPS_PROXY=http://localhost:3128/

但它不适用于 file_get_content,尽管它适用于 wget。我还尝试将以下几行添加到 /etc/profile:

PROXY_URL="http://localhost:3128/"

export http_proxy="$PROXY_URL"
export https_proxy="$PROXY_URL"
export ftp_proxy="$PROXY_URL"

# For curl
export HTTP_PROXY="$PROXY_URL"
export HTTPS_PROXY="$PROXY_URL"
export FTP_PROXY="$PROXY_URL"

再次,它不起作用。我创建了以下 test.php:

<?php
$aContext = array(
    'http' => array(
        'proxy'           => 'tcp://localhost:3128',
        'request_fulluri' => true,
    ),
);
$cxContext = stream_context_create($aContext);

$sFile = file_get_contents("https://www.google.com", False, $cxContext);

echo $sFile;

这个脚本确实有效。但由于我无法修改包含 file_get_contents 的所有源代码,因此我需要一个系统范围的代理。我该怎么做?

答案1

file_get_contents需要手动设置上下文,如图所示,或者通过stream_context_set_default代理设置调用。

但是,许多 PHP 应用程序使用libcurl,它利用了常见的代理环境变量。要设置它们,请在中创建一个插件/etc/php/7.4/fpm/pool.d/www-env.conf(对于 Debian 上的 PHP 7.4,请针对 CentOS 进行调整):

env[ALL_PROXY]=http://localhost:3128/
env[NO_PROXY]=*.excluded.tld

相关内容