2012-01-27 54 views
6

它可以在Xampp的localhost上完美工作,但是当我在我的服务器(host-ed.net)上尝试它时,fopen无法打开任何URL,它只适用于没有http的文件。fopen在我的服务器上不能正常工作

<?php 
$file="http://www.google.es"; 
$gestor = fopen($file, "r") or die ("Nothing"); 
?> 

在我的服务器上用这段代码显示Nothing。可以是任何在php.ini?

编辑:在php.ini:allow_url_fopen选项=在

编辑:它解决了。我的服务器禁用了它,但现在它已启用。感谢您的答案。

回答

8

的fopen无法打开任何URL

检查allow_url_fopen php.ini setting的价值:

var_dump(ini_get('allow_url_fopen')); 

这也可能是假的。您需要与您的虚拟主机通话,或尝试其他方法。 Mabye CURL已启用?

您还应该检查您的error_reportingdisplay_errors值。 PHP应该大声抱怨无法打开该URL。在开发代码的时候,你会想把它们都变成完整的,所以你可以更容易地理解错误。

+0

对不起,我忘了写它......没关系。 allow_url_fopen = On – Fischer 2012-01-27 19:15:02

+0

在这种情况下,您需要检查错误报告级别并确保显示错误。然后,PHP可以告诉你实际发生了什么问题。 – Charles 2012-01-27 19:16:04

2

用于与fopen打开URL许可由所述php.ini设置allow_url_fopen控制。您可以使用phpinfo()查看您当前的设置,它将转储包含所有服务器设置的html文档。

0

由于http://php.net/manual/en/function.fopen.php状态,

如果文件名的形式是“方案:// ......”,它被认为是一个URL,PHP将搜索协议处理器(也被称为包装)的计划。如果没有注册该协议的包装器,PHP将发出通知帮助您跟踪脚本中的潜在问题,然后像文件名指定常规文件一样继续。

因此,我会假设没有注册包装的url,并且php将它当作普通文件名来处理,该文件名不存在。

0

尝试卷曲,它会工作,如果它安装在该Web服务器上。

0

你有免费的托管帐户?大多数托管服务限制免费帐户的传出连接以防止滥用。试试这个:

$fp = fsockopen("some.alive.site", 80, $errno, $errstr, 30); 
if (!$fp) { 
    echo "$errstr ($errno)<br />\n"; 
} else { 
    echo "Everything is OK"; 
    fclose($fp); 
} 

如果你会看到一个错误消息 - 你不允许进行传出连接。

0

如果您正在使用PHP-FPM,还请检查pool.d/中的配置文件。PHP-FPM池可以通过使用php_admin_flagphp_admin_valuephp_flagphp_value重写PHP设置。 (我们在Ubuntu 16 vps上遇到过这个问题)

相关问题