Avatar billede larma Nybegynder
12. marts 2007 - 20:34 Der er 8 kommentarer og
1 løsning

Problemer med listing av mapper

Jeg har laget en php funksjon som lister alle mappene som ligger under en oppgitt plassering. Det meste virker tilfredstillende, men når jeg tilfører et dokument i en av mappene så blir også dokumentet listet som om det var en mappe (og det skal det jo ikke). Jeg kan ikke helt gjennomskue hva som er forkert, eller hva kode som bør tilføres, og håper derfor på å kunne få litt hjelp.

funksjonen sånn den fremstår nå:
function read_dir($dir) {
  $array = array();
  $d = dir($dir);
  while (false !== ($entry = $d->read())) {
      if($entry!="." && $entry!="..") {
          $entry = $dir.'/'.$entry;
          if(is_dir($entry)) {
              $array[] = $entry;
              $array = array_merge($array, read_dir($entry));
          } else {
              $array[] = $entry;
          }
      }
  }
  $d->close();
  return $array;
}

Mvh
LarMa
Avatar billede gentlebug Nybegynder
12. marts 2007 - 20:46 #1
vel bare sådan her:
function read_dir($dir) {
  $array = array();
  $d = dir($dir);
  while (false !== ($entry = $d->read())) {
      if($entry!="." && $entry!="..") {
          $entry = $dir.'/'.$entry;
          if(is_dir($entry)) {
              $array[] = $entry;
              $array = array_merge($array, read_dir($entry));
          }
      }
  }
  $d->close();
  return $array;
}
har blot fjernet:
else {
              $array[] = $entry;
efter is_dir, is_dir tjekker som navnet lyder om $entry er en mappe eller ej.
Avatar billede jakobdo Ekspert
12. marts 2007 - 20:51 #2
Eller via glob()
http://www.php.net/glob

function listdirs($dir) {
  static $alldirs = array();
  $dirs = glob($dir . '/*', GLOB_ONLYDIR);
  if (count($dirs) > 0) {
      foreach ($dirs as $d) $alldirs[] = $d;
  }
  foreach ($dirs as $dir) listdirs($dir);
  return $alldirs;
}

echo '<pre>';
print_r(listdirs('/some/path'));
echo '</pre>';
Avatar billede larma Nybegynder
12. marts 2007 - 21:18 #3
gentlebug: Det var jo tydelig hva som var forkert når du skriver det ;) , men har ikke lavet koden selv så var litt usikker. Men takk.

jakobdo: Mener du det er noen fordeler ved å bruge den funksjonen (med globe) som du har lavet i stedet for? Om ikke annet er det interessant med andre alternativer, for å lære.

Selvom gentlebug var først ute med svar, håper jeg det er greit for at dere deler pointsene, så skriv et svar begge to..
Avatar billede jakobdo Ekspert
12. marts 2007 - 21:27 #4
Jeg brugte også opendir/readdir osv. da jeg startede med php.
Så tror jeg nok coderdk introducerede mig for glob() og den er meget smartere at bruge.
Kig lige på linket til php.net og du vil se hvorfor.
Avatar billede larma Nybegynder
14. marts 2007 - 10:59 #5
Ja, det virker som det er en nemmere måte å gjøre det på, eller med kan lave det med mindre kode. Men jeg leste også under en "note" på http://www.php.net/glob at glob() ikke er like hurtig som opendir. Men det var snakk om mikroskopiske verdier ;) Men post et svar, så får du dine points.
Avatar billede larma Nybegynder
14. marts 2007 - 11:10 #6
Men lige en lille ting til. Den funksjonen som jeg postet først brukes til å liste alle mappene i et bestemt dir. I tillegg har jeg en formular under de listede mappene, som gir muligheten til å lave en ny mappe under den mappen vedkommende ønsker (det velger han ved å hake av i en chexboks ved siden av den ønskede mappen). Men listen med mapper "refreshes" ikke umidelbart når det trykkes på submit, jeg må da trykke på refresh i browseren, eller på linken til siden for at den nye mappen skal vises. Så mitt spørsmål er hvordan jeg får siden til å refreshe siden etter at det blir trykket på submit. (tabellen med de listede mappene og "opprett ny mappe" formularen ligger inne i samme form).
Avatar billede jakobdo Ekspert
14. marts 2007 - 18:06 #7
Det med checkboxe har jeg desværre ikke noget ide om. Der skal du nok vise lidt mere kode eller oprette et nyt spørgsmål til det.

Du får lige et svar.
Avatar billede larma Nybegynder
14. marts 2007 - 19:47 #8
Ettersom jeg ikke har hørt noe mer (fått noe svar) fra gentlebug får du alle poengene. Takk for hjelp iallfall.
Avatar billede jakobdo Ekspert
14. marts 2007 - 19:57 #9
Takker for point.
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