Umstellung auf PHP7
Derzeit stellen viele Hosting Anbieter ihre Webspaces zwangsweise auf PHP 7 um. Das führt oft zu unschönen Überraschungen, bis hin dazu, dass ganze Webseiten beim Aufruf leer bleiben. Das kann jede Webseite betreffen, die kleinste und die größte.
Sehr häufig weiß man selbst als Kunde nicht, was eine Umstellung der PHP Version bedeutet. Erst wenn es schon zu spät ist und die Website beim Aufruf leer ist, fängt man an sich mit dem Thema auseinanderzusetzen.In diesen Fällen ist meist ein Programmierer gefragt, denn für all jene Webseitenbetreiber ohne Programmierkenntnisse sind die erforderlichen Anpassungen einfach nicht machbar.
Was ist PHP 7?
Zuerst die Grundlagen: PHP ist eine Skriptsprache, die dazu dient dem Server mitzuteilen welchen Quelltext(HTML-Informationen, Bilder und andere Dateien) er an den Browser eines Internetnutzers liefern soll, der eine Webseite aufruft. Zwar nutzen nicht alle Webseiten PHP aber doch ein wesentlicher Teil. Laut Wikipedia waren es Ende des Jahres 2015 immerhin 82% aller Webseiten. Schon seit dem 04.12.2015 gibt es PHP in der Version 7. Der Vorgänger von PHP 7 ist PHP 5, welches seit 2004 verwendet wurde. Durch die, für IT-Verhältnisse recht lange, Lebenszeit ist die Verbreitung von Programmen, die von PHP 5 abhängig sind, sehr groß. Der Grund, warum man gleich von der Version 5 auf die Version 7 springen musste, ist eine Geschichte für sich, die durchaus auch eine Suche in den Suchmaschinen wert ist.
Wir supporten auch PHP-Versionen unter 7.1!
Sparen Sie sich Zeit und Stress und lassen Sie Ihre Webseite bei uns hosten. Die meisten Provider bieten den Support für ältere PHP-Versionen nur gegen Aufpreis an. Wir ersparen Ihnen das und supporten Sie nach wie vor.
Zu den Hosting-TarifenWie kann man sich PHP-Fehlermeldungen anzeigen lassen?
In die Seite folgenden Code einbauen:
<? php error_reporting(E_ALL); ini_set("display_errors", 1); ?>
So werden alle PHP-Fehlermeldungen angezeigt. Man kann sich auch nur Fehler eines bestimmten Fehlertyps anzeigen lassen. Indem man E_ALL durch folgende Ausdrücke ersetzt
- E_ERROR
- E_WARNING
- E_PARSE
- E_NOTICE
Fatal error: Uncaught Error: Call to undefined function mysql_connect() in... line...:
Lösung: Die "Veraltet Meldung" verrät bereits die Lösung: wir müssen unser Script umstellen auf die neuen Datenbankfunktionen. Entweder mysqli oder die PDO-Funktionen. Am einfachsten geht die Umstellung auf mysqli. Hier muss einfach nur ein "i" eingefügt werden. Aus mysql_connect wird mysqli_connect. Gleiches gilt für alle anderen mysql_ Funktionen.
Beispiel
// aus: $connection = mysql_connect('localhost',
'username','password');
// wird: $connection =
mysqli_connect('localhost','username', 'password');
Die neue Funktion erlaubt auch gleich die Auswahl einer Datenbank: $connection = mysqli_connect('localhost', 'username', 'password', 'database'); Das war einfach! Dennoch gibt es Fallstricke. Einige Funktionen haben eine andere Reihenfolge der Parameter. Dies sind die Funktionen, welche den Datenbanklink als Parameter verwenden, wie die Funktion mysql_query:
$result = mysql_query($sql,$db_link);
Die SQL-Abfrage war hier bisher der erste Parameter, die Datenbankverbindung der Zweite. Dies ändert sich:
$result = mysqli_query($db, $sql);
Call to undefined function eregi()
Lösung: Die eregi()-Funktion wurde aus PHP7 komplett entfernt. Hierzu muss auf die alternative Funktion preg_match() zurückgegriffen werden.
Beispiel
PHP5
$neudatum = "2011-03-15";
if (ereg
("([0-9]{4})-([0-9]{2})-([0-9]{2})", $neudatum)){
echo "Das Datumsformat wurde richtig
eingegeben.";
}else{
echo "Das
Datumsformat ist ungültig.";
}
PHP7
$neudatum = "2011-03-15";
if
(preg_match("/([0-9]{4})-([0-9]{2})-([0-9]{2})/", $neudatum)){
echo "Das Datumsformat wurde richtig
eingegeben.";
}else{
echo "Das
Datumsformat ist ungültig.";
}
Kommentar: Unterschied ist, dass das Muster mit Delimitern wie z.B. /Muster/ oder #Muster# zu begrenzen ist.
Fatal error: Uncaught Error: Call to undefined function split()
Lösung: Die Funktion split() wurde aus PHP7 komplett entfernt. Als alternative Funktion gibt es die explode()-Funktion oder die preg_split()-Funktion.
Beispiel
PHP5
$root_dir = 'www';$current_dir =
'D:/Projects/example.com/www/www/path/source';$array =
split('www','D:/Projects/example.com/www/www/path/source',
2);print_r($array);
Output of the split function: Array (
[0] => D:/Projects/example.com/[1] => /www/path/source )
PHP7
preg_split() verhält sich ähnlich wie split(). Man muss die RegEx nur zwischen /.../ einfügen.
preg_split('/www/', 'D:/Projects/example.com/www/www/path/source', 2);
Die einschließenden Schrägstriche / sind ein Teil der RegEx Syntax. Wenn der www Delimiter eine Variable ist, sollte man preg_quote() für den inneren Teil benutzen.
Man sollte beachten, dass man keine Regulären Ausdrücke benötigt, wenn man nach einem statischen String sucht. In solchen Fällen kann man die explode()-Funktion benutzen.
explode('www', 'D:/Projects/example.com/www/www/path/source', 2);
Fatal error: Uncaught Error: Class 'MyClassOne\class_one' not found in...
Lösung: Wenn man eine Klasse per __autoload()-Funktion aufruft, wird dies in PHP7 nicht mehr funktionieren, als Alternative bietet sich hier die spl_autoload_register()-Funktion an.
Beispiel
PHP5
namespace MyClassOne;function __autoload($className){
include_once("$className.php");
}
$one
= new class_one();
PHP7
spl_autoload_register(function($class) {
include 'classes/' . str_replace('\\', '/',
$className) . '.className.php'; });
Undefined variable: HTTP_RAW_POST_DATA
Lösung: Die Funktion HTTP_RAW_POST_DATA ist in PHP7 komplett entfernt worden, als Alternative bietet sich die Funktion file_get_contents("php://input");
Beispiel
PHP5
$server->service($HTTP_RAW_POST_DATA);
PHP7
if ( !isset( $HTTP_RAW_POST_DATA ) ) $HTTP_RAW_POST_DATA =file_get_contents( 'php://input' );$server->service($HTTP_RAW_POST_DATA);
Liste der entfernten Erweiterungen und Funktionen in PHP 7.*
und alternativen Erweiterungen und Funktionen darin
Rückwärts Inkompatible Änderungen in PHP 7.* | Alternative Funktionen oder Module oder Bibliotheksliste dafür |
---|---|
mysql Erweiterung wurde entfernt. Sie können keine mysql_*-Funktionen verwenden. Beispiel: mysql_query(); | Sie müssen die Funktionen PDO oder mysqli verwenden, um die Datenbankoperationen durchzuführen. |
$HTTP_RAW_POST_DATA wurde entfernt. | file_get_contents("php://input"); |
ereg_* wurde entfernt. | preg_*-Funktionen können alternativ verwendet werden. |
Mssql, sybase_ct | PDO kann eine alternative Erweiterung sein. |
call_user_method(); call_user_method_array(); |
call_user_func(); call_user_func_array() |
split(); Funktion wurde in 5.4 selbst entfernt. | Alternative Funktionen sind explode(), str_split(); |
__autoload() (7.2) Funktion entfernt. | spl_autoload_register(); kann als Alternative verwendet werden. |
$php_errormsg(variable) wurde entfernt. | error_get_last(); diese Funktion kann als Alternative verwendet werden. |
each() (7.2) Funktion wurde entfernt | -- |
Die meisten der mcrypt_*-Funktionen sind veraltet und wurden in PHP7.*-Versionen entfernt. | -- |
Die Short-Hand-Syntax wurde entfernt. <? ?>, <?= ?> <script type="text/php"></script> |
<?php ?> Diese Syntax wird die Standard-Syntax sein. |
Wir supporten auch PHP-Versionen unter 7.1!
Sparen Sie sich Zeit und Stress und lassen Sie Ihre Webseite bei uns hosten. Die meisten Provider bieten den Support für ältere PHP-Versionen nur gegen Aufpreis an. Wir ersparen Ihnen das und supporten Sie nach wie vor.
Zu den Hosting-TarifenGeänderte Funktionen in PHP7
- debug_zval_dump() Gibt nun "int" statt "long" und "float" statt "double" aus.
- dirname() nimmt nun optional einen zweiten Parameter depth entgegen, womit der Name des Verzeichnisses, dass depth Stufen oberhalb des aktuellen liegt.
- getrusage() wird nun auf Windows unterstützt.
- Die mktime() und gmmktime() Funktionen akzeptieren den Parameter is_dst nicht mehr.
- preg_replace() Funktion unterstützt den Modifier "\e" (PREG_REPLACE_EVAL) nicht mehr. Stattdessen sollte preg_replace_callback() verwendet werden.
- setlocale() Funktion akzeptiert keine Zeichenketten mehr, die dem Parameter category übergeben werden. Stattdessen muss eine der LC_* Konstanten verwendet werden.
- Die exec(), system() und passthru() Funktionen haben nun einen Nullbyte-Schutz.
- shmop_open() gibt nun resource statt int zurück, die den Funktionen shmop_size(), shmop_write(), shmop_read(), shmop_close() und shmop_delete() zu übergeben ist.
- substr() und iconv_substr() geben eine leere Zeichenkette zurück, wenn start gleich der Länge der Zeichenkette entspricht.
- xml_parser_free() ist nicht länger ausreichend, um die Parser-Ressource freizugeben, wenn sie ein Objekt referenziert und dieses Objekt jene Parser-Ressource referenziert. In diesem Fall ist es notwendig zusätzlich den Parser zu löschen (z.B. per unset()).
Entfernte Funktionen in PHP7
call_user_method() und call_user_method_array()
Diese Funktionen wurden in PHP 4.1.0 zugunsten von call_user_func()
und call_user_func_array(). Sie können auch die Verwendung von
variablen Funktionen und/oder des Operators in Betracht ziehen.
Alle ereg*-Funktionen
Alle ereg-Funktionen
wurden entfernt. PCRE ist eine empfohlene Alternative.
mcrypt aliases
Die veraltete Funktion
mcrypt_generic_end() wurde zugunsten von mcrypt_generic_deinit()
entfernt. Zusätzlich wurden die veralteten Funktionen mcrypt_ecb(),
mcrypt_cbc(), mcrypt_cfb() und mcrypt_ofb() entfernt, um
mcrypt_decrypt() mit der entsprechenden Konstante MCRYPT_MODE_* zu
verwenden.
Alle Ext/Mysql-Funktionen
Alle
ext/mysql-Funktionen wurden entfernt. Weitere Informationen zur
Auswahl einer anderen MySQL-API finden Sie unter Auswählen einer
MySQL-API.
Alle ext/mssql-Funktionen
Alle
ext/mssql-Funktionen wurden entfernt. Eine Liste der Alternativen
finden Sie in der MSSQL-Einführung.
int aliases
Die veralteten Aliase
datefmt_set_timezone_id() und IntlDateFormatter::setTimeZoneID()
wurden zugunsten von datefmt_set_timezone() bzw.
IntlDateFormatter::setTimeZone() entfernt.
set_magic_quotes_runtime()
set_magic_quotes_runtime()
wurde zusammen mit seinem Alias magic_quotes_runtime() entfernt.
Sie waren in PHP 5.3.0 veraltet und wurden mit der Entfernung von
Magic Quotes in PHP 5.4.0 wirkungslos.
set_socket_blocking()
Der veraltete Alias
set_socket_blocking() wurde zugunsten von stream_set_blocking()
entfernt.
Sie haben noch Fragen?
In unseren FAQs finden Sie die Antworten auf die wichtigsten Fragen.
Schritt Nr. 1: Finden Sie heraus, welche PHP Version Sie aktuell nutzen. Dafür gehen Sie in den Kundenbereich Ihres Providers. Hier sehen Sie, welche PHP Sie aktuell benutzen und auch, welche Ihnen zur Auswahl stehen. Falls Sie ihre PHP Version nicht sehen können, kontaktieren Sie am besten Ihren Provider und fragen Sie nach.
Eine andere Möglichkeit ist die Erstellung einer Textdatei. Geben Sie in Ihren Texteditor folgendes ein:
Speichern Sie dann die Datei unter dem Namen "info.php" ab und laden Sie sie mit FTP auf ihren Webserver in das Stammverzeichnis Ihrer Website oder Ihres Onlineshops. Diese wird mit www.ihre-website-domain.de/info.php in Ihrem Browser aufgerufen. Geben Sie nun anstelle von "ihre-website-domain" die Domain Ihrer eigenen Website ein und rufen sie den Link in Ihrem Webbrowser auf. Nun wird Ihnen neben weiteren Information die aktuell genutzte PHP Version angezeigt.
Bessere Sicherheit - Der offensichtlichste Grund zur Aktualisierung ist Sicherheit. Neuere Versionen können beispielsweise Hackern besser entgegenwirken, da ein veralteter Code nicht mehr unterstützt wird.
Schnellere Websites - Neuere PHP-Versionen sind performanter. Im Schnitt laden Websites mit PHP 7.3 9% schneller als mit PHP 7.2.
Neue Funktionen und Verbesserungen - Wie bei allen Aktualisierungen enthält eine neuere Version neue Funktionen und Verbesserungen, z. B. zur Fehlerbehandlung.
Um weiterhin Sicherheit zu gewährleisten müssen Provider stetig kontrollieren, ob es neue Sicherheitslücken gibt und gegebenfalls die Webseiten dementsprechend überprüfen und anpassen. Dies ist natürlich mit einem enormen Arbeitsaufwand und einer hohen Verantwortung verbunden und muss deshalb monetär abgesichert werden.
PHP muss regelmäßig aktualisiert werden. Bei PHP erhält jede Version zwei Jahre lang nach der Erstveröffentlichung Unterstützung, danach gibt es einen Zeitraum von einem weiteren Jahr, in dem kritische Sicherheitsupdates nach Bedarf veröffentlicht werden.
Die Leistung von PHP 7 und PHP 5 ist ein wesentlicher Unterschied. PHP wird bereits seit der Veröffentlichung von PHP 4 von der Zend-Engine unterstützt. PHP 5 verwendet Zend II, aber PHP 7 verwendet ein brandneues Modell der Engine namens PHP-NG oder Next Generation. Diese neue PHPNG-Engine verbessert die Leistung um bis zu zwei Mal bei optimierter Speichernutzung.