2014-09-13 63 views
0

所以我试图让用户验证他们拥有域。所以我生成一个文件,并让他们上传到他们的网站。所以,我接下来要验证它,所以我要做的就是文件获取内容返回false

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')); 

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

+0

任何调试? 'example.com'不是网址,因此会导致警告,就像禁用allow_url_fopen一样。 – mario 2014-09-13 20:06:02

+0

如果您尝试在浏览器中查看该路径,会发生什么情况? – thescientist 2014-09-13 20:06:12

+0

我已经尝试过'http'也没有工作@thescientist – user302975 2014-09-13 20:06:57

回答

0

尝试在$ url前添加http://并输入有效的网址。它将工作

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

已经尝试过...仍然返回'布尔(false) ' – user302975 2014-09-13 20:24:02

+0

是您使用的网址可以从浏览器访问?或者它是否返回404 – Isaac 2014-09-13 20:25:10

+0

是的。刚刚复制并粘贴,它的工作原理 – user302975 2014-09-13 20:26:16

0

如果启用error_reporting(E_ALL),那么您可能会看到由于ini setting而不允许使用HTTP URL。

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

+0

所以我检查了设置,我看到这个'allow_url_fopen = On' .... – user302975 2014-09-13 20:15:05

1

根据我从超过1万个域名获取第三方内容的体验,我不建议你使用file_get_contents()因为这个PHP函数不能处理页面重定向,需要一个有效的网站用户代理等。您遇到的问题可能只针对特定的域名。解决您的问题的更好方法是使用卷曲。

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');