תחי ישראל - אין לנו ארץ אחרת

תחי ישראל -אין לנו ארץ אחרת

תרגול עבודה עם קבצים ותיקיות ב-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 כוכבים

 

 

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

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

שימו לב! הסקריפטים במדריכים מיועדים למטרות לימוד בלבד. כשאתם עובדים על הפרויקטים שלכם אתם צריכים להשתמש בספריות וסביבות פיתוח מוכחות, מהירות ובטוחות.

המשתמש באתר צריך להיות מודע לכך שאם וכאשר הוא מפתח קוד בשביל פרויקט הוא חייב לשים לב ולהשתמש בסביבת הפיתוח המתאימה ביותר, הבטוחה ביותר, היעילה ביותר וכמובן שהוא צריך לבדוק את הקוד בהיבטים של יעילות ואבטחה. מי אמר שלהיות מפתח זו עבודה קלה ?

השימוש שלך באתר מהווה ראייה להסכמתך עם הכללים והתקנות שנוסחו בהסכם תנאי השימוש.

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

 

 

ענה על השאלה הפשוטה הבאה כתנאי להוספת תגובה:

איך אומרים בעברית אינטרנט?

 

תמונת המגיב

גרגמל בתאריך: 10.04.2024

קצר תמציתי ומובן