採集遠程圖片時,為保持引用路徑一致性,常需按原 URL 路徑結構在本地重建目錄並保存。下面提供一個精簡的 PHP 腳本實現此功能,自動創建多級目錄、下載圖片、生成預覽標籤。
';
/**
* 遞歸創建多級目錄
* @param string $pathname 目標路徑
* @param int $mode 權限
* @return bool
*/
function mkdirs($pathname, $mode = 0755) {
if (is_dir($pathname)) return true;
mkdirs(dirname($pathname), $mode);
return @mkdir($pathname, $mode);
}
| 函數/技巧 | 作用 |
|---|---|
pathinfo() | 解析 URL 路徑,提取 dirname、basename、extension |
遞歸 mkdirs() | 解決 mkdir() 不支持多級創建的問題 (PHP 5+ mkdir($path, 0777, true) 已原生支持) |
index.htm | 防止 Web 服務器開啟目錄列表洩露文件結構 |
file_get_contents/put_contents | 簡單場景下替代 cURL,無需額外依賴 |
function fetchImages(array $urls, $domain, $saveRoot = '.') {
$results = [];
foreach ($urls as $url) {
try {
$pathInfo = pathinfo($url);
$saveDir = $saveRoot . $pathInfo['dirname'] . '/';
if (!is_dir($saveDir)) {
mkdir($saveDir, 0777, true);
@file_put_contents($saveDir . 'index.html', '');
}
$ch = curl_init($domain . $url);
curl_setopt_array($ch, [
CURLOPT_RETURNTRANSFER => true,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_TIMEOUT => 30,
CURLOPT_SSL_VERIFYPEER => false,
CURLOPT_USERAGENT => 'Mozilla/5.0 Image Collector',
]);
$data = curl_exec($ch);
$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);
if ($httpCode !== 200 || !$data) {
throw new Exception("HTTP $httpCode");
}
$savePath = $saveRoot . $url;
file_put_contents($savePath, $data);
$results[$url] = ['status' => 'ok', 'path' => $savePath];
} catch (Throwable $e) {
$results[$url] = ['status' => 'fail', 'error' => $e->getMessage()];
}
}
return $results;
}
robots.txt 與版權協議,僅作合法用途。