2014-09-13 61 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');