include_once, relativen Pfad in php
Habe ich 3 Dateien: Haus, failed_attempt, login.
Die Datei zu Hause und failed_attempt beziehen sich alle auf die login-Datei.
Die Sache ärgerlich ist, dass Sie werfen einen Fehler zu sagen, dass die login-Datei nicht vorhanden ist. zu Hause wird eine exception werfen, wenn ich dies tun, aber failed_attempt nicht.
include_once("../StoredProcedure/connect.php");
include_once("../untitled/sanitize_string.php");
und wenn ich das mache:
include_once("StoredProcedure/connect.php");
include_once("untitled/sanitize_string.php");
das Gegenteil ist der Fall, failed_attempt wirft eine Ausnahme , aber zu Hause, nicht. Wie kann ich dieses Problem beheben..
Muss ich sagen, die zählen, gehen auf eine Seite, indem Sie diesen ../, und daher home.php nicht müssen gehen von einer Seite bis daher wirft er die exception..
Wie kann ich es machen also beide Dateien akzeptieren, die inclueds als gültig.. vielleicht nicht in Bezug auf wo Sie platziert werden.. also ohne, dass die ../
Verzeichnis-Struktur:
PoliticalForum
->home.php
->StoredProcedure/connect.php
->untitled/sanitize_string.php
->And other irrelevant files
- Deine Frage ist nicht sehr klar. Sind die home -, failed_attempt und login-Dateien im gleichen Verzeichnis? Können Sie Ihre Verzeichnis-Struktur??? Wie genau haben die Heimat-und failed_attempt Seiten "finden", um die login-Datei? In welche Datei muss der code oben erscheinen?
- storedProcedure ist mein Ordner und es hat die Dateien im inneren. alles wie beschrieben.. login Datei hat 2 enthalten, die nicht geladen werden, je nachdem, wo Sie rufen Sie...homepage oder login_attempt Seite, die in einem anderen Verzeichnis
Du musst angemeldet sein, um einen Kommentar abzugeben.
Hier sind drei mögliche Lösungen. Das zweite sind wirklich nur Workarounds, die absolute Pfade verwenden, die in eine clevere Art und Weise.
1: chdir in das richtige Verzeichnis
Beachten Sie, dass dies nur funktioniert, wenn Ihr StoredProcedure-Ordner ist der oberste Ordner, der alle Dateien, die Sie eventuell benötigen, um include-Dateien, die es enthält.
2: absolute Pfade Verwenden
Nun, bevor Sie sagen, das ist nicht tragbar, es hängt tatsächlich davon ab, wie Sie es umsetzen. Hier ist ein Beispiel, das funktioniert mit Apache:
Alternativ wieder mit apache, setzen Sie Folgendes in Ihre .htaccess im root-Verzeichnis:
Dann in example.php:
Und schließlich in Ihre Dateien:
3: setzt PHP ' s include_path
Sehen der manuelle Eintrag für die Direktive include_path von. Wenn Sie keinen Zugang zu php.ini, dann kann dies eingestellt werden .htaccess, vorausgesetzt, Sie sind mit Apache und PHP ist nicht installiert als CGI, etwa so:
Dinge wie
realpath()
und__DIR__
sind Ihre Freunde, wenn es um die Erstellung von Pfaden in der PHP.Realpath http://php.net/manual/en/function.realpath.php
Magische Konstanten http://php.net/manual/en/language.constants.predefined.php
Da include und require sind Sprachkonstrukte (anstatt Funktionen), die Sie nicht brauchen Klammern. Im Allgemeinen, die Sie verwenden würden
include
um den Bereich "templates" (output-Dateien) undrequire
zu zählen PHP-Dateien wie Klassen.Also könnten Sie so etwas wie:
(verwenden Sie
dirname(__FILE__)
statt__DIR__
auf PHP < 5)Lohnt es sich, die Bewertung der Pfad, bevor Sie versuchen, benötigen Sie die Datei als
realpath()
gibt false zurück, wenn die Datei nicht vorhanden ist und versucht, zurequire false;
spaffs aus einem PHP-Fehler.Alternativ können Sie auch nur absolute Pfade verwenden wie:
require /home/www/mysite.com/htdocs/inc/somefile.php
realpath()
gibt false zurück, wenn der angegebene Pfad als parameter nicht vorhanden ist, zum Beispielrealpath('this/file/does/not/exist');
würde false zurückgeben, wenn die Datei nicht existiert, dann werde zurückkehren den realen Pfad zu der angegebenen Datei, sorealpath(__DIR__ . '/this/file/does/exist');
zurückkehren könnte so etwas wie/home/mysite.com/htdocs/this/file/does/exist
- z.B. den vollständigen Pfad.set_include_path()
(es gibt auch andere Möglichkeiten wenn) ... php.net/manual/en/function.set-include-path.phpFür Anfänger dies helfen wird, zu verstehen. Verwenden Sie einfach die folgende basierend auf Ihrer relativen Pfad:
ODER
ODER
ODER
Etwas wie
require(dirname(__FILE__) . '[RELATIVE PATH HERE]');
Die anderen Jungs haben beantwortet Ihr eine Frage richtig, aber ich dachte, ich würde tragen etwas anderes: Autoloader.
Autoloader erlauben Sie eine Funktion definieren, die automatisch bestimmte Dateien, wenn Sie versuchen, verwenden Sie eine Klasse.
Die Dokumentation ist hier und kann es besser erklären als ich es kann: http://php.net/manual/en/language.oop5.autoload.php
Würde wirklich empfehlen Ihnen, sparen Sie Zeit, und ist besser der Praxis.