2013-12-09 12 views
0

短版 保存非標準基本名稱圖像當我嘗試使用此鏈接運行的file_get_contents(),「http://s1.reutersmedia.net/resources/r/?m=02&d=20131205&t=2&i=817503382&w=&fh=&fw=&ll=700&pl=378&r=CBRE9B401AG00」,返回「非法的:d - 味精」。爲什麼它是file_get_contents()在大多數圖像鏈接上工作,但不是這個,我怎樣才能使它工作?我如何可以檢索和使用PHP

我的web應用的功能的細節 部分是解析外部HTML文件的圖像,然後讓用戶選擇所需的圖像,並自動將圖像的縮小尺寸的版本保存到我的服務器。我的代碼適用於99%的情況,但對於剩餘的1%,我無法成功將圖像文件放到我的服務器上以重新調整大小。不工作的案例似乎都涉及到與「SRC」 HTML元素屬性看起來像這樣:

http://s1.reutersmedia.net/resources/r/?m=02&d=20131205&t=2&i=817503382&w=&fh=&fw=&ll=580&pl=378&r=CBRE9B401AG00

,而不是一個更標準的圖像路徑像這樣:

http://www.wired.com/images_blogs/wiredscience/2013/12/keyes-wd.jpg

下面是我爲了得到並保存外部圖像使用,一旦用戶已經選擇了它,其中變量$ newFileName等於一個img路徑字符串如那些上面粘貼的代碼:

$contentOrFalseOnFailure = file_get_contents($newFileName);   
    $byteCountOrFalseOnFailure = file_put_contents($filenameOut, $contentOrFalseOnFailure); 
    $fileName = basename($newFileName); 
    $fileTmpLoc = $filenameOut; 
    $fileSize = $byteCountOrFalseOnFailure;  
    $fileExt = pathinfo($fileTmpLoc, PATHINFO_EXTENSION); 
    list($width, $height) = getimagesize($fileTmpLoc); 

    if($width < 10 || $height < 10){ 
      header("location: ../message.php?msg=ERROR: That image has no dimensions"); 
    exit(); 
    } 

當src是非標準的,腳本不會超出這一點,即我得到「該圖像沒有dimestions」錯誤。我能做些什麼來保存保存這些非標準圖像?

回答

0

如果你感興趣的僅僅是圖像尺寸,別無其他的話,你可以用GD的imagecreatefromstring()去,而不需要一個臨時的磁盤上的文件:

$img = file_get_contents($url); 

$gd = imagecreatefromstring($img); 

$width = imagesx($gd); 
$height = imagesy($gd); 

這具有解壓縮的缺點然而,圖像進入記憶。您不得不希望遠程服務器不會通過解壓縮後超過PHP memory_limit的尺寸較小的圖像發送。

+0

我需要的不僅僅是圖像尺寸,我試圖將圖像保存到我的服務器上。 – Theramax

0

忽略該URL,查看響應中的Content-Type標題。

+0

您是否建議查看Content-Type作爲獲取文件擴展名的方法?如果是這樣,那不是我的主要問題。我的問題是,file_get_contents()方法首先不起作用。 – Theramax

+0

@MartínMolina內容類型標題與文件擴展名無關,文件擴展名(如果存在)與內容類型無關。不要混淆兩者。僅僅因爲很多圖片以.jpg和.png結尾並不意味着他們必須這樣做。這是一個慣例,無論如何也不適用於HTTP。不要使用'file_get_contents()'使用cURL,然後你可以訪問所有的響應頭文件。 – Brad