Avatar billede hmortensen Nybegynder
29. juni 2003 - 13:47 Der er 28 kommentarer og
1 løsning

Sortere filer i mappe

Kan man sortere filer fra en mappe efter oprettelses dato ?
Avatar billede fangel Nybegynder
29. juni 2003 - 13:52 #1
sagtens... man skal bare tænke sig lidt om... ;) (jeg er ikke så god til at bruge sort og andet.

om 10 min har jeg lavet script der laver et 3d array med et stigende id som 1 led, og filnavn, størrelse og oprettelsesdato i andet led... så kan du selv lege med sort...

Morten
Avatar billede hmortensen Nybegynder
29. juni 2003 - 13:53 #2
Det var sort, og jeg mener farven sort

Skal nok lige ha noget hjælp til at fatte hvad du mente der
Avatar billede fangel Nybegynder
29. juni 2003 - 13:56 #3
ok...

laver et script der laver et array som dette...

$filer = {
              [0] = {
                      [filename] = "file1.php"
                      [filesize] = 2043934
                      [lastMod] = UNIX-TIMESTAMP
              }
              [1] = {
                      [filename] = "file2.php"
                      [filesize] = 4132414
                      [lastMod] = UNIX-TIMESTAMP
              }
}

hvis du forstår...

---

så skal du bare bruge en funktion til at sortere, men dem har jeg aldrig sat mig ind i...

Morten
Avatar billede hmortensen Nybegynder
29. juni 2003 - 13:58 #4
Det hjalp lidt, hvis jeg bare kan få dem liste som du lige ha vidst
Avatar billede erikjacobsen Ekspert
29. juni 2003 - 14:05 #5
Kan du bruge dette:

<?

  class fil {
  var $fil,$oprettelse;
 
      function fil($navn,$oprettelse) {
        $this->navn=$navn;
        $this->oprettelse=$oprettelse;
      }

    }

  function filcmp ($a, $b) {
  if ($a->oprettelse == $b->oprettelse) return 0;
  return ($a->oprettelse > $b->oprettelse) ? 1 : -1;
}


  $dir='.';
  $d = opendir($dir);
  while ($f=readdir($d)) {
    if ($f!='.' && $f!='..') {
        $s=stat("$dir/$f");
        $a[]=new fil($f,$s[10]);
    }
  }
  closedir($d);

  usort ($a, "filcmp");

  reset($a);
  foreach ($a as $val) {
    print date("Y-m-d h:i:s",$val->oprettelse).": $val->navn<br>\n";
  }
?>
Avatar billede fangel Nybegynder
29. juni 2003 - 14:08 #6
så, nu har jeg lavet det...

---
<?php

/*
Name:        FileListLib.php
Author:        Morten Fangel
Date:        6.29.03
/*

function FileList($dir){
  $returnArr = array();

  if ($handle = opendir($dir)) {
    while (false !== ($file = readdir($handle))) {
        if ($file != "." && $file != "..") {
          if(is_dir($file)){
            $returnArr[]['type'] = "DIR";
            $returnArr[]['name'] = $file;
          }
          else {
            $returnArr[]['type'] = "FILE";
            $returnArr[]['name'] = $file;
            $returnArr[]['size'] = filesize($dir . "/" . $file);
            $returnArr[]['lastMod'] = filemtime($dir . "/" . $file);
          }
        }
    }
    closedir($handle);
  }

  return $return;
}

$Arr = FileList("offer/mappe");
print_r($Arr);

?>
---
Avatar billede hmortensen Nybegynder
29. juni 2003 - 14:10 #7
erikjacobsen, jeg prøvede lige med dit, men får en røvfuld af fejl.

Warning: OpenDir: Permission denied (errno 13) in /var/www/html/sort.php on line 20

Warning: readdir(): supplied argument is not a valid Directory resource in /var/www/html/sort.php on line 21

Warning: closedir(): supplied argument is not a valid Directory resource in /var/www/html/sort.php on line 27

Warning: Wrong datatype in usort() call in /var/www/html/sort.php on line 29

Warning: Variable passed to reset() is not an array or object in /var/www/html/sort.php on line 31

Warning: Invalid argument supplied for foreach() in /var/www/html/sort.php on line 32

Skal nok lige siges at det er et dir uden for webserveren. skal det chmod's ?
Avatar billede erikjacobsen Ekspert
29. juni 2003 - 14:12 #8
Udenfor webserveren? HVad skriver du som dir? "http://...." - det kan du godt opgive ;(
Avatar billede hmortensen Nybegynder
29. juni 2003 - 14:13 #9
dir=/server1/hlds_l/cstrike/logs/

Det skal liste log filer fra en cs server
Avatar billede fangel Nybegynder
29. juni 2003 - 14:15 #10
gæt selv hvorfor du får fejl... et hint:

--
Warning: OpenDir: Permission denied (errno 13) in /var/www/html/sort.php on line 20
---

bedre hint:
---
...Permission denied...
---

Morten
Avatar billede hmortensen Nybegynder
29. juni 2003 - 14:15 #11
Nu chmod'ede jeg dir'et til 0666, og nu lister den en fejl på linie 23 for hver fil der er.

Linie 23: $s=stat("$dir/$f");

Men den lister fil navnene nedunder, så det er tæt på
Avatar billede erikjacobsen Ekspert
29. juni 2003 - 14:18 #12
0555 er bedre
Avatar billede hmortensen Nybegynder
29. juni 2003 - 14:57 #13
det hjælper da ikke at chmod til 0555
Avatar billede hmortensen Nybegynder
29. juni 2003 - 15:01 #14
det gjorde det faktisk.

så lige en ting mere:
link til visning af indhold
Avatar billede erikjacobsen Ekspert
29. juni 2003 - 15:03 #15
det klarer du i udskriften - du laver bare et <a>-tag
Avatar billede fangel Nybegynder
29. juni 2003 - 15:07 #16
arhh...

lav selv link, på siden der indlæser:

--
<?php
echo readfile(FILNAVN);
?>

eller noget i den stil...

---

evt benyt mit system:

http://80.199.149.144/DeSi_OFMS_1rc4.zip

stadig en del fejl og mangler, men jeg gidder ikke arbejde mere på det...

---

Morten
Avatar billede hmortensen Nybegynder
29. juni 2003 - 15:12 #17
bare href=$PHP_SELF?action=readfile ??
hvordan ved den at det er den fil ?
Avatar billede fangel Nybegynder
29. juni 2003 - 15:40 #18
sæt en ?fil=$file&action=read

eller noget i den dur

Morten
Avatar billede hmortensen Nybegynder
29. juni 2003 - 15:48 #19
Havde jeg også gjorst, men jeg havde glemt stien, og så kunne den self ik åbne den.

mange tak for hjælpen
Avatar billede erikjacobsen Ekspert
29. juni 2003 - 16:55 #20
Nu kan jeg huske at dine filer ligge udenfor din web-mappe.

Så er en ?fil=$file megafarlig, da selv en mindrebegavet hacker vil
kunne hente vilkårlige filer fra din maskine. Det skal man ikke gøre
uden et par sikkerhedsting!
Avatar billede hmortensen Nybegynder
29. juni 2003 - 17:12 #21
hvad skal jeg så gøre ?
Avatar billede fangel Nybegynder
29. juni 2003 - 17:14 #22
sørre for at have noget validering af filnavne, så folk ikke bare kan skrive ?fil=/etc/rc.d&action=read, og så læse hele din rc.d fil...

Morten
Avatar billede hmortensen Nybegynder
29. juni 2003 - 17:16 #23
nu henter den så sådan her:
read("/sti/til/der/hvor/det/ligger/$fil")

og der ligger kun de filer der, og siderne er password beskyttede, så det er vel i orden
Avatar billede erikjacobsen Ekspert
29. juni 2003 - 17:21 #24
Nej, det er ikke godt nok
Avatar billede erikjacobsen Ekspert
29. juni 2003 - 17:29 #25
read("/sti/til/der/hvor/det/ligger/../../../../../meget/hemmeligt/sted/dagbog.doc")
Avatar billede hmortensen Nybegynder
29. juni 2003 - 17:48 #26
der ligger ikke noget efter der....
Avatar billede erikjacobsen Ekspert
29. juni 2003 - 17:50 #27
Det er ikke "efter". Det er "op". Der er adgang til alt.
Avatar billede hmortensen Nybegynder
29. juni 2003 - 17:51 #28
ahhh, nu forstod jeg hvad du mente... sov lige

hvad kan jeg gøre ved det
Avatar billede fangel Nybegynder
29. juni 2003 - 17:54 #29
lave en

if(substr($navPaaFilDerSkalAabnes, "..")){
  echo "kan du lade være med at prøve på noget... forbandede scriptkiddie!";
}
else{
  readfile(...);
}

eller noget i den dur

Morten
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester