2016-02-26 36 views
2

對不起,如果它的重複,我coudnt找到類似的話題。因此,可以說有一個帶有圖像內容的URL,名爲「www.test.com/test.jpg」。 我想將圖像保存到使用PHP文件夾,所以我用PHP使用GET屬性創建URL的圖像文件

file_put_contents('test.jpg', 'www.test.com/test.jpg'); 

,它工作正常,圖像保存到當前文件夾。但是,如果圖像URL如下所示:

www.test.com/test.jpg?id={1a2b3c-4d5e6f} 

我無法使用file_put_contents來保存圖像。如果我嘗試刪除?id = {1a2b3c-4d5e6f}部分,則瀏覽器不會打開圖像。任何想法如何使保存成功?

+0

什麼是您用來生成圖像的代碼? – Ben

+0

當您嘗試打開圖像時會得到什麼?一個404?或破碎的圖像? – syck

+0

我得到這個 - > HTTP狀態400 - 類型狀態報告 - 客戶端發送的請求在語法上不正確()。 –

回答

1

不要使用URI作爲文件名。潛在的問題超出了你已經發現的範圍。

相反,像下面這樣的東西將起作用。

$uri = 'http://www.test.com/test.jpg?id={1a2b3c-4d5e6f}'; 
$data = file_get_contents($uri); 
file_put_contents(md5($uri),$data); 

如果需要該圖像的原始URI,請將其存儲在數據庫或文本文件中,並將其引用回MD5。像這樣的東西可能會工作(沒有測試)。

$uri = 'http://www.test.com/test.jpg?id={1a2b3c-4d5e6f}'; 
$uriMd5 = md5($uri); 
$data = file_get_contents($uri); 
file_put_contents($uriMd5,$data); 
file_put_contents($uriMd5.'.txt',$uri); 
0
$variable="www.test.com/test.jpg?id={1a2b3c-4d5e6f}"; 
$variable=substr($variable, 0, strpos($variable, "?")); // www.test.com/test.jpg 
file_put_contents('test.jpg', $variable); 

試試這個。

+0

刪除?id =部分後,圖像的URL將被破壞。 –

0

方案如下:首先,該函數以獲取數據:

function getData($url) { 
     $ch = curl_init(); 
     curl_setopt($ch, CURLOPT_URL, $url); 
     curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 

     $data = curl_exec($ch); 
     curl_close($ch); 

     if ($data) return $data; 
     else die("no data - ".$url); 
    } 

然後使用:

file_put_contents('test.jpg', getData(..URL..)); 
+0

我會稱之爲比解決方案更有效。但是,將您從網絡中檢索到的數據存儲在具有公共訪問權限的文件夾中存在風險:如果有人屏蔽了URL或劫持了連接,他們可以將惡意代碼放入系統並執行。因此,請確保將圖像存儲在沒有腳本執行的文件夾中。 – syck