[英]Issue with file_get_contents()
我正在用PHP編寫代碼,該代碼從20多個網站中以特定格式獲取內容。
除一個網站外,所有網站均正常運行。 現在,這里是問題。
我正在使用file_get_contents()
從網站獲取圖像並將其保存在我的服務器上。 該圖像存在於遠程服務器上,可通過瀏覽器訪問,但通過代碼進行操作時得到404響應。
我無法理解其背后的問題,因為此方法可完美地適用於其他網站。
與發送的標頭有關嗎? 任何幫助將不勝感激。
答案可能是:是的...
我想他們正在檢查用戶代理。
這些都發送到您的標頭中。 您可以偽造您的用戶代理。 但是不要使用file_get_contents()
,因為那不允許偽造用戶代理。 看着卷發 。
編輯1
Barmar的鏈接顯示了可以將File_get_contents file_get_contents()
與其他用戶代理同時使用的可能性。 值得一看...
編輯2
但這也可能與檢查引薦來源網址有關 。如果是這種情況,您確實需要使用curl
來設置引薦來源 。
編輯3
現在已經看到了URL,並查看了出現的錯誤404
(不是50x
),建議您檢查URL是否已轉義並正確解析。 我看到URL包含空格,域名后面有兩個斜杠。 檢查是否將空格轉義到%20中,並且是否不應將雙斜杠剝離為僅一個斜杠。
所以
http://celebslam.celebuzz.com//bfm_gallery/2014/03/Lindsay Lohan 2 Broke Girls/gallery_enlarged/gallery_enlarged-lindsay-lohan-2-broke-girls-01.jpg
應該成為
http://celebslam.celebuzz.com/bfm_gallery/2014/03/Lindsay%20Lohan%202%20Broke%20Girls/gallery_enlarged/gallery_enlarged-lindsay-lohan-2-broke-girls-01.jpg
注意,服務器是CaSe-SeNsItIvE!
是的,首先-檢查該站點是否檢查了圖像訪問的引薦來源。 例如,嘗試直接在瀏覽器中獲取圖像
它還可以檢查用戶代理字段和其他內容
可能會有助於通過curl獲得文件(容易找到的代碼示例,否則我將為您提供簡單的類)
PS>只是很有趣。 您可以舉一些圖片網址示例嘗試嗎?
可能是推薦人或用戶代理。 這包括:
function file_get_contents_custom($url) {
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_REFERER, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION , 1);
curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (X11; U; Linux; i686; en-US; rv:1.6) Gecko Debian/1.6-7');
$data = curl_exec($ch);
curl_close($ch);
return $data;
}
更新:
您鏈接的圖像對我來說使用file_get_contents可以正常工作。 服務器可能具有某種DDOS保護。 您平均每秒發出多少個請求?
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.