[php] dir() bug of niet?

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • RSD
  • Registratie: Maart 2001
  • Laatst online: 08-02-2017
Ik was wat aan het stoeien met het inlezen van directories op een recursieve manier. Echter kwam ik het volgende tegen in een bepaalde directory.

De directory heeft de volgende inhoud:

map1 oct/07
map2 nov/07
map3 17/apr
map4 16may


$dir = dir("map1");
print_r($dir);
// geeft Array()


$dir = dir("map3");
print_r($dir);
// geeft een juist gevulde array terug

Dit vind ik erg raar. De mappen van vorig jaar leest hij niet in volgens mij. Is dat een bekend probleem of hoort dat zo?

Acties:
  • 0 Henk 'm!

  • Megamind
  • Registratie: Augustus 2002
  • Laatst online: 10-09 22:45
Een gevuilde array? Explain...

Acties:
  • 0 Henk 'm!

  • mithras
  • Registratie: Maart 2003
  • Niet online
Wat is de exacte inhoud van de map? En dan bedoel ik naam, permissie, eigenaar en groep. De kans dat je met een rechtenprobleem zit lijkt me hier groter. Een bug is dir() lijkt me namelijk vrij onmogelijk ;)

@Megamind: gevuild moet vast gevuld zijn.

Acties:
  • 0 Henk 'm!

  • user109731
  • Registratie: Maart 2004
  • Niet online
dir() geeft geen array terug, maar een instance van de Directory class. Deze heeft twee members: path en handle. Krijg je die te zien bij de tweede?

Wat meer info over php-versie, platform, etc. is ook wel handig.

[ Voor 31% gewijzigd door user109731 op 20-05-2008 21:11 ]


Acties:
  • 0 Henk 'm!

  • Voutloos
  • Registratie: Januari 2002
  • Niet online
Heb je uberhaupt wel de documentatie van dir() bekeken?

{signature}


Acties:
  • 0 Henk 'm!

  • mithras
  • Registratie: Maart 2003
  • Niet online
JanDM schreef op dinsdag 20 mei 2008 @ 21:10:
dir() geeft geen array terug, maar een instance van de Directory class. Deze heeft twee members: path en handle. Krijg je die te zien bij de tweede?

Wat meer info over php-versie, platform, etc. is ook wel handig.
print_r doet niets meer dan een readable print doen. Ook bij een object verwacht je in het eerste geval op zn minst een gevuld path...

Acties:
  • 0 Henk 'm!

  • RSD
  • Registratie: Maart 2001
  • Laatst online: 08-02-2017
Bij de tweede krijg ik idd een object met handle terug, zoals het hoort. De permissies zijn allemaal hetzelfde. De directories bevatten allemaal subdirectories en bestanden. Ik draai apache2 en PHP Version 5.2.4 op FreeBSD 6.2-RELEASE-p8. Documentatie heb ik inderdaad bekeken. Daar staat niks over dat hij directories van vorig jaar zoals map1 niet getoond worden. Het gaat om deze functie die ik gebruik!
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
function get_dir_tree($dir, $root = true) {
    static $tree;
    static $base_dir_length; 
    
    if ($root) { 
        $tree = array();  
        $base_dir_length = strlen($dir) + 1;  
    }
    echo $dir;
    print_r(dir($dir));
    echo is_dir($dir);
    if (is_file($dir)) {
        $tree[substr($dir, $base_dir_length)] = filemtime($dir); 
    } elseif (is_dir($dir) && $di = dir($dir)) {
        echo "ja";
        if (!$root) $tree[substr($dir, $base_dir_length)] = false;  
        while (($file = $di->read()) !== false) {
            if ($file != "." && $file != "..") {
                get_dir_tree("$dir/$file", false);  
            }
        }
        $di->close(); 
    }
    
    if ($root) {
        return $tree;    
    }
}

[ Voor 77% gewijzigd door RSD op 20-05-2008 21:18 ]


Acties:
  • 0 Henk 'm!

  • FTPlus
  • Registratie: Februari 2003
  • Laatst online: 10-11-2024

FTPlus

Pluisje

Of je kan natuurlijk ook scandir() gebruiken. ;) Deze functie retouneert alle bestanden in een bepaalde directory in een array.

http://nl.php.net/manual/en/function.scandir.php

-=Waiz=-


Acties:
  • 0 Henk 'm!

  • Patriot
  • Registratie: December 2004
  • Laatst online: 19:24

Patriot

Fulltime #whatpulsert

RSD schreef op dinsdag 20 mei 2008 @ 21:05:

Dit vind ik erg raar. De mappen van vorig jaar leest hij niet in volgens mij. Is dat een bekend probleem of hoort dat zo?
Waar baseer je dat op? Is het ook niet mogelijk om map2 te openen, en dan map4 weer wel?

Acties:
  • 0 Henk 'm!

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 21-09 02:21

Janoz

Moderator Devschuur®

!litemod

Het eerste waaraan ik denk is de / in de mapnaam. Lijkt me niet het meest handig gekozen teken. Of zit dat neit in de map naam?

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


Acties:
  • 0 Henk 'm!

  • Koelkasten
  • Registratie: Februari 2001
  • Laatst online: 08-09 19:51

Koelkasten

har har koelkast op je knar

Ook kan het zijn dat de owner / group van die map1 anders is dan die map3 waardoor php wel map3 mag uitlezen maar niet map1 (iets met permisions dus)

Dit kun je overigens terugvinden in je php log met errorreporting E_all

Sommige mensen....

Pagina: 1