PHP +[MYSQL] header('Location: ') mit Variable und Pfad

raven16

Lieutenant
Registriert
Nov. 2008
Beiträge
580
Hi,
ich hab folgendes Problem:

Ich möchte von...
ordner1/ordner2/datei2.php
in dem vorherigen Ordner die Datei
ordner1/datei1.php
aufrufen.

Um in den vorherigen Ordner mit header('Location:') die datei1.php aufzurufen bin ich jedoch gezwungen die ganze Domain anzugeben. Hab noch keine vernünftige Lösung gefunden um die Domain nicht angeben zu müssen. Wenn ich in nachfolgende Ordner eine Datei aufrufe dann brauch ich als Dateipfad nur
/ordner3/datei3.php aufrufen. Dies hat den Vorteil, dass, wenn ich irgendwann meine Seite auf einen anderen FTP-Server laufen lassen sollte, nicht alle Domains in jeder Datei ändern muss.

Für das Problem zurückspringen habe ich mir folgendes einfallen lassen:
Ich habe die Domain in einer Tabelle in der SQL Datenbank abgespeichert und habe eine kleine Abfragedatei geschrieben:
PHP:
<?php
	//Verbindung zur Datenbank aufbauen
	include("include/dbconnect.inc.php");
	
	$domain_sql = "SELECT pfad FROM domain";
	$domain = mysql_query($domain_sql) 
	or die("Die Domain konnte nicht gefunden werden" . mysql_error());
?>
Meine SQL Tabelle sieht so aus:
Name: domain ; Typ: text ; Länge/Size: 200 ; NOT NULL
Diese Datei includier ich überall da, wo ich zurückspringen will...
So kann ich wenn ich nur die Domain änder in der Datenbank, alle Dateien auf einmal ändern.

Nur leider weiß ich nicht wie ich meine header('Location: ') formulieren muss damit ich die Variable $domain an der Richtigen stelle in dem Pfad einfügen kann...

Hab es so probiert:
PHP:
include ("include/domain.inc.php");
    header('Location: "'.$domain.'"/ordner1/datei1.php?login=false');

Aber hier bekomme ich als aktiven Pfad:
-->domain.de/ordner1/ordner2/%22%22/ordner1/datei1.php?login=false

heraus....

Kann mir jemand helfen?
 
Zuletzt bearbeitet:
Weiß nicht ob ich dich jetzt richtig verstanden habe, aber um eine Ordner-Ebene zurück zu gehen, genügt es ../ anzugeben

../datei1.php quasi
 
Warum einfach wenn es auch kompliziert geht :D
Aber danke für die Info...

Wenn ich dann 2 Ordner zurückspringen will muss ich dann
../../Ordner eingeben oder wie?
 
wobei man mit absoluten pfadangaben auf der sicheren seite ist, da nimmt man quasi dem browser die entscheidung ab, nich das irgendeine krücke das ../ nich richtig versteht. Ich machs daher immer mit absoluten pfadangaben.
 
Benutz immer absolute Pfadangaben soweit möglich ;)

Ich muss hier hanni zustimmen, das verwenden von absoluten Pfaden ist sinnvoller und afaik schneller als relative.

Um das Argument von pwtoxic zu entkräften: Einfach alle Pfade in Variablen ablegen, diese lassen sich bei einem Serverumzug leicht verändern und geben dir auch weit mehr Kontrolle über die Struktur deines Projektes, falls du sie einmal abändern möchtest.

Oh, aber als kleiner Hinweis: Der einzige Ort an dem du relative Angaben verwenden solltest ist beim includieren von PHP Files. Wenn du diese absolut über Domain includierst sind die Dateien dann bereits geparst :)



so long
Renegade
 
Abgesehen davon, dass ich die Struktur unlogisch finde:

Das CSS File serverseitig zusammensetzen und die Variable mit dem Pfad per PHP übergeben? :)

Wie gesagt, du erhältst viel mehr Kontrolle über die Struktur deines Projektes wenn du mit variablen Pfaden arbeitest (irgendwie auch logisch^^)



so long
Renegade
 
Ne, hab ich nie gesagt. Ich finde die Struktur schon unlogisch und komme daher nie zu solchen Szenarien.

Aber angenommen, du hast alle deine Bilder in dem von dir angegeben Ordner /media/images/ und deine CSS Files in /css/ und nun kommst du auf die Idee dass du vielleicht deine Skripte übersichtlicher sortieren willst und erstellst /scripts/css/ wo deine css Skripte liegen.

Eine einzige Variable zum ändern... oder für jedes Bild das darauf verweist ein zusätzliches ../ :)


so long
Renegade
 
und ich mach search&replace ../ mit ../../

und ich muss nicht wie du meine css neu mit php neu generieren.
Ich muss das nichtmal machen wenn ich mit dem server umzieh.

du kannst es gerne machen wie du willst, aber sei dir bewusst, dass es keine gute idee ist;)

Übrigends.. wenn du bei der softwareentwicklung jede mögliche Änderbarkeit mit einberechnest, wird die software unendlich komplex. Das ist nicht gut!
 
Zuletzt bearbeitet:
Naja, es kommt auch immer darauf an für welche Zwecke ich Software entwickle. Modularität und Ersetzbarkeit haben definitiv ihre Berechtigung, auch, wenn ich dir recht geben muss, es teilweise auf Kosten der Performance geht. Dafür ist eben der Faktor Zeitersparnis und Konfigurabilität (geiles Wort) positiver.


Ich denke mal zu der Thematik wurde bereits alles gesagt, alles weitere geht zu sehr OT :)



so long
Renegade
 
Hab noch keine vernünftige Lösung gefunden um die Domain nicht angeben zu müssen
Bei header() ist es sogar Pflicht, eine gesamte URL anzugeben. Alles andere "funktioniert" zwar (weil alle Browser relativ fehlertolerant sind), ist aber falsch.

Wenn du das nicht machen willst, dann lass es automatisch machen:

PHP:
header('Location: http://' . $_SERVER['HTTP_HOST'] . '/hier/dein/krams/');
 
Zurück
Oben