include_once, relativer Pfad in PHP

7

Ich habe 3 Dateien: home, failed_attempt, login.

Die Datei home und failed_attempt beziehen sich alle auf die Login-Datei.

Die nervige Sache ist, dass sie einen Fehler werfen, der besagt, dass die Login-Datei nicht existiert. home wird eine Ausnahme auslösen, wenn ich dies tue, aber failed_attempt wont.

%Vor%

include_once ("../ untitled / sanitize_string.php");

und wenn ich das tue:

%Vor%

Das Gegenteil passiert, failed_attempt löst eine Ausnahme aus, aber home, wont. Wie repariere ich das ..

Sage ich dem Include, dass er eine Seite hochgehen soll, indem er das ../ setzt, und daher home.php nicht eine Seite hochgehen muss, sondern diese Ausnahme auslöst.

Wie kann ich es so machen, dass beide Dateien diese Einfügungen als gültig akzeptieren. Vielleicht nicht relativ zu dem, wo sie platziert sind. d. h. ohne dass ../

Verzeichnisstruktur:

%Vor%     
Matrix001 20.10.2011, 12:31
quelle

5 Antworten

7

Hier sind drei mögliche Lösungen. Die zweite sind wirklich nur Work-Arounds, die auf clevere Weise absolute Pfade verwenden.

1: chdir in das richtige Verzeichnis

%Vor%

Beachten Sie, dass dies nur funktioniert, wenn sich Ihr StoredProcedure-Ordner im obersten Verzeichnis aller Dateien befindet, die möglicherweise die darin enthaltenen Dateien enthalten müssen.

2: Verwenden Sie absolute Pfade

Jetzt, bevor Sie sagen, dass dies nicht tragbar ist, hängt es tatsächlich davon ab, wie Sie es implementieren. Hier ist ein Beispiel, das mit Apache funktioniert:

%Vor%

Alternativ kannst du, wiederum mit Apache, folgendes in deine .htaccess im Root-Verzeichnis einfügen:

%Vor%

Dann in example.php:

%Vor%

Und schließlich in Ihren Dateien:

%Vor%

3: Setze PHP's include_path

Siehe den manuellen Eintrag für die include_path-Anweisung . Wenn Sie keinen Zugriff auf php.ini haben, kann dies in .htaccess eingestellt werden, vorausgesetzt, Sie verwenden Apache und PHP wird nicht wie folgt als CGI installiert:

%Vor%     
megaflop 20.10.2011, 14:13
quelle
7

Dinge wie realpath() und __DIR__ sind deine Freunde, wenn es darum geht, Pfade in PHP zu erstellen.

Realpath Ссылка

Magische Konstanten Ссылка

Da include und require Sprachkonstrukte sind (anstatt Funktionen), brauchen sie keine Klammern. Im Allgemeinen verwenden Sie include , um "templates" (Ausgabedateien) und require einzuschließen, um PHP-Dateien wie Klassen einzubeziehen.

Sie könnten also etwas wie:

verwenden %Vor%

(Verwenden Sie dirname(__FILE__) anstelle von __DIR__ für PHP & lt; 5)

Es lohnt sich, den Pfad auszuwerten, bevor Sie versuchen, die Datei als realpath() zu verwenden, wenn false zurückgegeben wird, wenn die Datei nicht existiert, und wenn require false; versucht, einen PHP-Fehler zu entfernen.

Alternativ können Sie auch absolute Pfade verwenden wie:

require /home/www/mysite.com/htdocs/inc/somefile.php

    
CD001 20.10.2011 12:37
quelle
3

Für die Anfänger wird das helfen zu verstehen. Verwenden Sie einfach Folgendes basierend auf Ihrem relativen Pfad:

%Vor%

ODER

%Vor%

ODER

%Vor%

ODER

%Vor%     
Reza Mamun 03.07.2014 18:05
quelle
2

Mache etwas wie require(dirname(__FILE__) . '[RELATIVE PATH HERE]');

    
Dev 20.10.2011 12:35
quelle
1

Die anderen Jungs haben Ihre Frage richtig beantwortet, aber ich dachte, ich würde etwas anderes beitragen: Autoloader.

Mit Autoloadern können Sie eine Funktion definieren, die automatisch bestimmte Dateien enthält, wenn Sie versuchen, eine Klasse zu verwenden.

Die Dokumentation ist hier und kann es besser erklären als ich: Ссылка

würde wirklich empfehlen, sie zu verwenden, spart Ihnen Zeit und ist eine bessere Übung.

    
user542603 20.10.2011 12:51
quelle

Tags und Links