2016-01-07 188 views
1

當我在laravel 4中使用庫干預/圖片時,使用一段代碼$ image = Image :: make($ url)錯誤:

file_get_contents(http://ticket.at-newyork.com/image/tenboudai/rockfeller-top.jpg): failed to open stream: HTTP request failed! HTTP/1.1 410 Gone 

我已經研究了許多計算器解決方案,嘗試前:使用用urlencode,但我還有一個錯誤:

file_get_contents(http%3A%2F%2Fticket.at-newyork.com%2Fimage%2Ftenboudai%2Frockfeller-top.jpg): failed to open stream: No such file or directory 

請不要建議我用捲曲,因爲file_get_contents()函數是代碼庫中,我不能改變。謝謝

+0

具有承載了圖像防止盜鏈的服務器? – frankle

+0

我不明白,我只知道捲曲可以解決問題,但我不能使用,因爲它是庫中的代碼,所以我不能改變 –

+0

我剛剛嘗試捲曲,它不起作用,它返回410狀態碼。圖像/網站的所有者已阻止您像這樣遠程訪問圖像。谷歌「防止盜鏈」。 – frankle

回答

1

這是我的解決方案,幫助解決它使用捲曲。相反,通過URL在參數,我使用捲曲的控制器來獲得二進制圖像數據,並把它傳遞給PARAM,這是我的代碼:

curl_handle = curl_init(); 
    curl_setopt($curl_handle, CURLOPT_URL,$url); 
    curl_setopt($curl_handle, CURLOPT_CONNECTTIMEOUT, 2); 
    curl_setopt($curl_handle, CURLOPT_RETURNTRANSFER, 1); 
    curl_setopt($curl_handle, CURLOPT_USERAGENT, 'Vivo app'); 
    $query = curl_exec($curl_handle); 
    curl_close($curl_handle); 

    try { 
     $image = Image::make($query)->save($destinationPath . $img_name); 
1

domain ticket.at-newyork.com需要用戶代理頭來請求遠程獲取內容。看看下面的解決方案,它適用於我。

$opts = array(
    'http'=>array(
     'method'=>"GET", 
     'header'=>"Host: ticket.at-newyork.com\r\n" . 
      "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/47.0.2526.80 Safari/537.36" 
    ) 
); 

$context = stream_context_create($opts); 

$data = file_get_contents('http://ticket.at-newyork.com/image/tenboudai/rockfeller-top.jpg', false, $context); 
file_put_contents('test.jpg', $data); 

,你也可以通過設置CURLOPT_USERAGENT

+1

您的方法無法解決我的問題,因爲我無法更改庫中包含函數file_get_contents()的文件中的任何內容,但它可以幫助我更好地理解它,非常感謝您的參與你的支持。我很感激 ! +1 –

+1

Chetan Ameta的代碼是正確的。您無法使用file_get_contents()獲取圖像文件而無需設置這些選項。 header(「Content-type:image/jpeg」); print_r($ data); 來顯示圖像。 – BlackJack

相關問題