文件获取内容返回false

时间:2014-09-13 20:03:44

标签: php mysql sql

所以我试图让用户验证他们拥有域名。所以我生成了一个文件,让它们上传到他们的网站。所以我必须验证它,所以我做的是

file_get_contents($url.'/'.$token.'.html');

所有这一切都是

bool(false)

以下是更多代码

$url = $_POST['url'];

//Get site info
$gin = $con->prepare("SELECT * FROM verify WHERE url = :url");
$gin->bindValue(':url', $url);
$gin->execute();

//Get token
$t = $gin->fetch(PDO::FETCH_ASSOC);
$token = $t['token'];
$url = $t['url'];


//Get content
var_dump(file_get_contents($url.'/'.$token.'.html'));

我在表token中有3列,这是文件中的字符串。 url显然是网址,其格式为example.com。并且经过验证的列可以是10。有任何想法吗?

3 个答案:

答案 0 :(得分:2)

根据我从超过100万个域名中获取第三方内容的经验,我不建议您使用file_get_contents(),因为此PHP函数无法处理页面重定向,需要有效用户代理的网站您遇到的问题可能仅限于某些域名。解决问题的更好方法是使用curl。

    function download_content($url) {
    $ch = curl_init();
    $timeout = 5;
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, $timeout);
    curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
    curl_setopt($ch, CURLOPT_USERAGENT, "Firefox 32.0");
    $data = curl_exec($ch);
    curl_close($ch);
    return $data;
}

<强>用法:

$returned_content = download_content('http://stackoverflow.com');

答案 1 :(得分:0)

如果您启用error_reporting(E_ALL),则可能会发现由于ini setting而不允许使用HTTP网址。

警告:您可能通过允许file_get_contents中的任意前缀打开一个洞。尝试使用parse_url来验证您确实拥有HTTP URL。那么您应该考虑使用cURL并禁用外部重定向(否则可以传递http://bit.ly/something#之类的URL并仍然通过测试。)

答案 2 :(得分:0)

尝试在$ url之前添加http://并添加有效的网址。它会起作用

var_dump(file_get_contents('http://'.$url.'/'.$token.'.html')); // With a valid URL