Weder Ausgabe noch Fehlermeldung --> Zeitüberschreitung

Chosi

Mitglied
Hallo,

ich habe gerade ein großes Problem mit einem PHP Skript.
Und zwar bekomme ich weder eine Ausgabe vom Skript, noch eine Fehlermeldung - auch nicht in der Logdatei.

Der Browser läd und läd, bis er dann schließlich mit der Meldung "Zeitüberschreitung" abbricht. Zusätzlich beansprucht der Apache (lokal) 100% CPU Auslastung für sich.

Nun weiß ich so überhauptnicht, wo ich bei der Fehlersuche ansetzen soll. Hat jemand eine Idee?
 
Mh, ich habe gerade ein kleines Testskript mit einer Endlosschleife laufen lassen:

Fatal error: Maximum execution time of 30 seconds exceeded in D:\Daten\webdev\kernel_test_projekt\www-docs\test.php on line 3

Das müsste ich bei dem anderen Skript ja eigentlich auch bekommen ...
 
Dieses Problem habe ich auch manchmal. Das tritt bei mir immer dann auf, wenn in dem Script irgendetwas sehr rechenintensives vorhanden ist.
 
Ich denke, ich habe das Problem gefunden, nur die Ursache ist mir leider schleierhaft:

Es geht um eine Methode, welche alle Dateien in einem Verzeichnis zurückgibt. Immer, wenn die Methode das ihr übergebene Verzeichnis nicht öffnen kann, tritt dieses merkwürdige Verhalten auf.

Eigentlich sollte sie ja eine Exception werfen, sobald sie das Verzeichnis nicht öffnen kann. Wenn ich die Funktion isoliert von der restlichen Applikation teste, klappt das auch wunderbar ohne Probleme.

Woran könnte das liegen?

Hier die Methode:
PHP:
public function getDirEntries($argDir, $argRegex)
  {
    if(!$argDir) throw new kernelException("KERNEL: Kein Pfad für Module gesetzt.");

    $dirHandle = opendir($argDir);

    // Exception werfen, wenn das Modulstammverzeichnis nicht geöffnet werden konnte:
    if(!$dirHandle) throw new kernelException("KERNEL: Konnte Modulverzeichnis nicht öffnen.");

    $this->addTrailingSlash($argDir);

    clearstatcache();
    $files = array();

    while($entry = readdir($dirHandle))
    {
      echo(".");
      if($entry[0] == '.') continue;

      // Aktueller Eintrag ist ein Verzeichnis --> getDirEntries() wird erneut aufgerufen:
      if(is_dir($argDir.$entry))
      {
        $files += $this->getDirEntries($argDir.$entry, $argRegex);
        continue;
      }

      $files[] = $argDir.$entry;

      // Aktueller Eintrag ist eine Datei --> Regex prüfen und evtl. an das Array anhängen:
      if(preg_match($argRegex, $entry))
      {
        $files[] = $argDir.$entry;
      }

    }

    return $files;
  }
 
Argh, das Skript treibt mich noch in den Wahnsinn ;)

Habe noch ein wenig weiter getestet. Schonwieder das gleiche Phänomen, anderer Kontext:
Ich benutze die Smarty Templateengine zur Ausgabe. Wenn ich in meinem Templatefile jetzt einen (Smarty)Fehler einbaue, wird dieser angezeigt und das Skript terminiert ganz normal. Ist im Template alles okay, tritt wieder das im ersten Posting geschilderte Problem auf ...
 
Zurück