Traudl: PHP 8: include funktioniert nicht?

Ich habe eine Website über .htaccess mit der Zeile "AddType application/x-httpd-php81 .php" auf PHP 8.1 umgestellt, da wir unsere Website bei Strato hosten und niedrigere Versionen hier nicht mehr funktionieren.

Seither scheint aber auch allgemein alles PHP, dass in der Programmierung verwendet wird, nicht zu reagieren.

Die größten Probleme habe ich gerade mit meinen "includes" – weiß jemand, woran das liegen könnte?

  1. Zuvor hat beispielsweise das Einbinden des Footers immer folgend funktioniert:

    <?php include($contentBasePath."_modules/_footer.php");?>

    Ich habe schon etwas recherchiert und andere Methoden ausprobiert, aber nichts scheint zu klappen.

    Bin über Hilfe dankbar!

    1. Hallo Traudl,

      Ich habe schon etwas recherchiert und andere Methoden ausprobiert, aber nichts scheint zu klappen.

      Ja, verrat uns bloß nicht, was Du bereits überprüft hast. Das könnte uns ja von der Lösung ablenken.

      Spaß beiseite - mit diesen Informationen kann ich nur generische Hinweise geben. Durch Anstarren des Codes kommst Du nicht weiter, du musst debuggen.

      Grundsätzlich musst Du prüfen: In welchem Ordner steht die ausgeführte PHP Datei, in welchem Ordner steht die Datei, die Du includen willst, und kann der Pfad, den Du beim include angibst, zu dieser Datei führen?

      Für die Problemdiagnose solltet Du

      • das Error-Logging aufdrehen, welche Fehlermeldungen gibt es?
      • den Inhalt von $contentBasePath analysieren? Ist das der erwartete Wert?
      • nach dem include_path schauen, gab es in der alten PHP Version einen Eintrag, der in der neuen Version abweicht oder fehlt?

      Rolf

      --
      sumpsi - posui - obstruxi
  2. Hi,

    Die größten Probleme habe ich gerade mit meinen "includes" – weiß jemand, woran das liegen könnte?

    Leg mal eine php-Datei an, die nur phpinfo() ausgibt. Und ruf sie auf. Und guck Dir dann an, ob der Include-Path paßt (und ggf. die anderen Sachen auch - IIRC steht da auch drin, welche php-Einstellungsdatei benutzt wurde usw.)

    Vergiß nicht, diese Datei wieder zu löschen.

    cu,
    Andreas a/k/a MudGuard

    1. Danke für die schnelle Antwort!

      Ich bin leider nicht so gut darin, die phpinfo zu lesen, aber ich hätte folgendes gefunden:

      include_path: .:/opt/RZphp80/includes

      Hat das eine spezielle Bedeutung?

      1. Hallo Traudl,

        Der include_path besteht aus einer Liste von Ordnern, in denen PHP nach Include-Dateien sucht. Die Einträge der Liste sind – unter Linux – durch einen Doppelpunkt getrennt.

        Du hast also 2 Einträge:

        • .
        • /opt/RZphp80/includes

        . ist das aktuelle Verzeichnis, d.h. wenn Du include "xyz.php" schreibst, sucht er zuerst im gleichen Ordner, in dem auch das inkludierende Script steht.

        Der andere Pfad ist ein absoluter Pfad und verweist – mutmaßlich – auf ein zentrales Verzeichnis auf dem Server, wo allgemeine Includes für PHP8 liegen. Welche das sind, weiß der liebe Geier und es ist auch für Dich wahrscheinlich unwichtig. Dein Kundenordner dürfte ganz woanders auf dem Server liegen, deine Includes sind im RZphp80-Ordner sicherlich nicht drin.

        Rolf

        --
        sumpsi - posui - obstruxi