Kirjautuminen

Haku

Tehtävät

Keskustelu: Nettisivujen teko: readdir päivämäärän mukaan

llr [13.06.2004 02:04:44]

#

Pitäisi saada readdir palauttamaan tiedostot päivämäärän mukaan ( Muokkaus aika ) Elikkäs tälläinen Screnshottien hakija käytössä:

<?php
$dir = "./screenshots/";

$files = 0;
$kertoin = 0;
echo "<table align=\"center\" width=\"400\"><tr><td>";
if (is_dir($dir)) {
   if ($dh = opendir($dir)) {
   echo "<table align=\"center\">";
   while (($file = readdir($dh)) !== false) {
      if ($file != "." && $file != "..") {
         echo "<td width=\"150\" class=\"imageborder\"><a           href=\"http://koti.mbnet.fi/~smannila/zro/screenshots/$file\"><img class=\"image\" height=\"150\" width=\"150\" src=\"http://koti.mbnet.fi/~smannila/zro/screenshots/$file\"></a></td>";
$files = $files + 1;
if ($files > "3" && $kertoin == "0") {
$kertoin = 7;
         echo "<tr>";
      }
      if ($files > $kertoin && $kertoin <> "0") {
         $kertoin = $kertoin + 4;
         echo "<tr>";
      }
   }
}
closedir($dh);
echo "</table>";
}
}
echo "</td></tr></table>";

echo "<br>Totally $files files";

?>

ajv [13.06.2004 02:19:22]

#

Luet ensin tiedostot taulukkoon, sorttaat taulukon ja tulostat. Laitat vaikka taulukon muotoon:
$taulukko[filemtime("tiedosto.pääte")] = "tiedosto.pääte"
Muistaaksen ksort() palvelee parhaiten tarkoituksiasi(siis jos taulukko on tuossa muodossa).

Edit: Nii joo ja muistin itsekkin olleeni samanlaisen tilanteen edessä: https://www.ohjelmointiputka.net/keskustelu/2669-tiedostojen-lukeminen-taulukkoon

llr [13.06.2004 15:17:19]

#

Tota niin, ei oikein tahtonut pelittää. Tässä olis vielä tää koko koodi. Ja tällästä hervas: "Warning: Cannot use a scalar value as an array in /mbnet/s/smannila/zro/filerz/xuploadedscreenshots.php on line 11" Ja toi on rivi jossa napataan tiedot Taulukkoon. Ja kyseessähän on siis kuva tiedostoja.

<?php
$dir = "./screenshots/";
$files = array();
$files = 0;
$kertoin = 0;

if (is_dir($dir)) {
   if ($dh = opendir($dir)) {
       while (($file = readdir($dh)) !== false) {
          if ($file != "." && $file != "..") {
             $files[filemtime($dir . "/" . $file)] = $file;
          }
       }
       closedir($dh);
   }
}

ksort($files);

$files = array_reverse($files);

      echo "<table align=\"center\" width=\"400\"><tr><td>";

         echo "<table align=\"center\">";

            for($i = 0; $i < count($files); $i++) {
             echo "<td width=\"150\" class=\"imageborder\"><a href=\"http://koti.mbnet.fi/~smannila/zro/screenshots/$files[$i]\"><img class=\"image\" height=\"150\" width=\"150\" src=\"http://koti.mbnet.fi/~smannila/zro/screenshots/$files[$i]\"></a></td>";
             $files = $files + 1;
             if ($files > "3" && $kertoin == "0") {
                $kertoin = 7;
                echo "<tr>";
             }
             if ($files > $kertoin && $kertoin <> "0") {
                $kertoin = $kertoin + 4;
                echo "<tr>";
             }
            }

         echo "</table>";

      echo "</td></tr></table>";

echo "<br>Totally $files files";

?>

tsuriga [13.06.2004 16:14:05]

#

Käytät taulukon indekseinä tiedostojen muokkausaikaa:

$files[filemtime($dir . "/" . $file)] = $file;

ja miksi $files julistetaan eka taulukoksi ja sitten nollaksi?

EDIT: Korjausehdotus: Käytä esim. kaksiulotteista taulukkoa, tosin silloin tarvitset array_multisorttia, mutta siihen löytyy ohjeita edellisistä keskusteluista.

llr [13.06.2004 16:51:17]

#

Elikkä katoin tosta toisesta threadista vinkkiä, en tiedä itse asiassa mitä varten arrayn tunnuksena käytetään tiedoston muokkaus aikaa, ja kuinka arvot pitäisi tämän perusteella saada oikeesta solusta, mutta... joo. ;S

EDIT: Kokeilen vähän tota nyt omilla keinoilla

EDIT2: Oho!, ihmettelin tota kommenttia miksi eka julistetaan Taulukoksi ja sitten nollaksi. Sitten vasta huomasinkin, että $files muuttuja onkin jo olemassa. Eli nyt pelittää. Kiitos =P

tsuriga [13.06.2004 17:19:38]

#

Hups jätäpäs edellinen korjausehdotukseni huomiotta ja vaihda vaan toho forin tilalle foreach:
foreach($files as $file => $maketime) { .. }
niin johan pelittää. Aajoo ja:
$files = $files + 1;
Muuta tuo muuttuja jonkin muun nimiseksi, sillä sitä käyttää jo tuo $files-taulukko. Tuo hoituu myös näin:
$muuttuja+=1; tai $muuttuja++;

llr [13.06.2004 19:08:58]

#

Jeps, sain ton toimimaan jo ennemmin. Mutta kiitos

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta