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

PHP 取得 QQ 頭像並顯示的兩種方法與效能比較

     編輯:PHP 相關知識

QQ 頭像 API 端點

騰訊提供公開頭像介面:

https://q1.qlogo.cn/g?b=qq&nk=QQ號&s=100
  • b=qq:業務類型(QQ)
  • nk:QQ 號碼
  • s:尺寸代碼(40/64/100/140/640 等)
  • 加上 &t= 時間戳可防快取,確保更新即時生效。

方法一:直接輸出 <img> 標籤(支援動圖)

<?php
$qq = '123456789';
echo '<img src="https://q1.qlogo.cn/g?b=qq&nk=' . $qq . '&s=100&t=' . time() . '">';
?>
  • 優點:瀏覽器直接請求,支援 GIF 動態頭像,伺服器無頻寬壓力。
  • 缺點:若騰訊伺服器慢,頁面載入受影響;無法做權限控管或預設頭像替換。

方法二:PHP 代理輸出(靜態圖、速度較快)

<?php
$qq = '552452006';
$src = 'https://q1.qlogo.cn/g?b=qq&nk=' . $qq . '&s=100&t=' . time();

header('Content-Type: image/png');
$img = imagecreatefromstring(file_get_contents($src));
imagepng($img);
imagedestroy($img);
?>
  • 優點:可在 PHP 做錯誤處理(預設頭像)、加上存取控制、CDN 加速。
  • 缺點:imagecreatefromstring 僅支援靜態圖,**動態 GIF 會轉為靜態第一幀**;佔用伺服器頻寬與 CPU。

進階:快取與預設頭像機制

<?php
function getQQAvatar($qq, $size = 100) {
    $cacheDir = __DIR__ . '/cache/avatar/';
    $file = $cacheDir . $qq . '_' . $size . '.png';
    if (file_exists($file) && (time() - filemtime($file) < 86400)) {
        return $file; // 24 小時快取
    }
    $url = "https://q1.qlogo.cn/g?b=qq&nk={$qq}&s={$size}";
    $data = @file_get_contents($url);
    if ($data && strlen($data) > 100) { // 簡易有效性檢查
        @file_put_contents($file, $data);
        return $file;
    }
    return __DIR__ . '/assets/default_avatar.png'; // 預設頭像
}

// 使用
$avatarPath = getQQAvatar('123456789');
header('Content-Type: image/png');
readfile($avatarPath);
?>

適用場景選擇

場景建議方法
部落格留言、論壇頭像方法一(簡單、支援動圖)
後台管理、需權限控管、高可用性方法二 + 本地快取
大流量站點CDN 代理 + 非同步預熱快取
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved