2013-06-23 41 views
0

我試圖使用捲曲獲取這一形象:http://images.egypt.souq.com/media/item/2013/02/27/49/97/32/8/item_L_4997328_1650476.jpg捲曲已逾時與此圖像

使用此代碼:

public static function fetchUrl($url) { 
    $ch = curl_init(); 
    curl_setopt($ch, CURLOPT_URL, $url); 
    curl_setopt($ch, CURLOPT_TIMEOUT, 50); 
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 
    $data = curl_exec($ch); //get curl response 
    curl_close($ch); 
    return $data; 
} 

這個代碼工作的任何圖像(即我想至少)除對於上面的圖像,它消耗所有超時的50秒後返回false,

確實有人知道爲什麼?

+0

您嘗試過的其他圖像與您發佈的域名相同的域名? – webnoob

+1

它似乎與該域上的任何圖像發生。考慮到這一點,我會假設他們有一些措施阻止人們以這種方式竊取他們的圖像/直接鏈接到他們的網站。 – webnoob

+0

你好,我已經嘗試過在同一個域上的其他圖像,並且都給出了相同的結果,有無論如何得到這些圖像?或者我只需要最小化超時並處理錯誤的情況呢? – AbdelHady

回答

1

指定爲捲曲的userAgent解決我的問題:

curl_setopt($ch, CURLOPT_USERAGENT, $_SERVER['HTTP_USER_AGENT']); 

在這裏我得到從請求的userAgent,

或者我甚至可以指定它像手動:

curl_setopt($ch, CURLOPT_USERAGENT, "spider"); 

此答案幫助了我:https://stackoverflow.com/a/6595108/905801

0

這樣的事情如何? phpFiddle

<?php 

function data_uri($file, $mime) 
{ 
    $contents = file_get_contents($file); 
    $base64 = base64_encode($contents); 
    return ('data:' . $mime . ';base64,' . $base64); 
} 
?> 

<img src="<?php echo data_uri('http://images.egypt.souq.com/media/item/2013/02/27/49/97/32/8/item_L_4997328_1650476.jpg','image/jpg'); ?>" /> 

來自here的信息。

+0

您的回答正常,但我的服務器上未啓用file_get_contents。通過在我的回答中指定userAgent,我找到了合適的解決方案。無論如何,感謝您的努力。 – AbdelHady

+0

我不認爲HTTP包裝會在Curl失敗的地方成功實現。其他代碼與這個問題有什麼關係? –

+0

@ÁlvaroG.Vicario - 無論涉及到什麼魔法,他的原始代碼在phpFiddle中都不起作用,我公佈的例子也是如此。 'img'標籤是一個演示來顯示圖像回來。我猜userAgent是他發佈的問題,所以我假設'get_file_contents'處理這個「神奇」 – webnoob