Komisches Leerzeichen verzursacht header fehler

Hallo,
ich bin gerade dabei eine Ausgabe via dompdf zu realisieren.Bei der Ausgabe bekomme ich eine „header already sent“ Fehlermeldung.
Lasse ich mir den Quellcode anzeigen, bzw. leite ich die Ausagbe mit echo an den Bildschirm weiter sehe ich, dass vor dem ein " " Leerzeichen steht.Und ich habe keine Ahnung woher das kommt:
Quelle Das xxx dient zur Lokalisierung des Leerzeichens:
 xxx
@page {
margin-top:150px;
margin-bottom:50px;
margin-right:50px;
margin-left:50px;
}
…Das leerzeichen steht also noch vor dem „xxx“.Der php Code:<?php require_once("./dompdf/dompdf_config.inc.php");
include_once("./includes/checklogin.php");
include_once(‚includes/prefixloginprocedere.php‘);
$html=„xxx<html><head>“;$waswirdgemacht=„drucken“;Wenn ich das Richtig sehe, (Probe gemacht), ist die Variable $html bis zur og Definition leer.Kennt sich  vielleicht einer mit dompdf aus? Wird da uU der Code umgeschrieben?Danke für eure Ideen.OliverIch habe auch oben als erstes mal zu Testzwecken ein $html=„zzz“; und dann die untere Zeile zu $html.=„xxx<html><head>“;$waswirdgemacht=„drucken“;

geänder.  Zwischen dem „zzz“ udn dem „xxx“ ist kein weiteres Zeichen. Das Leerzeichenzeichen steht vor dem „zzz“.

Nun hab eich nochmals versucht das Ganze ein zu grenzen:
$html=‚zzz‘;
$html=’’;
$html.=‚xxx‘;

ergibt im Quelltext:

  xxx
@page {
margin-top:150px;
Also wieder ein leerzeichen vor dem „xxx“;Wie kann das? Wird die Variable doch expliziet geleert,<a href=„http://screencast.com/t/KCHopeeOYk8“ target="_blank" rel=„nofollow“>http://screencast.com/t/KCHopeeOYk8</a>Weiterer Versuch. $html-Definition nach oben:
<?php $html=„xxx<html><head>“;
require_once("./dompdf/dompdf_config.inc.php");
include_once("./includes/checklogin.php");Ausgabe:
<a href=„http://screencast.com/t/lGGrwMDz1C“ target="_blank" rel=„nofollow“>http://screencast.com/t/lGGrwMDz1C</a>

Also wieder mit dem Vermaledeiten Leerzeichen…

das liegt nicht am code
sondern an deiner datei
irgendwo ist ein zeichen vor dem <?php oder nach dem ?>

bzw bei dem echo oder oder , ich weiss ja nicht wie das gestalltet ist .
Also gucken wo das zeichen ist .
Am besten merkt man es bei sessions , wenn die zu spät eigebunden werden dann wurde schon ein header gesendet (z.b. beim leerzeichen .

dann gibts noch convertierungs zeichen , passiert auch mal das von einem zum anderen auf einmal ein zeichen am anfang zu viel ist .

übrigens ist ein TEXTEDITOR ungleich WORD ,
es müssen schon reine klar Textdateien bleiben ohne irgendwelche Zusätze bzw. formatierungsangaben .

1 Like

Hallo,
also es scheint ein Phänomen zu sein, dass man irgendwie als „UTF8 ohne Dom“ speichern sol. Steht massenhaft im Netz. Aber damit habe ich es nicht lösen können.
Habe einfach mal an den Anfang der Datei ein echo „xyz“; gesetzt.
Trotzdem war das Leerezeichen noch davor.
Der Editor ist pspad. Aber auch Notepad++ bringt keine Änderung.
Danke für dei Hinweise.
Also echt kurios!
Gruß
Oliver

Mach doch einfach folgendes ,
tausche alle Leerzeichen gegen ein anderes zeichen und guck was übrig bleibt .

wenn das nicht hilft gibt es auch noch die HEX ansicht , da guckst du einmal nach zahlen und rechts haste auch noch eine ascii ansicht.

Damit prüfst du die Datei

UTF-8 ohne boom wird auf Linux verwendet.
das wird am Anfang jeder Datei gekennzeichnet ,
Beim hin und her der Dateiformate , erst etwas ändern und dann speichern im entsprechenden Modus , sonst kann es sein das die Datei immer noch das alte Format hat . Speichern ist so ein Ding in diesem speziellem Fall des änderns .

Die folge von einer anderen UTF-8 Einstellung ergibt, das die Kennung anders gelesen wird und somit eine art Steuerzeichen gesendet wird , was man nicht unbedingt sieht, aber es ist halt eine Ausgabe und die bewirkt das schon ein Header gesendet wurde.
Damit ergibt sich dann aber auch der Fehler für folge Module wie Sessions , weil die können keine Header mehr senden … header -> html webseite -> Anzeigen … also nix mit , ich sende irgendwann später doch nochmal eine header :smile:

Also suchen suchen suchen , irgendwo irgendwie irgendwas wird es sein .

wow - 9d ohne Lösung…

Hallo,
also es scheint ein Phänomen zu sein, dass man irgendwie als
„UTF8 ohne Dom“ speichern sol. Steht massenhaft im Netz. Aber
damit habe ich es nicht lösen können.

ohne BOM ByteOrderMark.

vermutlich kommt das leerzeichen aus irgend einem deiner includes. typische stellen wären nach dem letztwen schliessenden ?>

kommentiere also stück für stück deine includes aus. und schaue, wann der fehler weg ist.

Hallo,
also ich habe erstmal versucht die Position des " " zu finden. 1. Post. :wink:
Das leerzeichen kommt vor allen includes.
Weg bekomme ich es Wenn ich die Datei nicht mit $text=… anfangen lasse, sondern mit $text=html>…
Also eigendlich mit nem Fehler. Ansonsten habe ich einen $text=>peep…
versucht. Das Leerzeichen ist immer noch vor dem html. Und dies ist die erste Zeile.

Selbst wenn ich ganz zum Schluss ein str_repalce(" „,„x“,$text);
setzte bekomme ich " x“

Hallo ,

Selbst wenn ich ganz zum Schluss ein str_repalce("
„,„x“,$text);
setzte bekomme ich " x“

du checkst das immer noch nicht ,
mach dich mal schlau wie die datei durch den server geparst wird
und wie es ausgegeben wird .

eine PHP datei fängt grundsätzlich im HTML modus an
deswegen brauch man die <?php ?> tags .
Alles was davor und dahinter ist ist also HTML
ob nun leerzeichen oder nicht .

Der Server sucht nach den <?php tags und schickt den hinhalt an den php parser ?>

wenn jetzt ein include kommt und dort in der Datei irgendein HTML zeichen kommt also alles ausserhalb von <?php ?> dann wird das ausgegeben ,
weil bei include schaltet es wieder um auf HTML , deswegen ist auch in include <?php ?> zu finden .

Das weitere Problem ist wie gesagt wenn UTF-8 falsch genutzt wird das dann ein steuerzeichen vorner rauskommt , kannst aber wenn keine üäß etc vorkommen ruhig im ansi standard abspeichern (wandeln).

Der richtige Editor macht das spielend. Nur nicht wordpad oder so ein schrott oder nodepad , windows kann gar nichts und webeditor programme sind auch so eine sache bei fertigen dateien , die schnallen das auch nciht wirklich .

Also egal was du mit php machst und ausgibst ,
der fehler ist vorher schon gemacht ,
ergo brignen deine replace auch nix, ausser du machst es in einem editor und
ersetzt es im quellcode für die einzelnen dateien .

nochmal

vorher darf nix sein

<?php was hier passiert ist egal solange keine ausgabe kommt kann es fröhlich weitergehen ?>

nacher darf nix sein

irgendwann nach sessions etc kann dann eine Ausgabe erfolgen . ob nun mit echo oder einem include oder direkt nach ?> ist egal .

Also nicht denken du könntest irgendwas an der ausgabe manipulieren oder wegnehmen , deine dateien sind das problem und nciht das php darinne .

übrigens fehle bei deinem beispiel die Anführungsstriche .
So ist das jedenfalls kaum logisch nachzuvollziehen was du da mit deinem
oder html> meinst . es ist auch eigentlich egal , solange der output stimmt . aber offene tags stimmen nie :smile:

Hallo,
also ich habe erstmal versucht die Position des " " zu finden.

  1. Post. :wink:
    Das leerzeichen kommt vor allen includes.

das wäre kurios, und in deinem php müsste auto_include aktiviert sein.

wenn du ganz oben, als allererstes ein

<?php print 123; exit; ?>

platzierst, müsste nur genau 123 ausgegeben werden.
danach verschiebst du das exit schritt für schritt nach die folgenden anweisungen und schaust, wann dein leerezeichen scheint.

1 Like