【问题标题】:file_get_contents() returning empty even though allow_url_fopen = On即使 allow_url_fopen = On,file_get_contents() 也会返回空
【发布时间】:2018-08-03 11:43:04
【问题描述】:

问题

file_get_contents() 出于某种原因返回一个空字符串。

代码

index.php

<?php 
    $value = file_get_contents("http://foo.com/somefile.txt");
    echo $value;
?>

php.ini

allow_url_fopen = On
allow_url_include = On

http://foo.com/somefile.txt

69.00000000

我的研究

一般file_get_contents("http://foo.com/somefile.txt")返回空字符串时,是由于以下两个原因之一

  1. somefile.txt 是一个空文件
  2. php.iniallow_url_include = Off

$value 现在应该是 69.00000000,但函数什么也不返回。

问题

为什么函数调用后$value为空?

【问题讨论】:

  • $echo $value; 是错字吗?
  • 抱歉打错了,我已经修改了。
  • 使用var_dump。在那种情况下,Echo 不会给你任何有用的东西。
  • file_get_contents 可能返回false,而不仅仅是一个字符串值;所以检查 === false。同时启用错误报告以查看它是否真的失败
  • 启用后是否重启过服务器?

标签: php apache file io


【解决方案1】:

有两种不同的“空”。文件实际上是 0 字节长(空字符串),或者 the call failed,返回为 FALSE。引用文档:

失败时,file_get_contents() 将返回 FALSE。

现在,我不知道您的调用失败的原因,但很可能已经记录在网络服务器错误日志中,或者您可以将这些转换为异常以自己记录。

development system 上建议的第三种选择是在 php.ini 中设置display_errors 以使问题可见:

display_errors on

这包括输出中的错误,以便您可以在浏览器中看到它们。

【讨论】:

  • 更新了答案。
【解决方案2】:
try this:


checkRemote("http://foo.com/somefile.txt");

 function checkRemote($url)
{
    if(!checkRemoteLink($url)){
        echo 'bad link!';
    } else if(!checkRemoteFile($url)){
        echo 'bad file!';
    } else echo 'trouble!';
}

function checkRemoteLink($url)
{
    $file_headers = @get_headers($url);
    if (!$file_headers || $file_headers[0] == 'HTTP/1.1 404 Not Found') {
        return false;
    } else {
        return true;
    }
}

function checkRemoteFile($url)
{
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_NOBODY, 1);
    curl_setopt($ch, CURLOPT_FAILONERROR, 1);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    if (curl_exec($ch) !== FALSE) {
        return true;
    } else {
        return false;
    }
}

【讨论】:

    猜你喜欢
    • 2021-02-08
    • 2014-10-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多