php relative Pfade und Verzeichnisse
Ich wundere mich etwas, aber ich kann nicht scheinen zu finden, eine gute, klare Antwort, oder sogar eine Lösung für dieses problem:
Meine PHP-Webseite hat die folgende Struktur:
root
functions
generators
helpers
scripts
style
index.php
Diese sind alle Ordner und ein php-Datei. Funktionen enthält, ein Haufen op-php-Dateien im Zusammenhang mit Datenbank-Verbindung und verschiedene andere Datenbank-Operationen wie einfügen, löschen, aktualisieren,... - Generatoren enthält Klassen zum automatischen generieren von web-Seiten, um Sie alle gleich Aussehen. Helfer sind Klassen, die mit login, logout, registrieren, etc. Scripts sind javascript-und Style ist CSS.
In meinem Generatoren Ordner gibt es eine Datei mainGenerator.php dies erzeugt verschiedene Stücke von der website:
private function generateLogin()
{
if (!isLoggedIn()) {
echo "
<h2>Login</h2>
<form method='post' action='../helpers/login.php' id='loginForm'>
<p>
Username:<br/>
<input class='search' type='text' name='username'/>
Password:<br/>
<input class='search' type='password' name='password'/>
<input name='login' type='image' style='border: 0; margin: 0 0 -9px 5px;' src='style/login.png' alt='Login' title='Login'/><br/>
No account yet? <a href='../register.php'>Register</a>
</p></form>";
} else {
echo "
<h2>Welome, <a href='user.php' style='color: #1293EE;'>" .
$_SESSION['user_name'] .
"</a></h2>
<a href='logout.php'>Log off</a>";
}
}
Dieses Stück code generiert die loginbox auf jeder Seite, oder zeigt eine willkommen-Nachricht, wenn der Benutzer bereits angemeldet ist. Wie Sie sehen können, die Aktion Hinweise auf "../helpers/login.php" denn das ist die relative Lage der loginhelper von diesem generator Sicht.
Nun, hier ist das problem: Wenn ich drücken Sie die Schaltfläche "login" auf der index.php (http://example.com/ProjectName/index.php) es leitet mich zu http://example.com/helpers/login.php und sagt, dass die Datei nicht gefunden wird.
Ich sehen, was das problem ist, die post Aktion sieht der Antrag aus index.php und geht nach oben in einem Verzeichnis und sucht sich dann /helpers/login.php, die nicht existiert, natürlich.
Einem fix sein könnten, um die Aktion zu ändern, um
action='/helpers/login.php'
aber das gibt mir das gleiche problem, soll ich Zugang zu generateLogin (), die in einem bestimmten Unterverzeichnis...
Wie kann dieses problem gelöst werden, ich.e: die Referenz zu /helpers/login.php bleibt richtig, egal von wo ich versuche auf ihn zuzugreifen.
InformationsquelleAutor Matthias | 2011-10-20
Du musst angemeldet sein, um einen Kommentar abzugeben.
Vorausgesetzt, Ihre Wurzel ist http://localhost dann ist der link oben sollte immer beheben zu http://localhost/ProjectName/helpers/login.php, ob es die als von http://localhost/ProjectName/index.php oder http://localhost/ProjectName/subdir/index.php
Wenn Sie nicht wollen, zu fest "ProjectName" in viele verschiedene Schriften verwenden, können Sie eine Globale variable, und definieren Sie es in einer config-Datei:
helpers/ConfigOptions.php:
Dann in Ihren Skripten, gehören die config-Datei und verwenden Sie die Variablen, die Sie definiert:
index.php:
Mehr über DOCUMENT_ROOT:
DOCUMENT_ROOT ist definiert in der Konfigurationsdatei des Servers und ist die Wurzel im Dateisystem, wo Skripte ausgeführt werden, nicht die web-Adresse geben Sie in einem browser. Im obigen Beispiel gehe ich davon aus, dass die Dokument-root sieht so etwas wie /home/user/www/Projektname. Wenn DOCUMENT_ROOT ist nur /home/user/www-dann können Sie Ihre include-Pfad:
oder einen relativen Pfad verwenden. Meine Stimme wäre an die letzteren, da Sie nicht brauchen, um hardcode "Projektname".
Also include() und require() nehmen würde, entweder:
So, wenn tun Sie verwenden müssen, um DOCUMENT_ROOT? Meist mit templates, in denen ein relative Weg, wie
../helpers/file.php
auflösen kann, um verschiedene absolute Pfade, je nachdem, was einschließlich der Datei. In dem obigen Beispiel, wo index.php ist inklusive ConfigOptions.php, die Sie wahrscheinlich nicht verwenden müssen, da DOCUMENT_ROOT index.php ist keine Vorlage. Ich benutzte es trotzdem, um sicher zu sein, aber vielleicht öffnete ich eine ganze Dose Würmer hier. Ich hoffe, dass ich nicht verwirrt Sie noch mehr.Es sollte keine Rolle spielen, da sowohl include() und require() nehmen Sie eine relative oder absolute Pfad zu der Datei. Ich aktualisiert meine Antwort mit mehr Informationen über DOCUMENT_ROOT.
Ok, vielen Dank. Das war sehr hilfreich 🙂
InformationsquelleAutor Anson
Wenn Sie einen link, der beginnt mit einem Schrägstrich es immer wird angehängt an die Wurzel und nicht das aktuelle Verzeichnis...
Also, wenn Ihre Seite ist
www.example.com/mySite/foo.html
und haben Sie einen link wie folgt:<a href="/bar.html">Bar/<a>
wird der Benutzer umgeleitet, umwww.example.com/bar.html
...Sollten Sie müssen nur Ihre form action zeigen zu
helpers/login.php
helpers/login.php
funktioniert nur von der top-level-Verzeichnis.Ja, natürlich 😉 vergessen zu erwähnen ...
Vielen Dank für die Informationen, die auf slash. Upvoting!
InformationsquelleAutor klaustopher