采集頁面時,目標站圖片若有防盜鏈,直接引用會失效。需將圖片下載至本地服務器,再替換頁面中的圖片路徑。
make_dir()function make_dir($path) {
if (!file_exists($path)) {
@mkdir($path, 0777, true); // 遞歸創建
@chmod($path, 0777);
}
return true;
}
read_filetext()function read_filetext($filepath) {
$filepath = trim($filepath);
$fp = @fopen($filepath, 'rb');
if (!$fp) return '';
$content = '';
if (strstr($filepath, '://')) {
// 遠程流式讀取
while ($data = @fread($fp, 8192)) {
$content .= $data;
}
} else {
// 本地一次性讀取
$content = @fread($fp, @filesize($filepath));
}
@fclose($fp);
return $content;
}
write_filetext()function write_filetext($filepath, $string) {
$fp = @fopen($filepath, 'wb');
if ($fp) {
@fwrite($fp, $string);
@fclose($fp);
}
}
get_filename()function get_filename($filepath) {
$parts = explode('/', $filepath);
return end($parts);
}
save_pic()function save_pic($url, $savepath = '') {
$url = trim($url);
$url = str_replace(' ', '%20', $url);
$content = read_filetext($url);
if (empty($content)) {
return false; // 或拋出異常
}
$filename = get_filename($url);
make_dir($savepath);
$filepath = $savepath . $filename;
write_filetext($filepath, $content);
return $filepath;
}
get_pic()function get_pic($html, $savepath) {
// 匹配 img 標簽 src 屬性(簡化版,實際建議用 DOMDocument)
$pattern = '/<img[^>]+src=["\']([^"\']+\.(?:gif|jpg|jpeg|png|webp))["\']/i';
preg_match_all($pattern, $html, $matches);
$urls = $matches[1];
foreach ($urls as $url) {
$result = save_pic($url, $savepath);
echo $result ? "[OK] $url\n" : "[FAIL] $url\n";
}
}
$url = 'https://gz.pconline.com.cn/321/3215791.html'; $html = file_get_contents($url); // 提取正文區域(根據目標站結構調整) $preg = '#<div class="art_con">(.*)<div class="ivy620"></div>#isU'; preg_match_all($preg, $html, $arr); $content = $arr[1][0] ?? ''; get_pic($content, 'img/');
Referer、User-Agent、Cookie 模擬瀏覽器基於 fopen/fread/fwrite 的流式讀寫可避免大圖內存溢出,模組化設計便於擴展。實際項目中建議引入成熟 HTTP 客戶端(Guzzle)與 DOM 解析器(DOMDocument/QueryList)提升穩健性。