Php 为什么';你能把文件的内容整理好吗?

Php 为什么';你能把文件的内容整理好吗?,php,geocoding,file-get-contents,Php,Geocoding,File Get Contents,为什么file\u-get\u-contents对我不起作用?在下面的测试文件代码中,似乎我搜索的每个示例都列出了这个函数,但它从未执行过。这是web托管服务的问题吗?有人能在他们的服务器上测试这段代码,看看地理编码数组输出是否真的以字符串形式打印出来吗?当然,我试图将输出分配给一个变量,但是这个测试文件中没有输出 <html> <head> <title>Test File</title> <script type="tex

为什么
file\u-get\u-contents
对我不起作用?在下面的测试文件代码中,似乎我搜索的每个示例都列出了这个函数,但它从未执行过。这是web托管服务的问题吗?有人能在他们的服务器上测试这段代码,看看地理编码数组输出是否真的以字符串形式打印出来吗?当然,我试图将输出分配给一个变量,但是这个测试文件中没有输出

<html>
<head>        
<title>Test File</title>
<script type="text/javascript" src="http://maps.google.com/maps/api/js?sensor=false"> 
</script>
</head>
<body>
<?    
$adr = 'Sydney+NSW';
echo $adr;
$url = "http://maps.googleapis.com/maps/api/geocode/json?address=$adr&sensor=false";
echo '<p>'.$url.'</p>';
echo file_get_contents($url);
print '<p>'.file_get_contents($url).'</p>';
$jsonData   = file_get_contents($url);
echo $jsonData;
?>
</body>
</html>

测试文件
检查返回值。如果该值为
FALSE
,则无法读取该文件。如果该值为
NULL
,则该函数本身被禁用

要进一步了解
file\u get\u contents
操作可能出现的问题,您必须启用错误报告和错误显示以实际读取它们

# Enable Error Reporting and Display:
error_reporting(~0);
ini_set('display_errors', 1);
通过检查服务器上的INI值,可以获得有关调用失败原因的更多详细信息。直接影响
文件获取\u内容
功能的一个值是。您可以通过运行以下代码来实现这一点。您应该注意,如果它报告不允许使用fopen,那么您必须要求提供商在服务器上更改此设置,以便任何需要此功能的代码都可以使用URL

<html>
    <head>        
        <title>Test File</title>
        <script type="text/javascript" src="http://maps.google.com/maps/api/js?sensor=false">
        </script>
    </head>
    <body>
<?php

# Enable Error Reporting and Display:
error_reporting(~0);
ini_set('display_errors', 1);

$adr = 'Sydney+NSW';
echo $adr;
$url = "http://maps.googleapis.com/maps/api/geocode/json?address=$adr&sensor=false";
echo '<p>'.$url.'</p>';

$jsonData = file_get_contents($url);

print '<p>', var_dump($jsonData), '</p>';

# Output information about allow_url_fopen:
if (ini_get('allow_url_fopen') == 1) {
    echo '<p style="color: #0A0;">fopen is allowed on this host.</p>';
} else {
    echo '<p style="color: #A00;">fopen is not allowed on this host.</p>';
}


# Decide what to do based on return value:
if ($jsonData === FALSE) {
    echo "Failed to open the URL ", htmlspecialchars($url);
} elseif ($jsonData === NULL) {
    echo "Function is disabled.";
} else {
   echo $jsonData;
}

?>
    </body>
</html>

测试文件

如果所有这些都失败了,可能是由于使用了短的打开标记,
$adr
包装在
urlencode()
中。 我遇到了这个问题,这为我解决了。

//只需添加urlencode();
//JUST ADD urlencode();
$url = urlencode("http://maps.googleapis.com/maps/api/geocode/json?address=$adr&sensor=false");
<html>
<head>        
<title>Test File</title>
<script type="text/javascript" src="http://maps.google.com/maps/api/js?sensor=false"> 
</script>
</head>
<body>
<?php    
$adr = 'Sydney+NSW';
echo $adr;
$url = "http://maps.googleapis.com/maps/api/geocode/json?address=$adr&sensor=false";
echo '<p>'.$url.'</p>';
echo file_get_contents($url);
print '<p>'.file_get_contents($url).'</p>';
$jsonData   = file_get_contents($url);
echo $jsonData;
?>
</body>
</html>
$url=urlencode(“http://maps.googleapis.com/maps/api/geocode/json?address=$adr和传感器=假“; 测试文件
如果PHP的
allow\u url\u fopen
ini指令设置为true,并且
curl
也不起作用(请参阅如何使用它而不是
file\u get\u contents
的示例),那么问题可能是服务器有防火墙,阻止脚本获取任意url的内容(这可能允许恶意代码获取内容)


我遇到了这个问题,并发现解决方案是编辑防火墙设置,以明确允许对相关域(或IP地址)的请求。

如果是本地文件,则必须将其包装为htmlspecialchars,如下所示:

    $myfile = htmlspecialchars(file_get_contents($file_name));

然后它会工作

错误可能是您需要更改要访问的文件夹和文件的权限。如果喜欢GoDaddy服务,您可以访问该文件并更改权限,或者通过ssh使用以下命令:

sudo chmod 775 file.jpeg

然后,如果上述问题不属于您的情况,您可以访问。

您收到的错误消息是什么?您是否收到了错误消息?整个页面都在返回,只是无法生成所需的输出。
ini\u get('allow\u url\u open')的输出是什么
?正如JSON一样,为什么不尝试上面链接中建议的方法,使用cURL?对于这些评论的未来读者,我认为@Gordon的意思是询问
ini的输出得到了什么(“allow\u url\u fopen”)
was。值得检查是否设置了它。@Shamim但当使用短打开标记时,这对整个脚本都很重要disabled@Shamim哈菲兹:这很重要,因为这会决定执行与否。如果服务器已禁用,则不会执行。这一切都取决于实际情况。请尝试提供一个答案,说明我将介绍所有可用的配置选项。我认为这属于我自己的范围,因为
这是一个很好的答案。它似乎涵盖了OP代码可能失败的所有原因,并告诉他/她如何调试函数调用。如果函数调用最终返回
NULL
,那么他/她可能会离开并找出原因也许是…在马克·汤姆林的帮助下,我确信。好的,非常感谢。由于我对这方面还不熟悉,并且根据你的提示进行了更多的研究,我使用了一个Yahoo!web hosting的帐户,他们表示将allow_url_fopen设置为“On”是为了防范安全风险,或更改php.ini文件中的任何其他项目。因此…离开Yahoo!前往Joomla web hosting…感谢您的帮助。您可能需要小心使用此方法,因为
urlencode()
将使您的最终地址变长,并且可能超过
文件\u get\u contents()允许的最大长度
@Hussam我刚刚读了文档,这不是
文件获取内容()的限制
。当你在地址栏中键入时,只能在浏览器中输入,但即使这样,你也必须写2kb到4kb来打破这个最大值。多么可怕的代码!PHP与HTML混合并打开PHP短标记。这会打破并迷惑新用户。是的,我知道这是从2012年开始的。这很危险,在大多数情况下你应该只使用775。我已经改变了这一点和我的观点是许可可能是问题所在