mogi: Apache zeigt merkwürdiges Verhalten bei einfacher for-Prozedur

Hallo.

Hilla hat heute einen Thread gestartet, in dem es um das Sortieren von Dateiinhalten geht. Da ich zufällig genau dasselbe Problem hatte, kam mir das sehr zu Hilfe. Ich habe das Skript ein bisschen umgeändert, so dass sie meinem Zweck dient.

Doch irgendwas ist komisch an meinem Apache:
Er erhöht bei der folgenden Prozedur seine rechenleistung um 50, lässt das Skript abstürzen, und wenn man dann das Script nochmals startet, dann ist die Rechenleistung des Apaches bei 99 und lässt meinen PC schwer stöhnen.
Ich beendete unter langem Warten den XAMPP Prozess, startete ihn neu, doch der gleiche Effekt trat wieder ein.

Hier erst mal das Skript, das meinen Rechner auslastet:

// Variabeln deklarieren
 $datei="../db/database.txt";
 $umbruch="-";
 $umbruch2="\n";

//Der Variable $daten den in Einträgen geteilten Dateiinhalt der Database zuweisen
 $daten=explode($umbruch,file_get_contents($datei));

// Weitere für den weiteren Verlauf wichtige Variabeln deklarieren
 $contents_daten=array_count_values($daten);
 $i=0;

// Die verschiedenen Einträge des Arrays $daten aufteilen
 for ($i; $i<$contents_daten; $i++){
  $daten=explode($umbruch2,$daten[$i]);
 }

foreach($daten as $element){
  echo $element."<br>";
 }

Was ist es, das das Skript zum Absturz bringt? Und warum will der Apache mich immer bis zur Weißglut bringen, wenn er mal wieder seine Rechenleistung aus nicht geklärten Umständen erhöht?

Danke euch schon im Voraus.

der mogi

  1. Hallo mogi,

    $contents_daten=array_count_values($daten);

    Ich wuerde mal tippen, dass dein Problem hier losgeht. array_count_values() returnt naemlich nciht, wie der Name vermuten laesst, ein Integer, sondern ein Array. Wenn Du wissen willst, wieviele Elemente ein Array hat und in deiner for-Schleife willst Du das, benutze count().

    for ($i; $i<$contents_daten; $i++){

    //  ----------^ du kannst keinen Int mit einem Array vergleichen

    Gruß,

    Dieter

    1. Dank count() stürzt der Apache wenigstens nicht mehr ab, das ist gut, aber ausgegeben wird immer noch nichts, auf jeden fall nicht das was ich ausgeben will.

      Am Code hat sich nichts bis auf das array_count_values()  (wurde zu count()  ) geändert. Was ist jetzt wieder falsch ?

      1. Hallo mogi,

        Steht dein error_reporting auf E_ALL und was wird ausgegeben

        $daten=explode($umbruch,file_get_contents($datei));

        Gibt print_r($daten); hier das erwartete Ergebnis aus

        $i=0;

        Warum wird $i nicht in der for-Schleife deklariert:
        for ($i = 0; $i < $contents_daten; $i++)
        {
          $daten = explode($umbruch2,$daten[$i]);
        Hier ueberschreibst Du $daten, das geht wohl nicht gut, waehl mal einen anderen Namen, also so:
        $neue_daten[] = explode($umbruch2,$daten[$i]);.
        Achte auf den []-Operator, sonst werden die Daten immer ueberschrieben. Ansonsten sollte spatestens jetzt ein Fehlermeldung kommen.

        Enthaelt print_r($neue_daten) jetzt, was du erwartet hast?

        Gruß,

        Dieter