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:
foreach ($files as $file) {
    $topics[substr ($file, 8)] = $file;
}
Az eredmény:
$topics = array (
    "akarmi.flv" => array (
        "20091203akarmi.flv",
        "20091204akarmi.flv",
        "20091210akarmi.flv"
    ),
    "valami.flv" => array (
        "20091201valami.flv",
        "20091204valami.flv",
        "20091212valami.flv"
    ),
);    
3

Reguláris kifejezésekkel

Poetro · 2009. Dec. 9. (Sze), 16.10
... valahogy így nézne ki:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html>
<head>
	<title>Untitled</title>
</head>

<body>
<?php
// Ide fogjuk eltárolni a fájlokat (már eleve csoportosítva).
$files = array('valami' => array(), 'barmi' => array(), 'akarmi' => array());
// Megnyitjuk a könyvtárat
if ($handle = opendir('.')) {
  // Végigmegyünk a fájlokon
  while (false !== ($file = readdir($handle))) {
    // Megnézzük, hogy illeszkedik-e a mintánkra.
    if (preg_match('/('. implode('|', 
      array_map('preg_quote', array_keys($files))) .')\.html$/', $file, $matches)) {
      // Beszúrjuk a megfelelő csoportba.
      $files[$matches[1]][] = $file;
    }
  }
  // Már nem akarunk többet olvasni a könyvtárból.
  closedir($handle);

  // Rendezzük a csoportokat csökkenő sorrendben.
  foreach ($files as &$groups) {
    rsort($groups, SORT_NUMERIC);
  }
}

/**
 * Link készítése a fájlnévből.
 */
function l($name) {
 return '<a href="'. rawurlencode($name) .'">'. $name .'</a>';
}
?>
<table>
  <thead>
    <tr>
      <td><?php print implode("</td>\n<td>", array_keys($files)); ?></td>
    </tr>
  </thead>
  <tbody>
    <tr>
    <?php foreach ($files as $items) : ?>
      <td>
        <?php if (count($items)) : ?>
        <ul>
          <li><?php print implode('</li><li>', array_map('l', $items)); ?></li>
        </ul>
        <?php endif; ?>
      </td>
    <?php endforeach; ?>
    </tr>
  </tbody>
</table>
</body>
</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:
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.
<?php
ini_set("display_errors",1);
trigger_error("Boff", E_USER_ERROR);
?>
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
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">  
<html>  
<head>  
    <title>localhost</title>  
</head>  
  
<body> 
<?php  
// Ide fogjuk eltárolni a fájlokat (már eleve csoportosítva).  
$files = array('hirek' => array(), 'hirado' => array(), 'aktualis' => array());  
// Megnyitjuk a könyvtárat  
if ($handle = opendir('images/videos')) {  
  // Végigmegyünk a fájlokon  
  while (false !== ($file = readdir($handle))) {  
    // Megnézzük, hogy illeszkedik-e a mintánkra.  
    if (preg_match('/('. implode('|',   
      array_map('preg_quote', array_keys($files))) .')\.flv$/', $file, $matches)) {  
      // Beszúrjuk a megfelelo csoportba.  
      $files[$matches[1]][] = $file;  
    }  
  }  
  // Már nem akarunk többet olvasni a könyvtárból.  
  closedir($handle);  
  
  // Rendezzük a csoportokat csökkeno sorrendben.  
  foreach ($files as &$groups) {  
    rsort($groups, SORT_NUMERIC);  
  }  
}  
  
/** 
 * Link készítése a fájlnévbol. 
 */  
function l($name) {  
 return '<a href="images/videos/'. rawurlencode($name) .'">'. $name .'</a>';  
}  
?>  
 
<table>  
  <thead>  
    <tr>  
      <td><?php print implode("</td>\n<td>", array_keys($files)); ?></td>  
    </tr>  
  </thead>  
  <tbody>  
    <tr>  
    <?php foreach ($files as $items) : ?>  
      <td>  
        <?php if (count($items)) : ?>  
        <ul>  
          <li><?php print implode('</li><li>', array_map('l', $items)); ?></li>  
        </ul>  
        <?php endif; ?>  
      </td>  
    <?php endforeach; ?>  
    </tr>  
  </tbody>  
</table>  
</body>  
</html>  
14

Php4

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