short_open_tags are evil

Post von realloc | Einsortiert in Code, Meckerecke am 3. März 2007 | 7 Kommentare

Ich will hier keine Diskussion starten, ob short_open_tag on gut oder schlecht ist. Heutzutage ist es keine Seltenheit mehr, XML zu verarbeiten und dafür ist das einfach übel, wenn der PHP-Interpreter versucht XML-Deklarationen, wie z.B. <?xml version=”1.0″ encoding=”UTF-8″ ?> zu parsen.

Ich sehe auch keinen Vorteil darin, nur <? anstelle von <?php zu schreiben. Auch die Variante <?= anstelle von <?php echo trägt – meiner Meinung nach – nicht wirklich zu Lesbarkeit der Quellen bei. Um aber die die Kompatibilität von Programmen, die Short Tags verwenden, zu gewährleisten, haben viele Webhoster diese Einstellung eingeschalten.

Bis zur Version PHP 4.0.0 hätte wahrscheinlich folgendes Konstrukt die Einstellung von short_open_tag wieder abgeschalten:

if (get_cfg_var ('short_open_tag') == '1') ini_set ('short_open_tag', '0');

Dies funktioniert aber nicht mehr, weil sich in den PHP-Versionen danach die Option nur noch in der php.ini, der Apache-Konfiguration oder in der .htaccess setzen läßt. Eine .htaccess kann man aber meist auch dann schreiben, wenn man nur einen angemieteten Webspace hat. Wenn der Hoster AllowOverride Options gesetzt hat, kann man mit folgender Zeile in der .htaccess die Short Tags abschalten:

php_flag short_open_tag off

Have fun!

Möglicherweise interessiert Dich auch...



7 Antworten auf “short_open_tags are evil”

  1. nikosch sagt:

    In Templates können s_o_t schon Sinn machen:

    function Welcome ($aData)
    {
    list ($Anrede , $Name) = $aData;

    ?>
    Sehr geehrter ,

  2. realloc sagt:

    Daran glaube ich nicht. In Templates werden oft spezielle Tags verwendet, um genau dieses Problem zu umgehen. Mal abgesehen von der grundsätzlichen Diskussion “Templates vs. Decorator vs. Composite View”, bringt man sich nach wie vor um die Möglichkeit, XML zu verarbeiten oder Seiten mit Content für mobile Endgeräte zu erzeugen.

  3. dc sagt:

    <?= “xml version=”1.0? encoding=”UTF-8? ?>

    Wozu also die Aufregung? :-)

  4. dc sagt:

    Der Blog ist böse, er verschluckt die Hälfte des so schön simplen Fixes :-(

  5. realloc sagt:

    Ja, richtig evil :-D … aber Du versucht auch nur ein Fix für ein simples Beispiel zu geben, das dann vermutlich nur bei Dir läuft. Sobald Du etwas schreibst, was dann von anderen eingesetzt werden soll, wo Du Umgebung keine Short-Tags zulässt, ist es dann Essig damit.

  6. Savyon sagt:

    Seit PHP Version 5.4.0, die am 1. März 2012 veröffentlicht wurde, sind short_open_tags immer aktiviert – unabhängig von der INI-Einstellung.

  7. realloc sagt:

    Deine Behauptung ist recht mutig, wenn man bedenkt, dass im Changlog folgendes steht:

    <?= is now always available regardless of the short_open_tag setting.

    Ich lese dort nur, dass die Shorthand-Notation immer aktiv ist.

Einen Kommentar schreiben