首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 網頁程式設計 >> PHP 程式設計 >> PHP 相關知識

PHP 遠端檔案抓取與本地化儲存完整實作

     編輯:PHP 相關知識

PHP 可透過串流封裝協定直接讀取遠端資源,本文示範如何抓取網路檔案並安全儲存為本地靜態頁面,包含錯誤處理與臨時檔案機制。

核心實作流程

  1. 設定來源 URL、臨時檔名與目標檔名
  2. 使用 fopen() 開啟遠端串流(需啟用 allow_url_fopen)
  3. 分塊讀取內容至變數,避免記憶體耗盡
  4. 寫入臨時檔案,驗證無誤後覆蓋目標檔
  5. 清理臨時檔案

完整代碼範例

<?php
// 設定參數
$srcUrl = 'https://example.com/page.php';
$tempFile = 'temp_page.html';
$targetFile = 'page.html';

// 清理舊臨時檔
@unlink($tempFile);

// 開啟遠端串流
$handle = @fopen($srcUrl, 'r');
if (!$handle) {
    die('無法連線至遠端來源: ' . $srcUrl);
}

// 讀取內容(限制 1MB 防異常)
$content = '';
while (!feof($handle)) {
    $content .= fread($handle, 8192);
    if (strlen($content) > 1024 * 1024) {
        fclose($handle);
        die('內容超過大小限制');
    }
}
fclose($handle);

// 寫入臨時檔
$tempHandle = fopen($tempFile, 'w');
if (!$tempHandle) {
    die('無法建立臨時檔案');
}
fwrite($tempHandle, $content);
fclose($tempHandle);

// 原子性替換:先複製再刪除
if (copy($tempFile, $targetFile)) {
    unlink($tempFile);
    echo '靜態頁面更新成功!';
} else {
    die('檔案替換失敗');
}
?>

進階改良建議

  • 改用 cURL:支援 HTTPS、Header 設定、逾時控制、重導向處理
  • 加入快取機制:檢查 Last-Modified / ETag 避免重複下載
  • 錯誤記錄:將失敗原因寫入 Log 而非直接輸出
  • 編碼轉換:遠端頁面編碼不一致時需 mb_convert_encoding()

安全性提醒

抓取外部資源存在 XSS、惡意腳本注入風險,儲存前務必進行內容過濾或僅作靜態封存,勿直接輸出至前端。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved