Entwickler-Ecke

Programmiersprachen (Server) - Frage zu include


traceurmicha - Di 16.04.13 15:42
Titel: Frage zu include
Mahlzeit an alle,
Also ich spiel grad ein wenig mit PHP rum, und jetzt komm ich nicht weiter.

In der index.php hab ich folgendes:


PHP-Quelltext
1:
2:
3:
include("vars.php");
include("config.php");
include($templatePath."header.php");


In der config.php stehen nur leere variablen, daher ist diese erstmal unwichtig.
Die "vars.php" wird included. Allerdings die header.php nicht.

Meine Frage: Warum wird die header.php nicht included?
Ich hoffe ihr könnt mir helfen.


Hier noch ein Ausschnit aus der vars.php:

PHP-Quelltext
1:
2:
3:
4:
$domain  = "sub.meine-domain.de/";
$templatePath = $domain."template/";
$templateStylePath = $templatePath."style/";
$styleFile = $templateStylePath."design.css";


header.php:

PHP-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
<html>
<head><title>Titel</title>
<link rel="stylesheet" href="<?php echo $styleFile; ?>" type="text/css" media="all" />
</head><body>
<div id="top">

</div>
<div id="left">

</div>
<div id="middle">


jfheins - Di 16.04.13 18:06

Der Pfad passt halt nicht. von innerhalb des Skripts solltest du auf andere Dateien mit lokalen Pfaden zugreufen und nicht über die Domain. Lass' dir mal $_SERVER["PHP_SELF"] ausgeben, dann weißt du wie so ein Pfad aussehen kann. Der teil mit "sub.domain.de" hat da auc jeden Fall nichts zu suchen.

Fall dabei keine Fahlermeldung kommt, hat PHP höchstwahrscheinlich die Datei per HTTP abgerufen, was eine andere Instanz von PHP dazu gebracht hat, die Datei zu interprtieren, was aber keine Ausgabe erzeugt hat. Dieser Leerstring wurde dann von der ersten Instanz included. Passiert dann halt nix :mrgreen:


trm - So 05.05.13 21:15

Huhu.

Ich möchte mich da mal mit dranhängen.

Mit welcher Funktion kann ich denn die Variable $pfadvorher korrekt festlegen?


PHP-Quelltext
1:
2:
3:
4:
5:
6:
<?PHP

 $pfad = dirname($_SERVER["PHP_SELF"]); //ergibt z.B.: /www/test
 $pfadvorher = dirname($pfad.'/..'); //ergibt auch wieder /www/test sollte aber /www ergeben

?>


Ist denn dirname in dem Fall vielleicht falsch?


Regan - So 05.05.13 22:36

Du brauchst realpath [http://php.net/manual/de/function.realpath.php].


trm - So 05.05.13 23:45

user profile iconRegan hat folgendes geschrieben Zum zitierten Posting springen:
Du brauchst [url=http://php.net/manual/de/function.realpath.php]realpath[/url].


Danke für den Tipp, klappt aber leider nicht.
Hintergrund ist, dass ich unter einer Windowsumgebung programmiere, dort erzeugt dann realpath ein Konstrukt mit Windowspfaden ( c:\www\test ).

Solch ein Pfad kann aber blöderweise für einige Sachen ( img src ) nicht genutzt werden.

Auf dem Onlineserver wird ein Unix eingesetzt.

Die zweite Sache ist der Backslash. ( \ vs. / ). Dies könnte ich dies mittels der Konstante DIRECTORY_SEPERATOR umgehen.

Hast Du noch eine Idee :) ?


Regan - Mo 06.05.13 09:53

user profile icontrm hat folgendes geschrieben Zum zitierten Posting springen:
user profile iconRegan hat folgendes geschrieben Zum zitierten Posting springen:
Du brauchst [url=http://php.net/manual/de/function.realpath.php]realpath[/url].


Solch ein Pfad kann aber blöderweise für einige Sachen ( img src ) nicht genutzt werden.

Dafür ist er auch nicht da. Der relative Pfad hat immer Root (bei Windows: C, bei Linux /) als Stammobjekt. Es macht auch keinen Sinn, die relative Angabe des src-Attributs von einer PHP-Datei abhängig zu machen. Dies liegt daran, dass diese PHP-Datei nicht im Stammverzeichnis der Webseite liegen muss. Wenn sie in einem Unterverzeichnis liegt, dann hast du schon ein Auflöseproblem.
Auf der Seite findest du auch Kommentare. Du brauchst die Funktion aus diesem Kommentar [http://www.php.net/manual/de/function.realpath.php#48361].


trm - Mo 06.05.13 13:53

Huhu Regan,

vielen Dank für Deine erneute Hilfe.

Leider war es immer noch nicht das, was ich gesucht hatte. Dieses Konstrukt hatte ich schonmal getestet.

Mein Problem war übrigens ein ganz anderes, wie ich festgestellt habe.

Ich habe meine Verzeichnisse:

/www/ <- Basisverzeichnis1 (beeinhaltet eine index.php)
/www/inhalt/ <- Dort liegen Dateien, deren Inhalte dargestellt werden
/www/admin/ <- Adminbereich, welcher direkt eine Verwaltung bereitstellte, war somit Basisverzeichnis2 aber nur für den Adminmodus (beeinhaltet eine index.php)

Wenn ich nun im Adminmodus Dateien einbinden wollte, war immer der Pfad falsch, weil das Basisverzeichnis eine Ebene höher lag.

Das Fazit jetzt ist, dass ich alles über das Basisverzeichnis1 parse und damit klappt es auch wieder mit den Pfadangaben. Eine direkte Ansteuerung der index.php im Basisverzeichnis2 habe ich unterbunden :)

Eine schöne Woche,

viele Grüße
Mathias