file_get_contents()返回文字'未找到'而不是布尔

时间:2015-12-25 13:16:26

标签: php php-5.4

这是我正在使用的代码:

<?php 
$changelog="https://raw.github.com/neurobin/oraji/release/ChangeLog";
$filec1=@file_get_contents($changelog);

if($filec1===false) {$filec1="something";}

echo $filec1
?>

它打印 Not Found 而不是某些。但是当我向if语句中添加另一个条件时:

if($filec1===false||$filec1=="Not Found") {$filec1="something";}

然后按预期工作。

这里出了什么问题?

PHP版本是5.4。 php -v输出:

PHP 5.4.45 (cli) (built: Oct 29 2015 09:16:10) 
Copyright (c) 1997-2014 The PHP Group
Zend Engine v2.4.0, Copyright (c) 1998-2014 Zend Technologies
    with the ionCube PHP Loader v4.7.5, Copyright (c) 2002-2014, by ionCube Ltd., and
    with Zend Guard Loader v3.3, Copyright (c) 1998-2013, by Zend Technologies
    with Suhosin v0.9.36, Copyright (c) 2007-2014, by SektionEins GmbH

N.B:我在远程服务器上这样做。

<小时/> 修改

无论如何,我注意到(在浏览器中找到该URL)Github正在发送文字“未找到”#39;作为该不存在的URL的内容(我不知道为什么)。但是我如何解决它(不使用文字字符串作为条件)?

这就是我最终做的事情:

根据this answer,我正在检查HTTP标头响应,并将200定位为成功代码,否则失败(以及真/假检查)。

<?php 
function fileGetContents($file){
    $filec1=@file_get_contents($file);
    if($filec1===false || !strpos($http_response_header[0], "200")) 
        {$filec1="something";}
    return $filec1;
}

$changelog="https://raw.github.com/neurobin/oraji/release/ChangeLog";
$filec1=fileGetContents($changelog);

echo $filec1;
?>

注意:

如果使用301/302重定向,则无法正常工作。例如,如果上面的链接确实存在,它将无法工作,即它会返回“某些东西”。而不是重定向页面中的实际内容。因为raw.github.com被重定向到raw.githubusercontent.com

此解决方案仅在我使用没有重定向的实际URL时才有效。 所以这仍然不是一个好的解决方案。

4 个答案:

答案 0 :(得分:1)

使用$http_response_header

tags.findOrCreate( { 
    where: { tagName: tag }
})
.then(function(tagData){
     console.log(tagData.toJSON());
})

答案 1 :(得分:1)

file_get_contents置于条件中。

$changelog="https://raw.github.com/neurobin/oraji/release/ChangeLog";
if($filec1 = @file_get_contents($changelog)) {
    echo 'Got it';
} else {
    echo 'NOOOOOoooo!';
}

另请注意,如果您取消@,则会收到错误。

答案 2 :(得分:0)

这是按预期工作的:

逻辑很简单:

  

是否重定向,如果网址有效,200 OK数组中的某个地方会有$http_response_header

因此,我只检查数组的所有元素以查找200 OK消息。

<?php 
function is200OK($arr){
    foreach($arr as $str){
        if(strpos($str, " 200 OK")) {return true;}
    }
    return false;
}

function fileGetContents($file){
    $filec1=@file_get_contents($file);
    if($filec1===false || !is200OK($http_response_header)) {$filec1="something";}
    //print_r($http_response_header);
    return $filec1;
}

$changelog="https://raw.github.com/neurobin/oraji/release/ChangeLog";
$filec1=fileGetContents($changelog);

echo $filec1;
?>

答案 3 :(得分:0)

好吧,如果您访问该链接,您将看到您收到该错误。返回json的链接,即使它们在web中也看起来像一个数组。