它在使用Xampp的localhost上完美运行,但是当我在我的服务器(host-ed.net)上尝试它时,fopen无法打开任何URL,它只适用于没有http的文件。
<?php
$file="http://www.google.es";
$gestor = fopen($file, "r") or die ("Nothing");
?>
在我的服务器中使用此代码显示Nothing。可以是php.ini上的任何内容吗?
编辑:在php.ini中:allow_url_fopen = On
编辑:它已经解决了。我的服务器已将其禁用,但现在已启用。谢谢你的回答。答案 0 :(得分:11)
fopen无法打开任何网址
检查allow_url_fopen
php.ini setting:
var_dump(ini_get('allow_url_fopen'));
这可能是假的。您需要与您的网络托管服务商联系,或尝试其他方法。 Mabye CURL已启用?
您还应该检查error_reporting
和display_errors
值。 PHP应该大声抱怨无法打开URL。在开发代码时,你会希望将它们都完全转向,这样你就可以更容易地理解出错了。
答案 1 :(得分:3)
在PHP.ini中搜索allow-url-fopen
。
http://www.php.net/manual/en/filesystem.configuration.php#ini.allow-url-fopen
答案 2 :(得分:2)
使用fopen
打开网址的权限由php.ini
设置allow_url_fopen
控制。您可以使用phpinfo()
查看当前设置,该设置将转储包含所有服务器设置的html文档。
答案 3 :(得分:0)
如http://php.net/manual/en/function.fopen.php所述,
如果filename的格式为“scheme:// ...”,则假定它是一个URL,PHP将搜索该方案的协议处理程序(也称为包装程序)。如果没有注册该协议的包装器,PHP将发出通知,帮助您跟踪脚本中的潜在问题,然后继续,就像filename指定常规文件一样。
因此我假设没有为url注册包装,并且php将其视为常规文件名,但不存在。
答案 4 :(得分:0)
你有免费的托管帐户吗?大多数托管服务限制免费帐户的传出连接,以防止滥用。试试这个:
$fp = fsockopen("some.alive.site", 80, $errno, $errstr, 30);
if (!$fp) {
echo "$errstr ($errno)<br />\n";
} else {
echo "Everything is OK";
fclose($fp);
}
如果您看到错误消息 - 则不允许您建立传出连接。
答案 5 :(得分:0)
如果您使用的是PHP-FPM,请检查pool.d/
中的配置文件。 PHP-FPM池可以使用php_admin_flag
,php_admin_value
,php_flag
或php_value
覆盖php设置。 (我们在Ubuntu 16 vps上遇到过这个问题)