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

PHP 生成網頁快照圖片:無需 COM/擴展,呼叫第三方 API 實作

     編輯:PHP 綜合知識

實作原理

利用第三方快照服務 ppt.cc(已停止服務,僅作教學示範),POST 提交目標網址,取回圖片儲存路徑,再下載儲存本地。

完整函數

/**
 * 生成網頁快照
 * @param string $site 目標網址
 * @param string $savePath 本地儲存路徑,空則只回傳圖片 URL
 * @param int $delay 延遲秒數等待頁面載入
 * @return mixed 圖片 URL 或儲存位元組數
 */
function snapshot($site, $savePath = '', $delay = 0) {
    $apiUrl = 'https://ppt.cc/yo2/catch.php';
    $query = 'url=' . urlencode($site) . '&delay=' . $delay . '&rnd=' . mt_rand(1, 9);

    $ch = curl_init($apiUrl);
    curl_setopt_array($ch, [
        CURLOPT_POST => true,
        CURLOPT_POSTFIELDS => $query,
        CURLOPT_USERAGENT => $_SERVER['HTTP_USER_AGENT'] ?? 'PHP Bot',
        CURLOPT_RETURNTRANSFER => true,
        CURLOPT_TIMEOUT => 30,
    ]);
    $data = curl_exec($ch);
    curl_close($ch);

    if (strlen($data) !== 32) {
        throw new Exception('無效回應: ' . $data);
    }

    // 回傳 32 字元 hash,構造圖片 URL
    $path = $data[0] . '/' . $data[1] . '/' . $data[2] . '/';
    $imageUrl = 'https://cache.ppt.cc/' . $path . 'src_' . $data . '.png';

    if ($savePath !== '') {
        $imgData = file_get_contents($imageUrl);
        if ($imgData === false) throw new Exception('圖片下載失敗');
        return file_put_contents($savePath, $imgData);
    }
    return $imageUrl;
}

使用範例

// 只取得圖片 URL
echo snapshot('https://www.baidu.com');

// 下載儲存本地
$saved = snapshot('https://www.baidu.com', './baidu.png');
echo "已儲存 $saved 位元組";

現代替代方案(自建/雲服務)

方案特點適用場景
Puppeteer / Playwright (Node.js)無頭瀏覽器,完整 JS 渲染、截圖、PDF需精確截圖、SPA、動態內容
Chrome DevTools Protocol (PHP: chrome-php/chrome)直接控制 Chrome,無 Node 依賴PHP 專案不想引入 Node
wkhtmltoimage / wkhtmltopdfQt WebKit 渲染,命令列工具靜態頁、報表、PDF 生成
雲端 API:Screenshotlayer, ApiFlash, Urlbox付費、高可用、CDN 分發生產環境、大量需求
GitHub Actions / CI 定時生成自動化、版本控制文檔、報表定期更新

注意事項

  • 第三方免費服務隨時可能停止、限流、插入廣告,生產環境請自建。
  • 目標頁面若需登入、CSRF、JS 渲染,簡單 HTTP POST 無法處理。
  • 圖片儲存需考慮磁碟空間、命名衝突、CDN 分發。
  • 尊重 robots.txt 與網站服務條款,避免濫用。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved