closedir funktioniert nicht !

Einklappen
Dieses Thema ist geschlossen.
X
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • closedir funktioniert nicht !

    hi,
    ich hab ein problem mit dem opendir/closedir commands. es scheint so, als würde es beim closedir eine verzögerung bzw.
    gar keine freigabe des verzeichnisses geben. ich habe hier einen iis4 mit php4.03pl1 installiert und möchte gerne ein verzeichnis öffnen, alle files darin lesen und löschen, das verzeichnis schließen und anschließend selbiges löschen. soweit läuft es auch ganz gut, allerdings scheint er mir das verzeichhnis nach dem closedir nicht freizugeben, da ich jedes mal ein permission denied bekomme.
    versuche ich allerdings ein leeres verzeichnis direkt zu löschen
    (also ohne ein opendir/closedir), so klappt das wunderbar.
    daher glaube ich, daß es entweder ein delay gibt bzw. überhaupt
    keine freigabe. ist dieses problem bekannt ? weiß jemand rat ?
    hier der quelltext:

    $all=opendir($path);
    while ($file=readdir($all))
    {
    if ($file <> ".." and $file <> ".")
    {
    unlink($path.$file);
    unset($file);
    }
    }

    closedir($all);
    $path = substr($path,0,strlen($path)-1);
    $cmd = $path;
    $cmd = str_replace("\\\\","\\",$cmd);
    rmdir ($cmd);

    gruß jery


    p.s.: ich habe mittlerweile noch herausgefunden, daß closedir fehlerhaft beendet wird, also daß das verzeichnis nicht geschlossen wird. warum kann er an dieser stelle kein closedir machen ? mach ich hier nen denkfehler oder liegts am php ?

    php-Entwicklung | ebiz-consult.de
    PHP-Webhosting für PHP Entwickler | ebiz-webhosting.de
    die PHP Marktplatz-Software | ebiz-trader.de

  • #2
    hi,

    für alle die es vielleicht interessiert, habe ich mittlerweile eine lösung für das problem gefunden. es handelt sich dabei um einen bug, der scheinbar nur bei php4.0.3pl1 auftritt. nach dem öffnen eines verzeichnisses und anschließendem schließen gibt php das verzeichnis nicht mehr frei und es kann mit einem rmdir nicht gelöscht werden. folgendes funktioniert also nicht

    <?
    echo "Dies funktioniert nicht!";

    $pfad = "c:\test";

    mkdir ($pfad,"");

    $handle = opdendir($pfad);
    closedir($handle); // closedir ist IMMER False

    rmdir($handle);
    ?>

    wenn man aber nun den opdendir/closedir teil in eine funktion auslagert läuft es prima:

    <?
    function openit()
    {
    $handle = opdendir($pfad);
    closedir($handle); // closedir ist IMMER False
    }

    echo "Dies funktioniert nicht!";

    $pfad = "c:\test";

    mkdir ($pfad,"");

    openit();

    rmdir($handle);
    ?>

    hierbei könnte man, auch wenn es etwas unsauber ist, closedir einfach weglassen, da nach durchlaufen der funktion die resourcen wieder freigegeben werden. wie bereits erwähnt ist dies ein fehler im php und wird aller voraussicht nach im nächsten patchlevel/release behoben sein.

    gruß jery

    php-Entwicklung | ebiz-consult.de
    PHP-Webhosting für PHP Entwickler | ebiz-webhosting.de
    die PHP Marktplatz-Software | ebiz-trader.de

    Kommentar

    Lädt...
    X