<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>ebene7 &#187; Byte Order Mark</title>
	<atom:link href="http://blog.ebene7.com/schlagwort/byte-order-mark/feed/" rel="self" type="application/rss+xml" />
	<link>https://blog.ebene7.com</link>
	<description></description>
	<lastBuildDate>Tue, 04 Jun 2013 18:57:27 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.2.1</generator>
		<item>
		<title>Das schließende PHP Tag am Ende einer Datei und die Sache mit der Stecknadel im Heuhaufen</title>
		<link>https://blog.ebene7.com/2010/03/08/das-schliessende-php-tag-am-ende-einer-datei-und-die-sache-mit-der-stecknadel-im-heuhaufen/</link>
		<comments>https://blog.ebene7.com/2010/03/08/das-schliessende-php-tag-am-ende-einer-datei-und-die-sache-mit-der-stecknadel-im-heuhaufen/#comments</comments>
		<pubDate>Mon, 08 Mar 2010 09:00:35 +0000</pubDate>
		<dc:creator>Daniel</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[Tipps und Tricks]]></category>
		<category><![CDATA[BOM]]></category>
		<category><![CDATA[Byte Order Mark]]></category>
		<category><![CDATA[Datei]]></category>
		<category><![CDATA[Fehler]]></category>
		<category><![CDATA[Header]]></category>
		<category><![CDATA[HTTP]]></category>
		<category><![CDATA[Tag]]></category>

		<guid isPermaLink="false">http://blog.ebene7.com/?p=407</guid>
		<description><![CDATA[Wer seit vielen Jahren mit PHP programmiert, der ist es sicherlich gewohnt, jedes geöffnete PHP-Tag auch wieder zu schließen. So ging es mir auch, bis ich vor längerer Zeit mal zu einem Probearbeiten für einen neuen Job eingeladen war und &#8230; <a href="https://blog.ebene7.com/2010/03/08/das-schliessende-php-tag-am-ende-einer-datei-und-die-sache-mit-der-stecknadel-im-heuhaufen/">Weiterlesen <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Wer seit vielen Jahren mit PHP programmiert, der ist es sicherlich gewohnt, jedes geöffnete PHP-Tag auch wieder zu schließen.</p>
<p>So ging es mir auch, bis ich vor längerer Zeit mal zu einem Probearbeiten für einen neuen Job eingeladen war und es plötzlich hieß: &#8220;So machen wir das aber nicht mehr, das PHP-Tag wird nicht mehr geschlossen.&#8221;</p>
<p>Die Frage beschäftigte mich zu dem Zeitpunkt schon, warum das PHP-Tag am Dateiende nicht mehr geschlossen werden sollte. Ich habe es seit Jahren verwendet und es sind mir nie Nachteile durch die Verwendung aufgefallen. Warum nun also?</p>
<p><span id="more-407"></span>Es ist ja auch kein Fehler es zu Verwenden (maximal ein Verstoß gegen die <a href="http://de.wikipedia.org/wiki/Coding_standards" target="_blank">Coding Standards</a>), hilft aber, Fehler zu vermeiden, wenn man es weglässt.</p>
<p>Viele Projekte bestehen heute aus einer Vielzahl von PHP-Dateien und dank <a href="http://de.wikipedia.org/wiki/Model_View_Controller" target="_blank">MVC</a> über eine kontrollierte Ausgabe der Response.</p>
<p>Das bedeutet, dass wir in unserem Programm zu jeder Zeit die Header setzen können und diese dann erst mit dem kompletten Response gesendet werden.</p>
<p>Das funktioniert aber nur solange, wie noch nichts gesendet wurde und genau da liegt das Risiko des schließenden PHP-Tags.</p>
<p>Während ungewollte Zeichen zu Beginn der Datei relativ offensichlich sind, sind sie nach dem schließenden PHP-Tag unter Umständen quasi unsichtbar.</p>
<pre>&lt;?php
// irgendwelcher Code
?&gt;</pre>
<p>Denn sobald in irgendeiner Datei ein quasi unsichtbares Leerzeichen oder ein Zeilenumbruch dahinter folgt, werden, sofern die Ausgabe nicht gebuffert wird, auch schon die entsprechende Headerinformationen gesendet und wir würden im weiteren Verlauf unseres Programms wahrscheinlich eine Fehlermeldung zu sehen bekommen (&#8220;header already sent&#8221;).</p>
<p>Die entsprechende Stelle dann in mehreren hunderten oder oft sogar tausenden Dateien zu suchen wäre relativ zeitaufwendig und vor allem vermeidbar. Daher sollte auf die Verwendung verzichtet werden.</p>
<pre>&lt;?php
// irgendwelcher Code</pre>
<p>Ein weiterer, noch gemeinerer, Fehler kann auftreten, wenn die Datei im Unicode gespeichert wurde. In dem Fall wird vor dem eigentlichen Dateiinhalt die Bytefolge &#8220;FE FF&#8221; (<strong></strong><a href="http://de.wikipedia.org/wiki/Byte_Order_Mark" target="_blank">Byte Order Mark/BOM</a>) gespeichert, die von PHP bereits auch schon als Ausgabe interpretiert wird.</p>
<p>Das tückische daran ist jedoch, dass man diesen Fehler nicht im normalen Editor zu sehen bekommt und ggf. mit einem Hex-Editor ran müsste.</p>
<p>Siehe auch:</p>
<ul>
<li><a href="http://de.php.net/basic-syntax.instruction-separation" target="_blank">Abgrenzung von Anweisungen</a></li>
<li><a href="http://framework.zend.com/manual/en/coding-standard.coding-style.html" target="_blank">Zend Framework Coding Style</a></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>https://blog.ebene7.com/2010/03/08/das-schliessende-php-tag-am-ende-einer-datei-und-die-sache-mit-der-stecknadel-im-heuhaufen/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
	</channel>
</rss>
