• Jetzt anmelden. Es dauert nur 2 Minuten und ist kostenlos!

Entwicklungsumgebung unter MAMP läuft nicht mehr

Achim Gruber

Neues Mitglied
Wer kennt sich mit htaccess Dateien aus und kann mir helfen meine Entwicklungsumgebung wieder zum Laufen zu bringen?
Nach dem Verlust einer Festplatte habe ich MAMP frisch installiert und das Backup zurück gespielt. Leider startet dann die Webseite auf localhost, bricht aber am Zugriff auf die htaccess-Datei den Aufbau der jeweilien Unterseite ab.
Der aktive Webserver läuft noch einwandfrei. Allerdings hat das Rückkopieren der Dateien zur Entwicklungsumgebung auch nichts gebracht.
Weiß jemand einen Rat? Muss der Apache auf MAMP eine bestimmte Version haben um htaccess zu verstehen?
1725873606006.pnglokal

1725873715186.png Webserver
 
Ja, da finde ich im php.error.log diese Fatal Errors:
[02-Sep-2024 09:18:40 UTC] PHP Warning: Undefined array key "wahl" in D:\MAMP\htdocs\index.php on line 6
[02-Sep-2024 09:18:40 UTC] PHP Fatal error: Uncaught Error: Undefined constant "wahl" in D:\MAMP\htdocs\includes\navi_start.inc.php:3

Meine Versuche die Variabele wahl (Auswahl der Unterseite) im Vorfeld zu definieren schlägt fehl. Auf der anderen Seite ist sie auf dem Webserver ebenfalls nicht definiert, da die Dateien vom Produktivsystem in die Entwicklungsumgebung zurückgeschrieben wurden.

Index.php:

<?PHP
@SESSION_START();
ini_set("arg_separator.output","&amp;");
setlocale(LC_TIME,'de_DE@euro', 'de_DE', 'de','ge');
if (!$_GET['wahl'])
{$_SESSION['wahl']=" ";}
else
{$_SESSION['wahl']=$_GET['wahl'];}
?>


navi_start.inc.php:

<?php @SESSION_START();
##print_r ($_SESSION); $auswahl2=" ";
switch (substr($_SESSION[wahl],0,1))
{
case "V":
$auswahl1="Verein";
switch (substr($_SESSION[wahl],1,1))
{
case "VV":
$auswahl2="Vorstand";
break;
case "V1":
# $auswahl2="1. Vorsitzender" keine Funktion ?;
$auswahl2="1. Vorsitzende";
break;
case "VC":
$auswahl2="Chorleitung";
break;
case "VM":
$auswahl2="Mitglieder";
break;
}
break;
 
Ja, da finde ich im php.error.log diese Fatal Errors:
[02-Sep-2024 09:18:40 UTC] PHP Warning: Undefined array key "wahl" in D:\MAMP\htdocs\index.php on line 6
[02-Sep-2024 09:18:40 UTC] PHP Fatal error: Uncaught Error: Undefined constant "wahl" in D:\MAMP\htdocs\includes\navi_start.inc.php:3
Das sind beides Fehler bei denen das Fehler-Level mit PHP 8 angehoben wurde - falsch war beides aber schon immer:
if (!$_GET['wahl'])
{$_SESSION['wahl']=" ";}
else
{$_SESSION['wahl']=$_GET['wahl'];}
Du versuchst auf $_GET['wahl'] zuzugreifen ohne (z.B. mit isset) zu prüfen ob der Key überhaupt existiert - wenn nicht gibt es eben eine Fehlermeldung. In diesem Fall ließe sich dein komplettes if-Konstrukt aber durch eine Zeile ersetzen: $_SESSION['wahl'] = $_GET['wahl'] ?? ' '; Allerdings hat das den Nachteil dass du dir den Wert in $_SESSION bei jedem Request ohne einen Wert in $_GET['wahl'] wieder überschreibst, das ist also u.U. nicht das was du möchtest (oder $_SESSION ist hier überhaupt nicht nötig).

switch (substr($_SESSION[wahl],0,1))
Oben weißt du doch noch wie es richtig geht: wahl muss in Anführungszeichen stehen da es die Konstante wahl wohl nicht gibt sondern das ein String ist.

switch (substr($_SESSION[wahl],1,1))
{
case "VV":
Das wird nicht funktionieren: substr liefert nur ein Zeichen, da kann die Bedingung nicht zutreffen.

Außerdem: @ zum Unterdrücken von Fehlern ist eine ganz schlechte Idee (und funktioniert ab PHP8 auch nicht mehr so wie in früheren Versionen) und ?> solltest du am Ende von PHP-Dateien weglassen.
 
Falsch:
PHP:
if (!$_GET['wahl'])
Richtig:
PHP:
if (empty($_GET['wahl']))
Falsch:
PHP:
switch (substr($_SESSION[wahl],1,1))
Richtig:
PHP:
switch (substr($_SESSION['wahl'],1,1))
 
Ich habe die Änderungen in der Entwicklungsumgebung übernommen, ohne eine Wirkung zu erzielen. Nichts desto Trotz kopierte ich die Verbesserungen auch auf den Live-Webserver. Die Webseite www.gesangvereinkaufering.de funktioniert noch.
Leider sagen mir die "veralteten" Fehler in den logs gar nichts (siehe Anlage). Die MySQL Fehler ignoriere ich, weil keine Datenbank installiert ist.
 

Anhänge

Das, was in apache_error.log und mysql_error.log steht, kannst du ignorieren, denn das sind nur Hinweise und keine Fehler.
In php_error.log steht allerdings etwas, was du korrigieren solltest:
PHP Warning: PHP Startup: Unable to load dynamic library 'php_mysqli.dll'
D.h., dass die MySQLi-Extension nicht geladen wird und das könnte zu Problemen führen, wenn du MySQL nutzen willst.
Die anderen Zeilen sind nicht schön, aber auch nicht dramatisch.
 
Danke für die Antwort. Ich habe MySQL erst gar nicht installiert, weil es nicht gebraucht wird. Das hatte vor dem Plattencrash auch nicht gestört.
Mich wundert nur, dass der Aufbau der Webseite bis zur .htaccess Datei funktioniert und dann dort - oder danach, den Aufbau der über "wahl" selektierten Sub-Seite abbricht. Und an der Stelle bin ich als wenig geübter php Programmierer hilflos.
 
Also, dein Problem ist ja auf der lokalen Instanz, nicht auf dem Produktionsserver. Und es scheint, als ob das Script ja teilweise ausgeführt wird (sonst würde der Header ja nicht erscheinen).

Wenn es ein reines .htaccess Problem wäre, dann würde das Script ja gar nicht ausgeführt und es würde eine Apache Meldung geloggt.

Kannst Du bitte nochmal auf Deiner lokalen Umgebung die entsprechende Seite aufrufen und dann die folgenden Sachen hier anfügen:
  • Ist innerhalb des Quelltextes der aufgerufenen Seite irgendeine Fehlermeldung ganz am Schluß zu sehen?
  • Apache Log (welcher HTTP Return Code)
  • PHP Error Log

Kannst Du auch einmal ganz am Ende Deiner Test-Seite nochmal eine Ausgabe einbauen (z.B. ein echo für "Ende Seite"), um zu sehen ob das Script ganz prozessiert wurde.

Ansonsten klingt es auch etwas so, als ob die PHP Version auf der Live-Seite und die PHP-Version auf Deinem lokalen Rechner nicht gleich sind. Das könntest Du durch einfach eine Seite mit
PHP:
<?php   phpinfo();
testen.
 
Dank deiner Hilfe bin ich ein Stück weiter gekommen. PHP Version auf dem Live-System ist 5.6.40 und auf dem MAMP kann ich zwischen 8.2.14 und 8.3 wählen. Ich hab die MAMP komplett deinstalliert um ggf. beim Installieren eine ältere Version von PHP auszuwählen - Fehlanzeige.

Entwicklungsumgebung:
Nach dem Grundaufbau der Webseite wird das Menü aufgerufen. Dort wird die Variable "wahl" übergeben. Das kann ich mit einem Debug-Befehl: print_r ($_SESSION); $auswahl2=" ";
mir anzeigen lassen Array( [wahl] => )
Wenn ich beispielsweise die Webseite mit localhost/?wahl=VV aufrufe, wird auch die Variable sauber übergeben. Array( [wahl] => VV)
Das Menü selber, was die Aufgabe der Datei wäre, wird aber nicht angezeigt. Code siehe Anlage
 

Anhänge

Noch etwas. Nachdem ich den Debug Befehl deaktiviert habe.
Mit localhost/?wahl=VV wird der zweite Buchstabe in Klartext angezeigt. Siehe Anlage
Scheint so, dass sich die Syntax von PHP geändert hat. Das der Code beim Live-Server funktioniert.
 

Anhänge

  • Screenshot 2024-10-09 131250.png
    Screenshot 2024-10-09 131250.png
    22,5 KB · Aufrufe: 3
Das @ vor session_start solltest du entfernen.
Außerdem solltest du das Error-Reporting von PHP hochdrehen, damit die Probleme angezeigt werden.
PHP:
if (substr($_GET['wahl'],0,1)==V)
Was ist denn V? Du meinst bestimmt
PHP:
if (substr($_GET['wahl'],0,1)=='V')
Bei allen anderen Vergleichen dieser Art ist das ebenfalls falsch.
PHP Version auf dem Live-System ist 5.6.40
Ohje, das ist ja uralt und sollte nicht mehr benutzt werden
 
Dank deiner Hilfe bin ich ein Stück weiter gekommen. PHP Version auf dem Live-System ist 5.6.40 und auf dem MAMP kann ich zwischen 8.2.14 und 8.3 wählen. Ich hab die MAMP komplett deinstalliert um ggf. beim Installieren eine ältere Version von PHP auszuwählen - Fehlanzeige.

PHP5 ist für viele Jahre veraltet und inzwischen wohl auch ein rechtes Sicherheitsrisiko. Ich würde auf jeden Fall empfehlen die Fehlersuche durchzuziehen und die lokale Umgebung auf PHP8 zu belassen. Wenn es dann auf PHP8 läuft dann kannst Du die Live-Website entsprechend updaten.

Aber alles auf der alten Version zu belassen halte ich für recht gefährlich.
 
Ja, das scheint mir ebenfalls der richtige Weg zu sein. Aber zuerst sollte die Entwicklungsumgebung wieder laufen, dann den Live-Server html- und php-mäßig updaten.
 
Ja, das scheint mir ebenfalls der richtige Weg zu sein. Aber zuerst sollte die Entwicklungsumgebung wieder laufen, dann den Live-Server html- und php-mäßig updaten.
Die Entwicklungsumgebung läuft doch? Das Problem ist doch der veraltete Code? Du musst den Code auf den aktuellen Stand bringen (ggf. ist neu schreiben das einzig sinnvolle), was bringt es eine uralte PHP-Version lokal zum Laufen zu bringen?
 
Umgekehrt. Die alte (PHP 5) Live-Umgebung läuft noch und hat bisher auch alle Änderungen/Verbesserungen gut vertragen. Die Entwicklungsumgebung ist hinüber und da ist es für mich sehr schwer veraltete Syntax zu erkennen und zu ersetzen.
 
Setze deine Entwicklungsumgebung neu auf und verwende min. PHP 8.2. Dann nimmst du deine Scripte, kopierst diese in deine Umgebung und drehst das Error-Reporting hoch. PHP wird dir so schon einige Probleme nennen. Wenn dann alles funktioniert, aktualisierst du die Live-Umgebung.
 
Zurück
Oben