תרגול עבודה עם קבצים ותיקיות ב-PHP: יצירת CSV עם פירוט כל התמונות בתיקייה

מחבר:
בתאריך:

במדריכי ה-PHP הקודמים למדנו כיצד לעבוד עם קבצים ותיקיות. כולל:  כתיבה וקריאה של קבצים, העלאת קבצים לשרת באמצעות טופס ועבודה עם CSV.

במדריך הנוכחי, נמשיך ללמוד על עבודה עם קבצים ותיקיות באמצעות דוגמת קוד שמשתמשת בפונקציות שכבר למדנו וגם כוללת חדשות שחובה להכיר.

הסקריפט במדריך רושם את כל התמונות בתיקייה ובתיקיות המישנה לתוך קובץ CSV. כדי להשיג את המטרה הקוד סורק את כל הקבצים והתיקיות, משנה את שמות התיקיות ורושם את מה שהוא מוצא לקובץ CSV.

לצורך הדוגמה, העליתי לשרת תיקיית תמונות הכוללת מספר תיקיות משנה. כל תיקיית משנה מכילה תמונות של בעל חיים אחר שהורדתי מאתר pixabay.com

אתה יכול להוריד את כל הקבצים במדריך מהקישור: images_to_csv.zip

מבנה התיקיות כולל היררכיה של תיקיות ותיקיות משנה שמחזיקות את התמונות:

uploads/
└── animals
    ├── maroon raccoon
    │   ├── animals-4008955__340.jpg
    │   └── racoon-1414027__340.jpg
    ├── thorny hedgehog
    │   ├── hedgehog-1644129__340.jpg
    │   ├── hedgehog-4397260__340.jpg
    │   └── hedgehog-child-3070176__340.jpg
    └── wild geese
        ├── goose-178143__340.jpg
        ├── goose-4015392__340.jpg
        ├── goose-4148122__340.jpg
        └── greylag-goose-2139296__340.jpg
  • בתוך התיקייה uploads נמצאת התיקייה animals.
  • בתוך התיקייה animals ישנם 3 תת-תיקיות המכילות תצלומים. כל אחת של בעל חיים אחר.

הקוד במדריך עושה את הדברים הבאים:

  1. יוצר רשימה של תיקיות המשנה.
  2. משנה את השם של כל אחת מתיקיות המשנה למספר מזהה ייחודי.
  3. עובר על רשימת תיקיות המשנה ומייצר מערך שכל פריט בו כולל מידע מאחת מתתי התיקיות כולל: שם בעל החיים והנתיב להצגת התמונות בדפדפן.
  4. עובר על המערך שיוצר בסעיף הקודם וכותב את תוכנו לקובץ CSV.

הסקריפט המלא כולל הערות שיעזרו לכם לעקוב אחרי מה שעשיתי:

<?php

function images_to_array($images_dir = "", $your_site = "")
{
    // array to collect the data
    $group_records = [];
    
    // proceed only if the images directory exists
    if (!file_exists($images_dir)) 
    { 
        return $group_records; 
    }
    
    // get a list of all the sub directories within the images_dir
    $group_dirs = glob($images_dir . '*' , GLOB_ONLYDIR);
    
    // each group will be assigned a unique id
    $id = 1; 
    
    // within each sub directory 
    foreach($group_dirs as $item_dir)
    {
        // get the name of the last directory in the path
        $item_dir_parts = explode('/', $item_dir);
        $item_dir_end = end($item_dir_parts);

        // get the current directory's relative path
        $old_dir = "{$images_dir}{$item_dir_end}/";
        
        // get the name of the item by replacing underscores with spaces
        $item_name = str_replace('_', ' ', $item_dir_end);
        
        // rename the directory
        $new_dir = "{$images_dir}{$id}/";
        rename($old_dir, $new_dir);
        
        // scan the directory to find all the image
        $files = array_diff(scandir($new_dir), array('.', '..'));
        
        // assemble each image's URL
        $files_list = [];
        foreach($files as $file)
        {
            $files_list[] = "{$your_site}{$new_dir}{$file}";
        }
        
        // stick at the beginning of each array item the id and item's name
        array_unshift($files_list, $item_name);
        array_unshift($files_list, $id);
        
        // add the data of each group into the array
        $group_records[$id] = $files_list;

        $id++;
    }

    
    return $group_records;
}

function array_to_csv($group_records = [], $csv_file = "")
{
    $file = fopen($csv_file,"w");

    fputcsv($file, ['id','item_name','images']);
    
    foreach ($group_records as $line)
    {
      fputcsv($file, $line);
    }

    fclose($file);
}

// get an array of all the images by animal
$arr = images_to_array($images_dir = "uploads/animals/", $your_site= "//localhost/");

// write the array into the CSV file
array_to_csv($group_records = $arr, $csv_file = "./animals.csv");

לכל מדריכי ה-PHP

 

אהבתם? לא אהבתם? דרגו!

0 הצבעות, ממוצע 0 מתוך 5 כוכבים

 

 

הוסף תגובה חדשה

 

= 8 + 4