:::

6-3-2 讀取縮圖檔案的資料

一、$news 陣列應包含何種檔案資料

  1. 目前僅從資料庫撈出資料,但並沒有包含縮圖檔案的資料
  2. 我們希望每一筆文章的 $news 陣列可以包含一個 $news['files'] ,裡面也放著所有原檔及縮圖檔名的資料,如此才比較好運用
  3. $news['files'] 可能會有好幾個檔案,所以應該長得像這樣:
    1. 第一篇文章有兩個檔(其中一個是影片檔),那麼陣列應該像這樣(索引是原檔,值為縮圖):
      • $news['files']['aa.jpg']='aa.jpg';
      • $news['files']['bb.mp4']='bb.jpg';
    2. 第二篇文章有三個不同格式的圖檔,那麼陣列應該像這樣:
      • $news['files']['aa.jpg']='aa.jpg';
      • $news['files']['bb.png']='bb.png';
      • $news['files']['cc.gif']='cc.gif';

二、實際取得某資料夾下的所有檔案名稱

  1. 利用opendir() 可以開啟某個資料夾並讀取裡面檔案
    $all_news = [];
    while ($news = $sth->fetch(PDO::FETCH_ASSOC)) {
        // 原檔目錄
        $dir = _PATH . "/uploads/{$news['id']}/";
        // 縮圖目錄
        $thumb_dir = _PATH . "/uploads/{$news['id']}/thumbs/";
        // 初始該文章包含的檔案
        $news['files'] = [];
        // 若該目錄存在的話
        if (is_dir($dir)) {
            // 就開啟該目錄
            if ($dh = opendir($dir)) {
                // 讀取底下所有檔案
                while (($file = readdir($dh)) !== false) {
                    // 只抓出檔案(不要目錄)
                    if (filetype($dir . $file) != 'dir') {
                        // 取得副檔名
                        $ext = pathinfo($file, PATHINFO_EXTENSION);
                        // 若副檔名是mp4,就將縮圖副檔名取代改為 jpg
                        $news['files'][$file] = ($ext == 'mp4') ? str_replace('.mp4', '.jpg', $file) : $file;
                    }
                }
                closedir($dh);
            }
        }
    
        // 過濾整個陣列
        $news = filter_var_array($news, FILTER_SANITIZE_STRING);
        $all_news[] = $news;
    }

     

    1. 其中用到了PHP的三元運算子(超級常用),即:
      條件?真:假;

      這個等同於if判斷的寫法

      if(條件) {
          真;
      } else{
          假;
      }
      

      str_replace('.mp4', '.jpg', $file) 代表搜尋「.mp4」,並取代為「.jpg」的意思,也就是把 xxx.mp4 換成 xxx.jpg 之意。

  2. 另外,也建立images資料夾,裡面放置一張預設圖片,若是文章沒有縮圖,就統一顯示該圖片。

:::

書籍目錄

展開 | 闔起

https%3A%2F%2Fcampus-xoops.tn.edu.tw%2Fmodules%2Ftad_book3%2Fpage.php%3Ftbsn%3D52%26tbdsn%3D1819

計數器

今天: 4082408240824082
昨天: 5069506950695069
總計: 5134530513453051345305134530513453051345305134530