Kris: Ausgabe einer TXT Datei in Zeilen - Fehler ?

Halli Hallo

dauernd kriege ich den Fehler :

Parse error: parse error, unexpected T_FOREACH in /var/www/.../logs_seven.php on line 12

# Logs festlegen
07 error_reporting(0);
08 for ($i = 0; $i < 7; $i++) {
09 $log[$i] = "". $_GET['logs'] ."_" . strftime ("%d-%m-%Y", strtotime("-". $i ." day")) . ".txt";
10 $lines[$i] = file ('logs/'. $log[$i] .'');
11 $linez[$i] = count($lines[$i]);
12 $ausgabe[$i] = foreach ($lines[$i] as $line_num => $line) {echo "" . htmlspecialchars($line) . "<br>";};}
13 error_reporting(E_ALL);

kann mir jemand sagen warum ? :/

  1. echo $begrüßung;

    Parse error: parse error, unexpected T_FOREACH in /var/www/.../logs_seven.php on line 12
    12 $ausgabe[$i] = foreach ($lines[$i] as $line_num => $line) {echo "" . htmlspecialchars($line) . "<br>";};}
    kann mir jemand sagen warum ? :/

    foreach ist keine Funktion.

    echo "$verabschiedung $name";

    1. foreach ist keine Funktion.

      und warum klappt folgendes :

      # Log 'login' von heute auslesen auslesen
      $log[0] = "login_" . date('j-m-Y') . "";
      $lines[0] = file ('logs/'. $log[0] .'.txt');

      foreach ($lines[0] as $line_num => $line) {echo "" . htmlspecialchars($line) . "<br>";

      hier erhalte ich eine reguläre Ausagbe

      1. echo $begrüßung;

        und warum klappt folgendes :

        Weil du darin foreach richtig angewendet und ansonsten keine Syntaxfehler drin hast. (Die Leerstrings "" und das nicht weiter verwendete $line_num sind zwar überflüssig aber erlaubt.)

        echo "$verabschiedung $name";

  2. Hallöchen :)

    12 $ausgabe[$i] = foreach ($lines[$i] as $line_num => $line) {echo "" . htmlspecialchars($line) . "<br>";};}

    Warum setzt du hier nach der ersten geschweiften Klammer ein ";"?
    Liegt bestimmt nicht daran, aber das hab ich nicht ganz verstandne :-/

    Liebe Grüße,
    Nadja

    --
    system.exit(0);
    1. 12 $ausgabe[$i] = foreach ($lines[$i] as $line_num => $line) {echo "" . htmlspecialchars($line) . "<br>";};}

      Warum setzt du hier nach der ersten geschweiften Klammer ein ";"?

      Die erste geschweifte Klammer beendet das foreach ! Daher schliesse ich dieses auch mit einem ";"
      Das zweite ";" schliesst die for schleife !

      1. Hallöchen :)

        Warum setzt du hier nach der ersten geschweiften Klammer ein ";"?

        Die erste geschweifte Klammer beendet das foreach ! Daher schliesse ich dieses auch mit einem ";"
        Das zweite ";" schliesst die for schleife !

        Achso... Kenne diesen Programmierstil nicht, sorry ;)
        Bei mir wird die Schleife einfach durch die geschweifte Klammer beendet, ohne ";".

        Liebe Grüße,
        Nadja

        --
        system.exit(0);
        1. Hallo,

          Achso... Kenne diesen Programmierstil nicht, sorry ;)

          Hmm, ich hab diese Schreibweise (Überzeugung?) auch noch nie gesehen.

          Bei mir wird die Schleife einfach durch die geschweifte Klammer beendet, ohne ";".

          Das ist auch richtig.
          Eine einzelne Anweisung wird mit ';' abgeschlossen.
          Mehrere Anweisungen werden mit '{' ... '}' zu einem Block geklammert (ohne ';' nach der schließenden Klammer).
          Ein einzelnes, nicht unbedingt erforderliches ';' wird als "leere Anweisung" interpretiert. Das kann tückisch sein:

          ~~~php while ($k>0);
            { echo ("$k");
              $k--;
            }

            
          Abgesehen davon, dass dieser Code nicht viel Sinn ergibt, zeigt er genau diesen häufigen Fehler auf. Nach while () folgt eine Anweisung oder ein Block als Schleifenrumpf. Die nächste Anweisung ist aber die leere Anweisung, die sich aus dem überzähligen ';' nach while () ergibt. Die Schleife lautet also im Klartext: Solange die Bedingung zutrifft, tu nichts und prüfe die Bedingung dann erneut.  ;-)  
            
          Das könnte ein Grund sein, auf überflüssige ';' zu verzichten.  
            
          Schönen Tag noch,  
            
           Martin