我想让 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