Markus: Endlosschleife bei include()-Anweisung

Beitrag lesen

Hallo,

ich habe folgendes Problem:

Ich binde mittels include() dynamisch Dateien eines Verzeichnisses ein. Dabei kommt php in eine Endlosschleife.

Im Quelltext schaut das folgendermassen aus:

/*
 * Einlesen der Verzeichnis-Einträge im Verzeichnis
 * './defaults'
 * Das Ergebnis ist ein assoziatives Array der Form
 * array( 'filea' => './defaults/filea.irgendwas.php',
 *        'fileb' => './defaults/fileb.irgendwas.php',
 *        ... );
 */
$data = scan('./defaults');
// Schlüssel aus dem assoz. Array extrahieren:
$keys = array_keys($data);
for ($i = 0; $i < count($keys); $i++) {
   include($data[$keys[$i]]);
}

Das Einlesen der einzubindenden Dateinamen funktioniert einwandfrei, das habe ich mir ausgeben lassen. Die Grössen der Arrays $keys und $data stimmen mit den aktuellen überein.

Die Dateien sind php-Skripte, die sich an folgendes Schema halten:
<?php
   // Jeweils anderer Variablenname pro Datei.
   // Übereinstimmung mit $data im obigen Code-Fragment
   // zufällig - in den eigentlichen Dateien nicht gegeben
   $data = array ( array ( 'a', 'b', 'c', ... ),
                   array ( '1', '2', '3', ... ) );
   // Heisst ebenfalls in jeder eingebundenen Datei anders:
   $dataTable = new CDataTable();
   for ($i = 0; $i < count($data); $i++) {
      $current = $data[$i];
      $dataTable->insert($current[0],$current[1],...);
   }
?>

php kommt nicht sofort in eine Endlosschleife, sondern arbeitet die erste Datei ordentlich ab, die zweite Datei auch, versucht dann aber unmittelbar danach die gerade eingebundene Datei nochmal einzubinden. Da $dataTable->insert() einen Datensatz in eine mysql-Datenbank einträgt, bekomm ich natürlich sql-fehler wegen Schlüssel-Duplikaten beim Einfügen.

Ich habe versucht, das ganze mit include_once() zu umgehen, aber php versucht trotzdem die eine Datei mehrmals einzubinden. Nicht mehr in einer Endlosschleife, aber öfter als es sollte.

Ich hoffe, ich hab alle notwendigen Informationen drin und jemand hat eine Idee. Danke schon mal - wenigstens fürs Durchlesen, dauert ja auch seine Zeit ;-)

Markus