file_get_contents() - ich find den Fehler nicht

Eistee

Erfahrenes Mitglied
Hi,
meine Website nutzt ein relativ simples "Template-System".
Ich habe HTML-Dateien mit Platzhaltern ( {content} etc.) und PHP-Dateien, die den Code enthalten und in denen die Inhalte erzeugt werden.
Am Ende jeder PHP-Datei kommt ein Teil, der immer gleich aufgebaut ist.
Mittels str_replace() ersetze ich die Platzhalter durch die dynamischen Inhalte. Die HTML-Dateien lade ich per file_get_contents() in das PHP-Script.
So weit, so gut :)

Nun habe ich für den Admin-bereich meiner Seite ein kleines Script geschrieben, mit dem sich Bilder in die DB eintragen lassen. Klappt auch wunderbar.
Das Problem liegt nun aber im Template Teil. Ich bekomme nur eine Fehlermeldung ausgegeben, kann diese aber absolut nicht nachvollziehen.
Hier zunächst mal mein Code:

PHP:
<?php
/* alkbrueder.de alkeys_insertpics.php last changed 02.06.05 by philipp@alkbrueder.de */

include("vars.inc.php");

if (isset($_POST["Submit"])) 
{
	$directory = '/blabla/'.$_POST["datum"];
	chdir($directory);
    $handle = opendir($directory);
	
	$res = mysql_connect("localhost", "YYY", "XXX");
	if (!$res)
	{
		echo "Kann z.Z. keine Verbindung zum Datenbankserver aufbauen.\n";
		exit;
	}
	mysql_select_db("alkbrueder_de");
	
	$i = 1;
	
	while($file = readdir($handle))
	{
		$type = explode(".", $file);
		
    	if($type['1'] == "JPG" || $type['1'] == "SWF")
		{
        	if(!is_dir($file))
			{
            	$sqlab = 'INSERT INTO `gallery` (name, date, id2) VALUES ("'.$file.'", "'.$_POST['datum'].'", "'.$i.'")';
                $res = mysql_query($sqlab) or die(mysql_error());
				if($insert = $res)
				{
                	$query_output .= 'Datei: <b>'.$file.'</b> eingef&uuml;gt<br>';
                }
				else
				{
                	$query_output .= 'Datei: '.$file.' nicht eingef&uuml;gt<br>';
                }
				$i++;
            }
        }
    }
	mysql_close();
	
	$alkeys_insertpics_output = str_replace("{output}", $query_output, file_get_contents("templates/message.html"));
}
else
{
	$alkeys_insertpics_output = file_get_contents("templates/alkeys_insertpics.html");
}

$tpl = str_replace('{content}', $alkeys_insertpics_output, file_get_contents("templates/index.html"));
$tpl = str_replace('{rightbar}', "", $tpl);
$tpl = str_replace('{leftbar}',  "", $tpl);
$tpl = str_replace('{welcome}',  $welcome, $tpl);
$tpl = str_replace('{navi}', $tpl_navi, $tpl);
$tpl = str_replace('{paging}', "", $tpl);

print "$tpl";
?>

Der Fehler tritt nur in der if-Abfrage auf, also wenn das Formular abgeschickt wurde. Der else-teil funktioniert super.

Wenn ich das Script ausführe, erhalte ich folgende Meldung:
Warning: file_get_contents(templates/message.html): failed to open stream: No such file or directory in /blabla/alkeys_insertpics.php on line 46

Zeile 46 ist diese hier:
PHP:
	$alkeys_insertpics_output = str_replace("{output}", $query_output, file_get_contents("templates/message.html"));

Nach genau diesem prinzip (und auch mit der Template-datei message.html) funktioniert es in anderen teilen meiner Site aber bestens.
Einen Rechtsschreibfehler kann ich nicht entdecken.
Ich hab sogar schon, den ganzen teile darüber auskommentiert, um einen fehler in diesem Bereich zu vermeiden.
Hat alles nichts geholfen :(
Entweder hab ich nun Tomaten auf den Augen und übersehe etwas total offensichtliches oder der fehler liegt ganz woanders.
Bitte helft mir!
 
...

Wie oben erwähnt, rufe ich die selbe Datei auch in anderen scripts im selben Verzeichniss auf - und da klappts ja merkwürdigerweise :confused:
Grad deswegen weiß ich ja auch nicht weiter :(
 
Es wäre mir echt wichtig, dass ihr mir hier helft.
Ich hab echt schon alles ausprobiert, den Fehler aber nicht gefunden...
 
Ich denke das Problem liegt hier:
PHP:
$directory = '/blabla/'.$_POST["datum"];
Denn ich behaupte jetzt mal, dass "blabla" ein Unterverzeichnis des Verzeichnisses mit dem Script ist.
Du gibst einen absoluten Pfad an, und zwar /blabla
Falls Dein Script in /var/www/htdocs liegt und darunter auch blabla zu finden ist wirst Du aber entweder den absoluten Pfad /var/www/htdocs/blabla oder den relativen Pfad blabla (also ohne den / am Anfang) angeben muessen.
 
Da wär ich im Leben nicht drauf gekommen :eek:

Obene heisst es korrekt:
PHP:
$directory = '/is/htdocs/45697/www.alkbrueder.de/gallery/'.$_POST["datum"];

Nun habe ich auf deinen Post hin, bei den Templates auch den absoluten Pfad auf dem Server angegeben - siehe da: Jetzt gehts :)
PHP:
file_get_contents("/is/htdocs/45697/www.alkbrueder.de/templates/message.html"));

Kannst du mir evtl. noch erklären, warum das so ist?!
 
Hat keiner ne Idee, warum dieser Fehler aufgetaucht ist?
Ich würd sowas in Zukunft gern vermeiden ;)
 
Wenn Du ein relatives Verzeichnis angibst musst Du am Anfang den / weglassen damit das System auch weiss, dass der Pfad relativ ist, also innerhalb des aktuellen Ordners.

Beispiel:
Du befindest Dich in /usr, willst nach /usr/local wechseln.
Dazu kannst Du entweder mit dem absoluten Pfad arbeiten indem Du cd /usr/local eingibst, oder mit dem relativen indem Du cd local eingibst.
 
Zurück