ugrás a tartalomhoz

Mappalista, rendezés

tomoo · 2009. Dec. 9. (Sze), 12.46
Sziasztok!
Sajnos elértem a határaimat. Kaptam egy feladatot, amit szépen ki is találtam, és eljött a nagy probléma, a programozzunk péhápéban :/.
Szeretném a segítségeteket kérni.

A feladat az lenne, hogy egy mappából kellene a file-okat táblázatba rendezni. gondoltam én anno, hogy majd erre szükség lesz, ezért szerencsére egyértelmű nevek vannak a könyvtárban.

a filenevek így néznek ki:
20091209akarmi.flv
20091209barmi.flv
20091209valami.flv


ebből van egy pár, ezeket kellene rendezni úgy, a táblázat egiyk oszlopában csak az akarmik, másikban a barmik, harmadikban a valamik dátumai vannak egymás alá felsorolva.

arra rájöttem, hogy kel kiíratni mi van egy directory-ban. gondoloma a dir tartalmát kellene egy tömbbe berakni, azt pedig rendezni csökkenő sorba (hogy a táblában is csökkenő legyen majd a dátum, legfrissebb legfelül) majd szétválogatni ugye a típusok szerint (akarmi/barmi/valmi) végül kiíratni a táblázat megfelelő oszlopába. (természetesen a kiíratott adatok kattintható linkek) (ha nem így van kövezzetek meg, nem nagyon értek a php lelkületéhez)
(4oszlopos 1 soros táblázat)

nem tudom egy pro-nak mennyire bonyolult dolog. nekem jelenlegi php programozási tudással majdhogynem teljesíthetelen feladat. ha esetleg még pluszba bejönne 4. vagy 5. dolog azt már a fentiek alapján meg tudom csinálni (szerintem) de ez kiverte a biztosítékot :)

köszi előre is mindenkienk.
T.
 
1

directoryiterator

szaky · 2009. Dec. 9. (Sze), 14.41
http://www.php.net/manual/en/class.directoryiterator.php

Ezzel be tudsz olvasni egy könyvtárat, és a tartalmán végigfutni. A végigfutás közben szét tudod dobálni a dátumokat valamik szerinti tömbökbe, majd ezeket a tömböket érték szerint sorbarendezni. Innen már egyszerű kiiratni.
2

OMG

tomoo · 2009. Dec. 9. (Sze), 15.45
köszi az oldalt. még fordítom saját magamnak :) nem gondoltam vna hogy ez ilyen bonyi :D

szerk.
a link alapján nem jutottam előrébb. keresgélek még a neten hátha van valahol konkrétabb dolog. láma vok én ehez :D
4

Nem olyan bonyolult

vbence · 2009. Dec. 9. (Sze), 16.16
Igazából amit leírtál:
arra rájöttem, hogy kel kiíratni mi van egy directory-ban. gondoloma a dir tartalmát kellene egy tömbbe berakni, azt pedig rendezni csökkenő sorba

Ebben hol akadtál el? A PHP dir függvényénél van egy kis példa a listázásról, ezt belerakod egy tömbbe. A tömböt rendezed (array-függvények), majd a tömb elemein foreach-csel végigmenve átrakod a "tematikus" listákba, pl:
  1. foreach ($files as $file) {  
  2.     $topics[substr ($file, 8)] = $file;  
  3. }  
Az eredmény:
  1. $topics = array (  
  2.     "akarmi.flv" => array (  
  3.         "20091203akarmi.flv",  
  4.         "20091204akarmi.flv",  
  5.         "20091210akarmi.flv"  
  6.     ),  
  7.     "valami.flv" => array (  
  8.         "20091201valami.flv",  
  9.         "20091204valami.flv",  
  10.         "20091212valami.flv"  
  11.     ),  
  12. );      
3

Reguláris kifejezésekkel

Poetro · 2009. Dec. 9. (Sze), 16.10
... valahogy így nézne ki:
  1. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">  
  2. <html>  
  3. <head>  
  4.     <title>Untitled</title>  
  5. </head>  
  6.   
  7. <body>  
  8. <?php  
  9. // Ide fogjuk eltárolni a fájlokat (már eleve csoportosítva).  
  10. $files = array('valami' => array(), 'barmi' => array(), 'akarmi' => array());  
  11. // Megnyitjuk a könyvtárat  
  12. if ($handle = opendir('.')) {  
  13.   // Végigmegyünk a fájlokon  
  14.   while (false !== ($file = readdir($handle))) {  
  15.     // Megnézzük, hogy illeszkedik-e a mintánkra.  
  16.     if (preg_match('/('. implode('|',   
  17.       array_map('preg_quote'array_keys($files))) .')\.html$/'$file$matches)) {  
  18.       // Beszúrjuk a megfelelő csoportba.  
  19.       $files[$matches[1]][] = $file;  
  20.     }  
  21.   }  
  22.   // Már nem akarunk többet olvasni a könyvtárból.  
  23.   closedir($handle);  
  24.   
  25.   // Rendezzük a csoportokat csökkenő sorrendben.  
  26.   foreach ($files as &$groups) {  
  27.     rsort($groups, SORT_NUMERIC);  
  28.   }  
  29. }  
  30.   
  31. /** 
  32.  * Link készítése a fájlnévből. 
  33.  */  
  34. function l($name) {  
  35.  return '<a href="'. rawurlencode($name) .'">'$name .'</a>';  
  36. }  
  37. ?>  
  38. <table>  
  39.   <thead>  
  40.     <tr>  
  41.       <td><?php print implode("</td>\n<td>"array_keys($files)); ?></td>  
  42.     </tr>  
  43.   </thead>  
  44.   <tbody>  
  45.     <tr>  
  46.     <?php foreach ($files as $items) : ?>  
  47.       <td>  
  48.         <?php if (count($items)) : ?>  
  49.         <ul>  
  50.           <li><?php print implode('</li><li>'array_map('l'$items)); ?></li>  
  51.         </ul>  
  52.         <?php endif; ?>  
  53.       </td>  
  54.     <?php endforeach; ?>  
  55.     </tr>  
  56.   </tbody>  
  57. </table>  
  58. </body>  
  59. </html>  
5

Hihetetetlen

tomoo · 2009. Dec. 9. (Sze), 18.37
nagyon érdekes. először is köszi Poetro!
az érdekesség, hogy otthon, localhoston megy. létrehoztam azokat a dolgokat, tök jól elrendezgeti magának, vagyis nekem.
a szerverre felmásolva semmi nem jön vissza még hibaüzenet se. és ugyan azt a file-t tettem otthon is be, mint a szeróra. forrást ha megnézem üres doksi, szval valami nem tetszik neki. lehet valami ötlet, hogy ez miért fordulhat elő? mert ha nem tudta megnyitni a file-t akkor sírt egy sort, létrehoztam a dirt, pakoltam bele dolgokat, és megjelentek?

köszi, tomi.
6

Verzió

Poetro · 2009. Dec. 9. (Sze), 19.55
Először is nem tudom, milyen PHP verzió fut a szerveren a fenti kód elsődlegesen PHP 5 alá készült, PHP 4 alatt lehetnek vele problémák. Gondoltam, mivel a PHP 5 még 2004-ben jelent meg nem okozhat már problémát, hogy az legyen a szerveren. Nézegesd az error logot, vagy ami még fontosabb, hogy írasd ki.
7

display_errors

vbence · 2009. Dec. 9. (Sze), 20.24
A rendszergazdák nem szeretik kiírogatni a hibaüzeneteket, mert információt ad ki potenciális támadóknak a szerverről. (Szóval feltétlezd, hogy ki van kapcsolva a php iniben)

Próálkozz egy .htaccess fájllal következő tartalommal:
php_flag display_errors 1
8

vagy

a.d.a.m · 2009. Dec. 9. (Sze), 23.08
ideiglenesen a php állományban is bekapcsolhatod a következő sorral:
  1. ini_set("display_errors", 1);  
9

Nem minden esetben

vbence · 2009. Dec. 9. (Sze), 23.16
Azért nem írtam, mert ha fatal error van (szó esett a php4 != php5 témáról), akkor le se fut a szkript.
10

pedig nekem

a.d.a.m · 2009. Dec. 10. (Cs), 00.29
az alábbi kód megjeleníti a Fatal errort is.
  1. <?php  
  2. ini_set("display_errors",1);  
  3. trigger_error("Boff", E_USER_ERROR);  
  4. ?>  
Emlékeim szerint a fatal error a hibánál szakítja meg a script futását (mintha egy exit lenne), csak ezek a hibák általában elég korán bekövetkeznek ahhoz hogy bármilyen kimenet is keletkezzen. Persze lehet hogy rosszul tudom.
11

Syntax error

vbence · 2009. Dec. 10. (Cs), 01.29
Arra gondolok, ha szintaktikai jellegű probléma van, pl &-et használsz olyan helyen, ahol a php4 nem engedi meg, akkor sztem egy sor sem fog lefutni a szkriptből.
12

ismét

a.d.a.m · 2009. Dec. 10. (Cs), 10.31
tanultam valamit :)
13

némi siker :)

tomoo · 2009. Dec. 10. (Cs), 13.28
bocsi a lassú válaszokért csak melozni kell sokat és nagyon ritkán esek be gép elé.

na csak a .htacess-es megoldással ment, már kijön a hiba, többivel nem. a legszebb h a 24 sorban van a hiba, de az egy üres sor...

Parse error: parse error, unexpected '&', expecting T_VARIABLE or '$' in /var/www/ / / /listazo.php on line 24
  1. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">    
  2. <html>    
  3. <head>    
  4.     <title>localhost</title>    
  5. </head>    
  6.     
  7. <body>   
  8. <?php    
  9. // Ide fogjuk eltárolni a fájlokat (már eleve csoportosítva).    
  10. $files = array('hirek' => array(), 'hirado' => array(), 'aktualis' => array());    
  11. // Megnyitjuk a könyvtárat    
  12. if ($handle = opendir('images/videos')) {    
  13.   // Végigmegyünk a fájlokon    
  14.   while (false !== ($file = readdir($handle))) {    
  15.     // Megnézzük, hogy illeszkedik-e a mintánkra.    
  16.     if (preg_match('/('. implode('|',     
  17.       array_map('preg_quote'array_keys($files))) .')\.flv$/'$file$matches)) {    
  18.       // Beszúrjuk a megfelelo csoportba.    
  19.       $files[$matches[1]][] = $file;    
  20.     }    
  21.   }    
  22.   // Már nem akarunk többet olvasni a könyvtárból.    
  23.   closedir($handle);    
  24.     
  25.   // Rendezzük a csoportokat csökkeno sorrendben.    
  26.   foreach ($files as &$groups) {    
  27.     rsort($groups, SORT_NUMERIC);    
  28.   }    
  29. }    
  30.     
  31. /**  
  32.  * Link készítése a fájlnévbol.  
  33.  */    
  34. function l($name) {    
  35.  return '<a href="images/videos/'. rawurlencode($name) .'">'$name .'</a>';    
  36. }    
  37. ?>    
  38.    
  39. <table>    
  40.   <thead>    
  41.     <tr>    
  42.       <td><?php print implode("</td>\n<td>"array_keys($files)); ?></td>    
  43.     </tr>    
  44.   </thead>    
  45.   <tbody>    
  46.     <tr>    
  47.     <?php foreach ($files as $items) : ?>    
  48.       <td>    
  49.         <?php if (count($items)) : ?>    
  50.         <ul>    
  51.           <li><?php print implode('</li><li>'array_map('l'$items)); ?></li>    
  52.         </ul>    
  53.         <?php endif; ?>    
  54.       </td>    
  55.     <?php endforeach; ?>    
  56.     </tr>    
  57.   </tbody>    
  58. </table>    
  59. </body>    
  60. </html>    
14

Php4

vbence · 2009. Dec. 10. (Cs), 17.13
PHP4-ed van, sürgősen követelj ötöst :) Addig:
  1. foreach ($files as &$groups) {      
  2.   rsort($groups, SORT_NUMERIC);      
  3. }      
helyett
  1. foreach ($files as $idx => $groups) {      
  2.   rsort($groups, SORT_NUMERIC);  
  3.   $files[$idx] = $groups;  
  4. }