在PHP中儲存來自URL的影像


在PHP中儲存來自URL的影像有多種方法。

這裡有三種常見的方法

  • 使用 `file_get_contents()` 和 `file_put_contents()`

  • 使用 cURL

  • 使用 GD 庫

使用 `file_get_contents()` 和 `file_put_contents()`

使用 `file_get_contents()` 和 `file_put_contents()` 是一種直接儲存來自URL的影像到PHP的方法。

這是一個例子

$url = "https://example.com/image.jpg";
$image = file_get_contents($url);
file_put_contents("path/to/save/image.jpg", $image);

在這個程式碼片段中,`file_get_contents()` 用於從指定的URL檢索影像檔案的內容。然後將影像資料儲存在 `$image` 變數中。

接下來,`file_put_contents()` 用於將影像資料儲存到本地伺服器上的檔案。您需要指定要儲存影像的所需路徑和檔名。

確保您對要儲存影像的目錄具有相應的寫入許可權。

此方法簡單易用,不需要任何額外的PHP擴充套件。但是,對於較大的檔案,它可能不適用,因為它會將整個影像載入到記憶體中。

使用 cURL

使用cURL(客戶端URL庫)是另一種常用的從URL儲存影像到PHP的方法。

這是一個例子

$url = "https://example.com/image.jpg";
$ch = curl_init($url);
$fp = fopen("path/to/save/image.jpg", "wb");
curl_setopt($ch, CURLOPT_FILE, $fp);
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_exec($ch);
curl_close($ch);
fclose($fp);

在這個程式碼片段中,`curl_init()` 初始化一個cURL會話,並將要獲取的URL設定為影像URL。生成的cURL控制代碼儲存在 `$ch` 變數中。

`fopen()` 用於以寫二進位制模式(“wb”)開啟指向要儲存影像的所需位置的檔案指標(`$fp`)。

`curl_setopt()` 用於設定cURL會話的各種選項。在這個例子中,`CURLOPT_FILE` 設定為檔案指標(`$fp`),以便將響應內容直接寫入檔案。`CURLOPT_HEADER` 設定為 0,以排除將標頭資訊寫入檔案。

`curl_exec()` 執行cURL會話並將影像資料寫入檔案。

最後,`curl_close()` 關閉cURL會話,`fclose()` 關閉檔案指標。

與 `file_get_contents()` 相比,此方法提供了更大的靈活性,允許您控制各種選項,例如設定標頭、處理重定向或設定超時。它對於更復雜的場景和更大的檔案很有用。

使用 GD 庫

使用 GD(圖形繪製)庫是另一種在 PHP 中儲存來自 URL 影像的方法。GD 庫提供了影像處理功能。

這是一個例子

$url = "https://example.com/image.jpg";
$image = imagecreatefromjpeg($url);
imagejpeg($image, "path/to/save/image.jpg");
imagedestroy($image);

在這個程式碼片段中,`imagecreatefromjpeg()` 用於根據 URL 指定的 JPEG 檔案建立一個 GD 影像資源。您可以對其他影像格式使用類似的函式,例如 `imagecreatefrompng()` 或 `imagecreatefromgif()`。

接下來,`imagejpeg()` 函式用於將 GD 影像資源儲存為 JPEG 格式的檔案。第一個引數是 GD 影像資源,第二個引數是要儲存影像的路徑和檔名。

最後,呼叫 `imagedestroy()` 以釋放記憶體並銷燬 GD 影像資源。

如果您需要在儲存影像之前執行任何影像操作或處理,此方法非常有用。GD 庫提供了用於調整大小、裁剪、新增文字和其他影像操作的各種函式。

但是,要使用 GD 庫,您需要確保 GD 擴充套件已在您的伺服器上啟用。在使用 GD 函式之前,您可以使用 `extension_loaded()` 函式檢查 GD 擴充套件的可用性。

if (extension_loaded('gd') && function_exists('gd_info')) {
   // GD extension is available
} else {
   // GD extension is not available
}

如果您需要執行影像處理以及儲存影像,請選擇此方法。否則,`file_get_contents()` 和 cURL 等更簡單的方法可能更合適。

結論

這些方法根據您的需求和 PHP 環境中可用的庫提供了不同的選項。選擇適合您需求和伺服器上可用資源的方法。

更新於:2023年8月2日

9K+ 次瀏覽

啟動你的職業生涯

透過完成課程獲得認證

開始
廣告