[Tipp] Nach Serverumstellung läuft Script nicht mehrSie befinden sich: Home > Webmaster News
Nach einer Serverumstellung läuft ein Script nicht mehr?
Vor allem alte PHP-Scripte bekommen dann Probleme, wenn Ihr Provider auf eine neue PHP-Version umgestellt hat, oder sonstige Änderungen an Ihrem Server oder Webspace vorgenommen hat. In den allermeisten Fällen ist die Einstellung für 'register globals' die Ursache für Ihr Problem.
Machen Sie zunächst den folgenden Test: Erstellen Sie sich eine kleine PHP-Datei mit folgendem Inhalt:
<?php
phpinfo();
?>
und speichern Sie diese unter dem Namen phpinfo.php auf Ihren Webspace. Wenn Sie diese dann aufrufen, so sehen Sie sehr viele Informationen über Ihre Installation.
Unter der Überschrift "Configuration" finden Sie dann die Einstellung, die uns hier besonders interessiert. Dort steht:
register_globals Off oder register_globals On
Was bedeutet dies nun? Die Einstellung Register Globals = On bewirkt unter anderem, dass an ein Script übergebene variabeln sofort unter Ihrem Namen verfügbar sind. Beispiel:
<?php
// test.php - wird aufgerufen mit test.php?seite=(seitennummer)
echo $seite;
?>
Mit register_globals = on steht nach test.php?seite=4 die Variable $seite unmittelbar im Script zur Verfügung, weshalb die echo-Anweisung uns die übergebene 4 ausgibt. Bei register_globals = off ist $seite nicht vorhanden.
Unabhängig von der Einstellung für register_globals steht aber der Superglobale Array $_GET zur Verfügung. Wir finden die übergebene Variable in diesem Array unter dem Schlüssel des genutzten Namens:
<?php
// test.php - wird aufgerufen mit test.php?seite=(seitennummer)
echo $_GET['seite'];
?>
Achten Sie auf die korrekte Schreibweise: $GET oder $get oder $_Get sind falsch.
Wenn Ihr Script die Werte nicht mit ?variable=wert entgegennimmt (per GET), sondern aus einem Formular mit POST, dann stehen Ihre gesuchten Übergabewerte im Array $_POST:
<?php
// test.php - wird aufgerufen aus einem Formular mit method="post"
echo $_POST['seite'];
?>
Um Ihr Script nun ans Laufen zu bringen, müssen Sie die gesuchten Werte nun aus dem Array holen. Schauen Sie sich genau an, welche Werte das Script erwartet, und ändern Sie dann die entsprechenden Stellen ab. Beispiel:
<?php
// index.php - wird aufgerufen mit index.php?seite=(seitennummer)
if ($seite == 1) include 'start.php';
if ($seite == 2) include 'impressum.php';
if ($seite == 3) include 'galerie.php';
?>
Dies kann so abgeändert werden:
<?php
// index.php - wird aufgerufen mit index.php?seite=(seitennummer)
$seite = $_GET['seite'];
if ($seite == 1) include 'start.php';
if ($seite == 2) include 'impressum.php';
if ($seite == 3) include 'galerie.php';
?>
oder so:
<?php
// index.php - wird aufgerufen mit index.php?seite=(seitennummer)
if ($_GET['seite'] == 1) include 'start.php';
if ($_GET['seite'] == 2) include 'impressum.php';
if ($_GET['seite'] == 3) include 'galerie.php';
?>
Auch in den includierten Dateien müssen Sie ggf. auch prüfen, ob Variablen gegen die Elemente aus dem GET-Array ersetzt werden müssen.
Empfehlung: Wenn Sie nicht triviale Scripte aus dem Web installieren möchten, bei denen Usereingaben verarbeitet werden, dann müssen Sie in diesen Scripten Konstruktionen mit $_GET oder $_POST vorfinden. Finden Sie diese Array nicht, obwohl Daten in Formularen erfasst und gespeichert werden, dann installieren Sie dies Script besser nicht. Es wird nicht ordentlich funktionieren.
Abzuraten ist davon, Ihre PHP-Installation dahingehend zu ändern, dass register_globals wieder auf on gestellt wird. Spätestens ab PHP6 wird es diese Einstellung nicht mehr geben und dann werden alle Scripte, die auf diese Einstellung setzen, definitiv nicht mehr laufen.
Seien Sie vorsichtig mit einem automatischen Esetzen von $variable auf $_GET['variable']. Es könnten sich Syntaxfehler ergeben:
<?php
$sql = "SELECT url from links WHERE seite = '$seite'";
?>
wird bei unkontrollierter automatischer Ersetzung zu:
<?php
$sql = "SELECT url from links WHERE seite = '$_GET['seite']'";
?>
was durch die Hochkomma-Struktur falsch ist. Richtig wäre:
<?php
$sql = "SELECT url from links WHERE seite = '" . $_GET['seite'] . "'";
?>
(Autor: Wolfgang), Eingetragen am 10.09.2008
Schreib ein Kommentar
|