Internet Exporer, Ersetzen von Fehlermeldungen unterdrücken
Raketenfehlermelder
- browser
- php
Mist. Habe eben nachgeschaut. Der "aktuelle" IE von windows 10 bringt immer noch eigene Fehlermeldungen, wenn man ihm nicht ein halbes K (512 Byte) schickt.
Mit aktiviertem Output-Buffering und PHP klappt es vor dem Ausstieg damit ganz gut:
function preventIEErrorMessages( $z=false ) {
if ( 512 > ob_get_length() ) {
if (false === $z ) {
$z = 512 - 75 - ob_get_length();
}
$s = str_repeat( '-', $z );
echo '<!-- This will prevent IE-users to show microsofts own error messages. ' . $s . ' -->';
}
}
75 ist die Zeihenanzahl des Kommentars
Gibt es dagegen etwas einzuwenden?
Nurmalso nebenbei gefragt: Ist false ein passender Default für einen Integer? MFG
Nurmalso nebenbei gefragt: Ist false ein passender Default für einen Integer?
Nun, ich mache den Vergleich if (false === $z )
nicht grundlos typsicher… Aber sonst wäre es ziemlich unpassend. Eigentlich stellt sich viel mehr die Frage, warum ich überhaupt die Übergabe eines Wertes ermögliche. Sowas kommt wohl davon, wenn man ohne Plan programmiert.
Nurmalso nebenbei gefragt: Ist false ein passender Default für einen Integer?
Nun, ich mache den Vergleich
if (false === $z )
nicht grundlos typsicher…
Typsicher heißt daß man bei den Typen bleibt die man deklariert hat. Und so wie es aussieht wäre $z bei Dir kein bool sondern ein integer. Wenn man hier überhaupt die Typisierung ins Spiel bringen sollte.
Was den IE betrifft: Wie verhält der sich denn wenn er bei einem Status != 200 einen Content mit Length < 512 bekommt? Hast Du das mal getestet?
MFG
Was den IE betrifft: Wie verhält der sich denn wenn er bei einem Status != 200 einen Content mit Length < 512 bekommt? Hast Du das mal getestet?
Getestet bzw. „nur fast freiwillig“ gesehen habe ich: 403, 404, 500:
Der IE unterdrückt meine Fehlermeldung, zeigt sein sybillisches Zeug.
Danke Dir für die Info. Ich kann das z.Z. nicht selber testen.
Schönen Sonntag
Danke Dir für die Info. Ich kann das z.Z. nicht selber testen.
Hm. Wenn Du das Ergebnis mit weiteren Statuscodes brauchst, dann teste ich die gerne durch, ist ja schnell gemacht:
<html>
<?=http_response_code( intval( $_GET['status'] ) ); ?>
<h1>Error <?=intval( $_GET['status'] ); ?></h1>
</html>
Schönen Sonntag
Nunja. Ich hoffe, Du gern, was Du tust.
Danke Dir für die Info. Ich kann das z.Z. nicht selber testen.
Hm. Wenn Du das Ergebnis mit weiteren Statuscodes brauchst, dann teste ich die gerne durch, ist ja schnell gemacht:
<html> <?=http_response_code( intval( $_GET['status'] ) ); ?> <h1>Error <?=intval( $_GET['status'] ); ?></h1> </html>
Nun ich meinte den HTTP-Status. MFG
Nun ich meinte den HTTP-Status.
Klar. Handbuch. Das gezeigte Skriptlein setzt ihn also.
Hallo,
Mist. Habe eben nachgeschaut. Der "aktuelle" IE von windows 10 bringt immer noch eigene Fehlermeldungen, wenn man ihm nicht ein halbes K (512 Byte) schickt.
das ist aber AFAIR schon seit IE4 einstellbar. Die Option lautet "Kurze HTTP-Fehlermeldungen anzeigen". Dort ein Häkchen zu setzen ist IMO sauberer als serverseitig zu tricksen, um auf die 512 Byte zu kommen.
Mit aktiviertem Output-Buffering und PHP klappt es vor dem Ausstieg damit ganz gut:
function preventIEErrorMessages( $z=false ) { if ( 512 > ob_get_length() ) { if (false === $z ) { $z = 512 - 75 - ob_get_length(); } $s = str_repeat( '-', $z ); echo '<!-- This will prevent IE-users to show microsofts own error messages. ' . $s . ' -->'; } }
Warum so umständlich? Schreib einen ausreichend "fetten" HTML-Kommentar ins Error-Dokument und gut is'.
Ciao,
Martin
Hi,
das ist aber AFAIR schon seit IE4 einstellbar. Die Option lautet "Kurze HTTP-Fehlermeldungen anzeigen". Dort ein Häkchen zu setzen ist IMO sauberer als serverseitig zu tricksen, um auf die 512 Byte zu kommen.
Und wie setzt Du dieses Häkchen in den Browsern Deiner Seiten-Besucher?
Warum so umständlich? Schreib einen ausreichend "fetten" HTML-Kommentar ins Error-Dokument und gut is'.
Dem kann ich nur zustimmen. Einfach ohne zu gucken, ob schon die 512 Zeichen erreicht sind, ein paar Hundert Zeichen mitschicken.
cu,
Andreas a/k/a MudGuard
Hallo,
das ist aber AFAIR schon seit IE4 einstellbar. Die Option lautet "Kurze HTTP-Fehlermeldungen anzeigen". Dort ein Häkchen zu setzen ist IMO sauberer als serverseitig zu tricksen, um auf die 512 Byte zu kommen.
Und wie setzt Du dieses Häkchen in den Browsern Deiner Seiten-Besucher?
die Browser meiner Besucher sind doch gar nicht relevant. Eigentlich sollte bei denen gar keine HTTP-Fehlermeldung auftreten; wenn doch, darf sie aber ruhig so aussehen, wie es die Nutzer gewöhnt sind. Nützen tut's ihnen sowieso nicht.
Ich gehe von den Browsern aus, die der Entwickler zum Testen seines Werks benutzt.
Ciao,
Martin
Eigentlich sollte bei denen gar keine HTTP-Fehlermeldung auftreten; wenn doch, darf sie aber ruhig so aussehen, wie es die Nutzer gewöhnt sind.
Naja. Ich will denen schon was mitteilen. Nur halt nicht zu viel. Das bleibt regelmäßig unter 512 Bytes.
Freilich: Wenn ich die Fehlermeldungen mit HTML und CSS aufhübsche, dann wird die Funktion und deren Aufruf schnell obsolet.
Insoweit habt Ihr natürlich damit recht:
Einfach ohne zu gucken, ob schon die 512 Zeichen erreicht sind, ein paar Hundert Zeichen mitschicken.
Andererseits ist PHP "eh angeworfen" und da habe ich mir gedacht "Schickst halt genau 512 Byte..."
Und wie setzt Du dieses Häkchen in den Browsern Deiner Seiten-Besucher?
Hatte fast gehofft, dass es genau dafür einen Tipp gibt. Irgend eine Nachricht in den HTTP-Headern (außer Status 200 natürlich).
Hallo Jörg,
einerseits: danke für diese Info. Das wusste ich bisher nicht.
Das API der Funktion sieht so aus:
Du hast nach möglichen Einwänden gefragt, darum liste ich mal Möglichkeiten auf.
Ich würde es so schreiben:
function preventIEErrorMessages( int $z=-1 ) {
if ( ob_get_length() >= 511 )
return;
$s = '<!-- This will prevent IE-users to show microsofts own error messages. ';
if ($z < 0 ) {
$z = 512 - strlen($s) - 4 - ob_get_length();
}
if ($z > 0) {
$s .= str_repeat( '-', $z );
}
echo $s . ' -->';
}
Warum der return statt eines if-Blocks? Der return ist eine Form von goto und darum unstrukturiert, unnötige Schachtelung ist aber ebenfalls ärgerlich. Und es ist guter Brauch, zu Beginn eine Funktion zu fragen, ob ihre Nutzung unnötig ist oder Parameter falsch sind, und dann sofort auszusteigen. Das entkoppelt Eingangsprüfungen vom regulären Code der Funktion.
512-ob_get_length()
Spaces reichen und Du würdest mit der Längenrechnung nicht in der Bredouille landen. Es gibt schönere Gegenden in Frankreich…Wie gesagt - das sind Vorschläge. Es ist meine Meinung, es ist mein Stil zu programmieren. Nutze davon, was Du für gut hältst.
Rolf
Du musst dich beim Nutzer deiner Seite ja nicht für das Padding rechtfertigen
Hm. Ja. Warum auf den armen IE-Benutzern rumhacken…
Ich hab mir auch die übrigen Tips zu Herzen genommen und das Machwerk auf folgende Zeilen eingedampft:
function preventIEErrorMessages( ) {
if ( 0 < $l = 512 - ob_get_length() ) {
echo str_repeat( ' ', $l );
}
}
Es gibt schönere Gegenden in Frankreich…
Mois, je sais…
@@Raketenfehlermelder
Gibt es dagegen etwas einzuwenden?
Ja. Multiple -
in Kommentaren sollte man vermeiden.
BTW, AFAIS war das meine allererste Frage (der erste von mir eröffnete Thread) hier im Forum.
LLAP 🖖
Eine offene Meldung an den Besucher macht einen im HTML eingebauten Kommentar ohnehin überflüssig.
MFG
Hallo Gunnar,
BTW, AFAIS war das meine allererste Frage (der erste von mir eröffnete Thread) hier im Forum.
wie doch die Zeit vergeht ...
Und guck nochmal hin: Damals hast du dich mit keinem Wort für die Antwort bzw. die sich entwickelnde Diskussion bedankt. Warst einer von denen, die eine Frage stellen und sich dann im Thread nicht mehr blicken lassen.
Genau das, worüber wir uns heute manchmal ärgern. ;-)
Schönen Sonntag,
Martin
@@Der Martin
Und guck nochmal hin: Damals hast du dich mit keinem Wort für die Antwort bzw. die sich entwickelnde Diskussion bedankt. Warst einer von denen, die eine Frage stellen und sich dann im Thread nicht mehr blicken lassen.
Hm, damals gab’s diese +/−-Dinger[1] noch nicht. 😈
Dann will ich das an dieser Stelle mal nachholen. Vielen Dank an @MudGuard – für alles. Er ist einer von denen, von denen[2] ich in meinen Anfangstagen viel gelernt habe.
LLAP 🖖
Hallo Gunnar,
Er ist einer von denen, von denen[2] ich in meinen Anfangstagen viel gelernt habe.
Lektoratsvorschlag:
Einem Dankeschön in dieser Art schließe ich mich gerne an, an alle Stammposter hier 😀
Rolf
Hallo Rolf B,
"Er lehrte mich." und "Ich lernte von ihm." sind nicht beliebig austauschbar. 🤪
Bis demnächst
Matthias
Hallo Matthias,
"Er lehrte mich." und "Ich lernte von ihm." sind nicht beliebig austauschbar. 🤪
stimmt, der Unterschied zwischen beiden besteht im Erfolg.
Ciao,
Martin
Hi,
"Er lehrte mich." und "Ich lernte von ihm." sind nicht beliebig austauschbar. 🤪
stimmt, der Unterschied zwischen beiden besteht im Erfolg.
nicht nur das - man kann auch von jemandem lernen, ohne daß derjenige lehrt.
cu,
Andreas a/k/a MudGuard
Ja. Multiple - in Kommentaren sollte man vermeiden.
Innerhalb eines SGML-Konstruktes (das mit <! beginnt und mit > endet,
schaltet die Zeichenfolge -- zwischen nicht-Kommentar und Kommentar um.
Ohem. So alt und doch so neu. Oder andersrum.
Wie auch immer: Obwohl meine laienhaften Versuche, das Problem zu provozieren und im gerenderten Ergebnis sichtbar zu machen sowohl beim einzeiligen Kommentar wie auch beim ursprünglichen verwendeten mehrzeiligen Kommentar scheiterten (vermutlich am Browser oder an der Angabe einer passenden HTML-Version), bin ich froh, dass ich bei Eindampfen ohnehin Leerzeichen genommen habe.
Interessant ist auch, dass ich endlich mal erfahre, woher denn das oft gesehene und bis heute manchmal grundlos so auftauchende Kommentarende '//-->'
stammt.