short_open_tag in PHP 7.0

php_logo

Bei der Installation des Programms -> OneClick für Online-Umfragen bin ich auf das Problem gestoßen, dass die Administrationsseiten einfach leer angezeigt wurden und im Log-File der Fehler

 PHP Parse error: syntax error, unexpected '?>\r', expecting function (T_FUNCTION) in /var/www/1ka/admin/survey/SurveyAdmin.php on line 7060

angezeigt wurde. Die Überprüfung des Scripts förderte keine Fehler zutage und auch der Versuch mit Online-Syntax-Checkern wie -> phpcodechecker oder -> PHP code syntax check führte zu keinen sinnvollen Ergebnissen. Allerdings stand in der Installationsanleitung von OneClick, dass in der php.ini das short_open_tag auf On gestellt werden muss und im Script waren auch tatsächlich die Anweisungen für Start und Stop der Code-Interpretation ?> und <? enthalten. Dabei handelt es sich um die Kurzform von

?> Etwas, das nicht als Code interpretiert werden soll <?php

 

Die Änderung des short_open_tag in der php.ini im Verzeichnis /etc/php/7.0/apache2 hatte keinen Erfolg, was sich durch den Aufruf des Scripts

<?php phpinfo(); ?>

kontrollieren lässt. Bei der älteren Version PHP 5.6 funktioniert das, wobei man darauf achten muss, dass das short_open_tag in der Ini-Datei mindestens zweimal vorkommt. Auf php.net schließlich ist nachzulesen, dass PHP 7.0 keine short_open_tags mehr unterstützt.

Es gibt also nur zwei Lösungen:
Entweder man ersetzt im Code alle short_open_tags komplett komplett durch die Langversion oder man installiert eine Version (z.B. PHP 5.6), die mit den short_open_tags zurecht kommt. Die parallele Installation macht durchaus Sinn, da man dann phpMyAdmin weiterhin mit PHP 7.0 verwenden kann und den Code eben nicht umschreiben muss. Da PHP 5.6 nicht mehr in den offiziellen Ubuntu-Repositories ist, benötigt man das PPA wie -> hier beschrieben. Die Installation erfolgt mit

:~$ sudo add-apt-repository ppa:ondrej/php
:~$ sudo apt-get update
:~$ sudo apt-get install php5.6 php7.0 php5.6-dev php5.6-mysql php-gettext php5.6-mbstring php-mbstring php-xdebug libapache2-mod-php5.6 php5.6-mcrypt

 

Nach der Installation wird für den Apache2 PHP 7.0 deaktiviert und PHP 5.6 aktiviert.

:~$ sudo a2dismod php7.0
:~$ sudo a2enmod php5.6
:~$ sudo service apache2 restart 

 

Im konkreten Fall benötigen wir nur die Änderung für den Apache2 und lassen das CLI außen vor. Welche Version gerade aktiviert ist stellt man für den Apache2 mit test.php (siehe oben) und für die Shell mit

:~$ php -v

fest.

Wechselt man auf für den Apache wieder auf PHP 7.0

:~$ sudo a2dismod php5.6
:~$ sudo a2enmod php7.0
:~$ sudo service apache2 restart 

und prüft mit test.php nach, ist das short_open_tag auf On.

Buy Me a Coffee at ko-fi.com

 

2 Comments

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.

Diese Website verwendet Akismet, um Spam zu reduzieren. Erfahre mehr darüber, wie deine Kommentardaten verarbeitet werden.

Nobody is perfect
Einen Fehler gefunden?
Verbesserungsvorschläge, Lob oder Kritik?

Schreiben Sie mir mit dem -> Kontaktformular
oder per -> E-Mail.
DANKE!