採集文章時,內容中的圖片多為外部連結。為避免防盜鏈、提升載入速度與資料可控性,需將圖片下載至本地伺服器,並將文章內容的 src 屬性替換為本地路徑。
/**
* 獲取並替換文章中的圖片路徑
* @param string $xstr 文章內容(HTML)
* @param string $keyword 圖片儲存子目錄關鍵字(如 upimg)
* @param string $oriweb 原網站域名(相對路徑時用於拼接完整 URL,無則傳 null)
* @return string 處理後的文章內容
*/
function replaceimg($xstr, $keyword, $oriweb) {
$basedir = dirname(__FILE__);
// 建立按年月分類的儲存目錄
$d = date('Ym', time());
$dirslsitss = $basedir . '/../uploads/' . $keyword . '/' . $d;
if (!is_dir($dirslsitss)) {
@mkdir($dirslsitss, 0777, true);
}
// 正則匹配所有 img 標籤的 src
preg_match_all('#<img.*?src=["\']([^"\']+)["\'][^>]*>#i', $xstr, $match);
foreach ($match[1] as $imgurl) {
// 判斷是絕對路徑還是相對路徑
if (strpos($imgurl, 'http') === 0) {
$arcurl = $imgurl;
} else {
$arcurl = $oriweb . $imgurl;
}
// 下載圖片
$img = @file_get_contents($arcurl);
if (!empty($img)) {
// 產生唯一檔名:時間戳 + 隨機數 + .jpg
$fileimgname = time() . "-" . rand(1000, 9999) . ".jpg";
$filecachs = $dirslsitss . "/" . $fileimgname;
$fanhuistr = file_put_contents($filecachs, $img);
// 組合本地相對路徑(供資料庫存儲或前端引用)
$saveimgfile = "/uploads/$keyword/" . $d . "/" . $fileimgname;
// 替換文章內容中的原始 URL
$xstr = str_replace($imgurl, $saveimgfile, $xstr);
}
}
return $xstr;
}
` 等相對路徑,需傳入 `$oriweb`(如 `https://example.com`)。