סידור לפי שם

erez774

New member
סידור לפי שם ../images/Emo26.gif

אהלן אנשים, קודם כל אני רוצה לציין שהידע שלי הוא בעיקר ב-ASP. אך הפעם אני "נאלץ" להתמודד עם PHP בגלל "מגבלות" שרת. יש ברשותי את הקוד הבא:
<?php if ($handle = opendir('./')) { /* This is the correct way to loop over the directory. */ while (false !== ($file = readdir($handle))) { if ($file == ".." || $file == ".") continue; $size = filesize($file); if ($size >= 1024) { $size = round($size / 1024); $size = "$size KB"; } else { $size = "$size B"; } echo "<a href=\"$file\" target=_blank><img src=\"$file\" border=\"0\" width=80 height=55><font size=1>$file $size\n</font></a>"; } closedir($handle); } ?>​
שאמור לשלוף תמונות מתקיה ולהציג את כולם בדף אחד. משום מה יוצא שהוא מסדר את התמונות לפי סדר העלאתן לשרת. אני מעוניין שהתמונות יסודרו לפי שם - בסדר יורד. האם יש אפשרות כזו? אשמח לכל כיוון בנושא. תודה מראש
 

אמיר ט

New member
אפשרי, כמובן

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

erez774

New member
מה כבר ביקשתי ../images/Emo10.gif

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

<?php if ($handle = opendir('./')) { /* This is the correct way to loop over the directory. */ while (false !== ($file = readdir($handle))) { if ($file == ".." || $file == ".") continue; $size = filesize($file); if ($size >= 1024) { $size = round($size / 1024); $size = "$size KB"; } else { $size = "$size B"; } echo "<a href=\"$file\" target=_blank><img src=\"$file\" border=\"0\" width=80 height=55><font size=1>$file $size\n</font></a>"; } closedir($handle); } ?>​
 

פשוש

New member
באתר של PHP יש הרבה דוגמאות

אהלן++ תעיף מבט כאן ותקרא את הערות המשתמשים (user contributed notes) שם תמצא המון דוגמאות למיון שמות קבצים ויש שם אפילו דוגמה אחת שמתייחסת ישירות לשמות קבצים של תמונות. אגב, אני לא חושב שזה "מגבלות" שרת אלא יתרונות השרת.
 

erez774

New member
מצאתי את הקוד הזה בלינק שהבאת

אבל הוא מסדר את זה לפי סדר העלאתן לשרת ולא לפי שם. איך אפשר לגרום לו לסדר את התמונות לפי שם?
<? function CheckExt($filename, $ext) { $passed = FALSE; $testExt = "\.".$ext."$"; if (eregi($testExt, $filename)) { $passed = TRUE; } return $passed; } //Define an array of common extensions. $exts = array("gif","jpg$|\\.jpeg","png","bmp"); echo "<b>Images in this folder:</b>"; $dir = opendir("."); $files = readdir($dir); while (false !== ($files = readdir($dir))) { foreach ($exts as $value) { if (CheckExt($files, $value)) { echo "<a href=\"$files\">$files</a>\n"; $count++; //Keep track of the total number of files. break; //No need to keep looping if we've got a match. } } } echo $count." image(s) found in this directory.\n"; echo "<a href=\"".$_SERVER["PHP_SELF"]."\">Refresh</a>\n"; //Be a good script and clean up after yourself... closedir($dir); ?>​
 

פשוש

New member
הנה כך

<? function CheckExt($filename, $ext) { $passed = FALSE; $testExt = "\.".$ext."$"; if (eregi($testExt, $filename)) { $passed = TRUE; } return $passed; } //Define an array of common extensions. $exts = array("gif","jpg$|\\.jpeg","png","bmp"); $filecount=0; echo "<b>Images in this folder:</b>"; $dir = opendir("."); $files = readdir($dir); while (false !== ($files = readdir($dir))) { foreach ($exts as $value) { if (CheckExt($files, $value)) { $fileslist[$filecount]=$files; $filecount++; $count++; //Keep track of the total number of files. break; //No need to keep looping if we've got a match. } } } sort($fileslist); for($n=0;$n<=$filecount;$n++) echo "<a href=\"$fileslist[$n]\">$fileslist[$n]</a><br>\n"; echo $count." image(s) found in this directory.\n"; echo "<a href=\"".$_SERVER["PHP_SELF"]."\">Refresh</a>\n"; //Be a good script and clean up after yourself... closedir($dir); ?>​
כל העיניין כאן הוא להכניס את תוצאת הקריאה לתוך מערך ולמיין את המערך באמצעות אחת מן הפונקציות המובנות למיון מערכים. מה שכתבתי אינו אלגנטי במיוחד אבל זה פתרון מהיר כדי שתבין את הכיוון. תוכל לשנות את ה- for ל- foreach אם תרצה.
 

erez774

New member
זה בדיוק מה שרציתי - רק...

הייתי שמח אם היה אפשר לסדר את זה בסדר יורד. האם זה אפשרי? תודה רבה
 

פשוש

New member
המלצה חמה:

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