awert: admin-bereich - htaccess - selbe cm-klasse

Moin,

ich habe eine CM-Klasse für die Seitenausgabe.
Nun möchte ich diese für einen Adminbereich ebenfalls verwenden, der aber mit htaccess geschützt sein soll.

Also dachte ich einen Ordner anlegen, diesen mit htaccess schützen und ../CM.class.php requiren. Doch innerhalb dieser Klasse werden noch andere Dateien required, wo dann natürlich der Pfad nichtmehr stimmt.

Kann ich mit htaccess auch einfach eine Datei admin.php schützen und in diese dann CM.class.php requiren, damit die anderen requires auch klappen?

Oder kann ich den Pfad auf den sich die relativen inkludes beziehen irgendwie anpassen?

Gruß

  1. echo $begrüßung;

    Also dachte ich einen Ordner anlegen, diesen mit htaccess schützen und ../CM.class.php requiren. Doch innerhalb dieser Klasse werden noch andere Dateien required, wo dann natürlich der Pfad nichtmehr stimmt.

    Dateien, die nicht aus dem Web abrufbar sein sollen, liegen besser außerhalb des Documentroots. Dann kann auch nicht ein versehentliches Löschen der .htaccess ein Zugriffsverbot aushebeln. Man muss dazu beim Provider alle Domains auf Unterverzeichnisse seines Kundenverzeichnisses legen, dann kann man auch Verzeichnisse anlegen, auf die keine Domain zeigt.

    Den Pfad, in dem PHP nach include/require-Dateien sucht, kann man mit include_path festlegen.

    echo "$verabschiedung $name";

    1. Hallo,

      danke für deine Antwort.

      Dieser Adminbereich soll ja im WWW verfügbar sein, nur halt über htaccess geschützt. So sachen wie mysql-Zugangsdaten habe ich außerhalb des Domain-bereichs.

      Das problem ist nur, dass wenn ich von dem Verzeichnis /admin/ das geschützt ist, CM.class.php ein Verzeichnis weiter oben inkludiere ../CM.class.php, dass dann die relativen (geht nicht anders) includes bzw. requires ins leere zeigen.

      Sollte ich hierfür include_path neu setzten? Also im admin-verzeichnis den include_path auf ../ setzen?
      Oder gibt es andere Möglichkeiten?

      Kann ich CM.class.php irgendwie zwingen, die relativen Pfade immer relativ zu sich selber zu nehmen?

      Gruß

      1. echo $begrüßung;

        Dieser Adminbereich soll ja im WWW verfügbar sein, nur halt über htaccess geschützt. So sachen wie mysql-Zugangsdaten habe ich außerhalb des Domain-bereichs.

        Die direkt aufzurufenden Scripte des Admin-Bereich kannst du im eigenen Verzeichnis liegen lassen. Die zu inkludierenden Dateien lagerst du "außerhalb". Den Pfad dorthin stellst du als absolute Angabe (= Pfad im Dateisystem des Servers) per include_path ein. Ob du den in den jeweils gestarteten Scripten setzen musst oder in generellen Konfigurationsdateien einstellen kannst, ist abhängig von den Gegebenheiten beim Provider. In den Scripten inkludierst du dann relativ zu den Pfadangaben im include_path. Also sowohl die Scripte im Admin-Verzeichnis als auch die anderen führen nur include 'CM.class.php'; aus und alles wird gut.

        echo "$verabschiedung $name";

        1. Hallo,

          sprich ich habe wirklich sonst alles außerhalb des Domain-bereiches.
          Die index.php inkludiert CM.class.php und die Admin-Seite setzte vorher einen globale Variable auf admin und inkludiert CM.class.php?

          Innerhalb von CM.class.php setze ich den include path.

          Kann ich die vorbelegung von include-path bestehen lassen? Als nur um meinen Eintrag ergänzen?

          Gruß

          1. echo $begrüßung;

            sprich ich habe wirklich sonst alles außerhalb des Domain-bereiches.
            Die index.php inkludiert CM.class.php und die Admin-Seite setzte vorher einen globale Variable auf admin und inkludiert CM.class.php?
            Innerhalb von CM.class.php setze ich den include path.

            Wenn du ihn von der Dateisystemwurzel ausgehend setzt, brauchst du keine Sonderbehandlung für unterschiedliche Script-Startverzeichnisse. Selbst dann nicht, wenn du ihn erst in der CM.class.php einstellst. Allerdings musst du dann immer noch diese Datei unter Beachtung ihrer Position im Filesystem inkludieren.

            Ich halte es für besser, den include_path generell, außerhalb der Scripte einzustellen. Wenn PHP als Modul läuft, kann man in der Per-Verzeichnis-Konfigurationsdatei (.htaccess) Werte ändern, wenn das der Provider zulässt. Bei der CGI-Variante kann man meist eine eigene php.ini in das Script-Start-Verzeichnis legen, die dann statt der System-php.ini verwendet wird.

            Kann ich die vorbelegung von include-path bestehen lassen? Als nur um meinen Eintrag ergänzen?

            Das ist sogar empfehlenswert. Es gibt sogar eine Konstante, die betriebssystemabhängig das Pfad-Trennzeichen enthält.

            echo "$verabschiedung $name";

            1. Nachtrag:

              Kann ich die vorbelegung von include-path bestehen lassen? Als nur um meinen Eintrag ergänzen?
              Das ist sogar empfehlenswert. Es gibt sogar eine Konstante, die betriebssystemabhängig das Pfad-Trennzeichen enthält.

              Die heißt PATH_SEPARATOR und kann dann verwendet werden, wenn der include_path im Script geändert wird, siehe set_include_path(). In den Konfigurationsdateien (php.ini, .htaccess) ist das jeweilige Zeichen direkt zu verwenden.