即使allow_url_fopen = On,file_get_contents()返回空

时间:2018-08-03 11:43:05

标签: php apache file io

问题

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为空?

2 个答案:

答案 0 :(得分:1)

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

  

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

现在,我不知道您的通话为什么失败,但是它可能已经记录在网络服务器错误日志中,或者您可以将其转换为异常以自己记录。

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

display_errors on

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

答案 1 :(得分:1)

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;
    }
}