3

我尝试使用以下代码通过代理使用 file_get_contents() 获取页面的源

$aContext = array(
'http' => array(
    'proxy' => 'tcp://proxy.ssn.net:8080',
    'request_fulluri' => true,
),);
$cxContext = stream_context_create($aContext);
$homepage = file_get_contents('http://www.indiaglitz.com/channels/tamil/reviews.asp', False, $cxContext);
echo $homepage;

这在我通过终端执行 php 文件时有效,但是当我使用 httpd(Apache 2)通过浏览器运行文件时我没有得到输出。

这适用于安装在 Ubuntu 中的 Apache2,但不适用于安装在 Fedora 17 中的 httpd。

哪里错了??

4

2 回答 2

1

最常见的原因是 SELinux 不允许 httpd 建立网络连接。

要解决它,您需要更改一个 SELinux 布尔值(它将在重新启动后自动保持)。您可能还想重新启动 httpd 以重置代理工作者,尽管这不是严格要求的。

setsebool -P httpd_can_network_connect 1

于 2012-10-20T15:36:06.133 回答
0

所以我看到一台服务器可以在您的 ubuntu 上运行,但不能在 fedora 服务器上运行。fedora 服务器可能在其 php 设置中关闭了选项 Allow_url_fopen (file_get_contents 使用 fopen())。 http://php.net/manual/en/filesystem.configuration.php

但!不要更改该安全设置。如果你想下载一些东西,curl 可以很好地工作而不会打开安全漏洞。

于 2012-10-19T14:42:49.597 回答