Martin Maurer: colgroup funktiniert nicht in IE5.0

Ich habe hier in der Firma den IE 5.0
Warum funktioniert colgroup bei folgendem php script nicht ?

<?php
  echo "<table border=1>\n";
  echo "<colgroup><col width="30"><col width="100"></colgroup>";
  for ($i=0;$i<10;$i++)
  {
    echo "<tr><td width="30">$i</td><td width="100">blabla</td></tr>\n";
    for ($a=0;$a<100000;$a++); // <-- zur verzoegerung der ausgabe
  }
  echo "</table>\n";
?>

Da sollte doch so schoen nach der Reihe jeweils eine Zeile auftauchen.
Stattdessen dauert es zuerst einige Zeit, und dann ist die ganze Tabelle da.
Muss ich da irgendwas im php oder apache umstellen ?
(php output buffering sollte ab sein - laut config file)

thx
Martin Maurer

  1. Da sollte doch so schoen nach der Reihe jeweils eine Zeile auftauchen.

    Da hast du mehrere eklige Sachen in den Code eingebaut. Insgesamt klappt das ganze nicht.

    Erstens werden Tabellen erst dann angezeigt, wenn sie komplett übertragen wurden, also nachdem </table> empfangen wurde. Von daher ist mit "Zeile für Zeile" schonmal Asche, das wird nie funktionieren.

    Zweitens speichert PHP die komplette Seite in einem Puffer zwischen und überträgt sie nach Fertigstellung komplett zum Browser. Außer einer kunstvollen Pause erreichst du also mit dem Skript garnichts.

    Ich weiß nicht, ob PHP durch Einstellungen in der Lage ist, den Ausgabepuffer abzuschalten und "direkt" zum Browser auszugeben, was schon fertig ist. Das, was du willst, funktioniert zumindest mit Perl ganz gut.

    Und die eklige Sache im Code:

    <?php
      echo "<table border=1>\n";
      echo "<colgroup><col width="30"><col width="100"></colgroup>";
      for ($i=0;$i<10;$i++)
      {
        echo "<tr><td width="30">$i</td><td width="100">blabla</td></tr>\n";
        for ($a=0;$a<100000;$a++); // <-- zur verzoegerung der ausgabe

    Bitte bitte bitte keinerlei Zählschleifen zur Zeitverzögerung benutzen. Auch nicht zum Testen. Für sowas nimmt man "sleep". Siehe auch http://www.selfphp4.de/funktionsreferenz/sonstige_funktionen/sleep.php.

    }
      echo "</table>\n";
    ?>

    - Sven Rautenberg

    1. Tach auch,

      Erstens werden Tabellen erst dann angezeigt, wenn sie komplett übertragen wurden, also nachdem </table> empfangen wurde. Von daher ist mit "Zeile für Zeile" schonmal Asche, das wird nie funktionieren.

      Da moechte ich mal wiedersprechen, das sollte nicht notwendigerweise so sein. Genau dazu sollte ja colgroup da sein:
      http://selfhtml.teamone.de/html/tabellen/aufbau.htm#vordefinieren oder auch in der HTML4 spec: http://www.w3.org/TR/html4/appendix/notes.html#h-B.5.1.2. Da steht unter anderem: "User agents should be able to begin displaying a table before all of the data has been received". Und da </table> erst ganz am Ende kommt waere Deine obige Aussage zumindest nach den Empfehlungen des W3C falsch.

      Gruss,
      Armin

      1. Tach auch,

        Erstens werden Tabellen erst dann angezeigt, wenn sie komplett übertragen wurden, also nachdem </table> empfangen wurde. Von daher ist mit "Zeile für Zeile" schonmal Asche, das wird nie funktionieren.

        Da moechte ich mal wiedersprechen, das sollte nicht notwendigerweise so sein. Genau dazu sollte ja colgroup da sein:

        Ich frage mich ein wenig, welchen Sinn colgroup überhaupt hat. Naja, einen kleinen Sinn macht es dann, wenn man gleich in der ersten Zeile colspan verwendet und deswegen die Einzelbreiten nicht angeben kann. Ansonsten hat der Browser nach dem Empfang der ersten Tabellenzeile auch alle Breitenangaben und könnte im Prinzip die Tabelle darstellen. Tut er aber nicht! Warum bloß?

        Und da </table> erst ganz am Ende kommt waere Deine obige Aussage zumindest nach den Empfehlungen des W3C falsch.

        Was stören die Browserhersteller die Angaben vom W3C! Naja, zumindest in diesem sekundären Punkt ist erstmal wichtig, daß die Tabellen überhaupt dargestellt werden, und dann VIELLEICHT, daß sie schnell dargestellt werden.

        Im übrigen ist das eigentliche Problem die Pufferung der Ausgabe, nicht die Tabelle - obwohl ich es lieber ohne Tabelle probieren würde, weil manche Browser einfach noch nicht so weit sind. ;)

        - Sven Rautenberg

        1. Tach auch,

          Erstens werden Tabellen erst dann angezeigt, wenn sie komplett übertragen wurden, also nachdem </table> empfangen wurde. Von daher ist mit "Zeile für Zeile" schonmal Asche, das wird nie funktionieren.

          Da moechte ich mal wiedersprechen, das sollte nicht notwendigerweise so sein. Genau dazu sollte ja colgroup da sein:

          Ich frage mich ein wenig, welchen Sinn colgroup überhaupt hat. Naja, einen kleinen Sinn macht es dann, wenn man gleich in der ersten Zeile colspan verwendet und deswegen die Einzelbreiten nicht angeben kann. Ansonsten hat der Browser nach dem Empfang der ersten Tabellenzeile auch alle Breitenangaben und könnte im Prinzip die Tabelle darstellen. Tut er aber nicht! Warum bloß?

          Und da </table> erst ganz am Ende kommt waere Deine obige Aussage zumindest nach den Empfehlungen des W3C falsch.

          Was stören die Browserhersteller die Angaben vom W3C! Naja, zumindest in diesem sekundären Punkt ist erstmal wichtig, daß die Tabellen überhaupt dargestellt werden, und dann VIELLEICHT, daß sie schnell dargestellt werden.

          Im übrigen ist das eigentliche Problem die Pufferung der Ausgabe, nicht die Tabelle - obwohl ich es lieber ohne Tabelle probieren würde, weil manche Browser einfach noch nicht so weit sind. ;)

          da hattest du recht. Ich hab ob_implicit_flush eingeschalten und seitdem funktionierts. Da iss also ein PHP Problem (weil im config file waers abgedreht.)
          Und das mitm sleep hab ich schon korrigiert. Das war nur mal schnell ein Versuch wo ich nit nachschauen wollte obs den sleep befehl gibt.
          Danke auf jeden Fall an euch zwei. Jetzt gehts. Die Zeilen kommen der Reihe nach in 1 Sekunden Abstaenden.

          • Sven Rautenberg