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

PHP 論壇大頭貼隨機輪播實作:單一腳本動態輸出圖片

     編輯:PHP 綜合知識

利用 PHP 直接輸出圖片二進位資料,搭配 rand() 隨機選擇,即可實現「每次重整顯示不同大頭貼」的效果,無需 JavaScript、無需儲存多個靜態檔案。

實作步驟

  1. 準備 3 張大頭貼圖片,命名為 0.gif、1.gif、2.gif。
  2. 建立 avatar.php:
<?php
// avatar.php
$images = ['0.gif', '1.gif', '2.gif'];
$pick = $images[array_rand($images)]; // 或 rand(0,2)

header('Content-Type: image/gif');
header('Cache-Control: no-store, no-cache, must-revalidate, max-age=0');
header('Pragma: no-cache');
readfile($pick);
?>
  1. 將 avatar.php 與三張圖片上傳至支援 PHP 的主機同一目錄。
  2. 在論壇個人設定的「大頭貼網址」填入:
https://yourdomain.com/path/avatar.php?.gif
尾端加 ?.gif 讓某些僅檢查副檔名的論壇系統通過驗證。

進階擴充

  • 支援多種格式:陣列存完整檔名,header('Content-Type: ' . mime_content_type($pick)) 自動判斷 MIME。
  • 加權隨機:某些圖片機率較高,可用 array_fill 擴充陣列或自寫加權演算法。
  • 動態生成:結合 GD/ImageMagick 即時合成文字、水印、顏色變化。
  • 效能優化:圖片較大時建議啟用 opcache、CDN 快取,或改用 Nginx try_files 直接導向靜態檔案。

完整可用版本(含錯誤處理)

<?php
$dir = __DIR__ . '/avatars/';
$allowed = ['gif','png','jpg','jpeg','webp'];
$files = [];
foreach (glob($dir . '*.{'.implode(',',$allowed).'}', GLOB_BRACE) as $f) {
    $files[] = $f;
}
if (!$files) {
    http_response_code(404);
    exit('No avatar images found');
}
$pick = $files[array_rand($files)];
$finfo = finfo_open(FILEINFO_MIME_TYPE);
$mime = finfo_file($finfo, $pick);
finfo_close($finfo);

header('Content-Type: ' . $mime);
header('Content-Length: ' . filesize($pick));
header('Cache-Control: public, max-age=300'); // 快取 5 分鐘
readfile($pick);
?>
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved