Pintus: fopen/write Fehler?

Hallo!

Ich habe folgenden Code erstellt.

<?php
$fn="/verzeichnis1/include/news.txt"; // Dateiname für die Daten
$pwd="master"; // Admin-Kennwort
$me=4; // Maximale Anzahl alter Newseinträge

$now=strftime("%d.%m.%Y %H:%M:%S");
if (!isset($action)) { $action=""; }

if (file_exists($fn)) // Vorhandene Einträge laden
{
$fp=fopen($fn,"r");
$dat=fread($fp,filesize($fn)); // Daten lesen
fclose($fp);

$line=explode("\n",$dat); // Zeilen in Array packen
$anz=count($line)-1; // Anzahl der Einträge feststellen
}

if ($me>$anz) { $me=$anz; } // Schreibmaximum = MaxAnzEinträge

if ($action=="send") // Neuen Eintrag schreiben
{
if ($pass==$pwd) // Kennwort überprüfen
{
$text=str_replace("\n","",$text); // Zeilenumbrüche aus der Textarea umwandeln

$entry="<div class=datum>Geschrieben am: $now</div>$text";
$fp=fopen($fn,"w");
$res1=fwrite($fp,"$entry\n"); // Daten schreiben

// Alte Einträge anhängen, wenn vorhanden
if ($anz>0) { for($j=0;$j<$me;$j++) { fwrite($fp,"$line[$j]\n"); } }
fclose($fp);

if ($res1==0) // Schreibresultat auswerten
{
echo "<font color=red>Fehler beim schreiben.</font>"; // Fehlermeldung ausgeben
} else {
echo "<div class=w>$entry</div>"; // Neuen Eintrag anzeigen
}
} else {
echo "<font color=red>Falsches Kennwort.</font>";
}
}

// Einträge anzeigen
if ($action!="new") { for ($i=0;$i<$anz;$i++) { echo "<div class=n>$line[$i]\n</div>"; }}

if ($action=="new") // Eingabeformular anzeigen
{
echo "<form name=form1 action=news.php method=post>";
echo "<table cellpadding=0 cellspacing=2 border=0>";
echo "<tr><td>Kennwort: </td><td align=right><input type=text name=pass></td></tr>";
echo "<tr><td colspan=2>Text<textarea name=text></textarea></td></tr>";
echo "<tr><td colspan=2 align=right><input class=b type=submit name=action value=send></td></tr>";
echo "</table>";
echo "</form>";
echo "<script>document.form1.pass.focus();</script>";
}

// Links
echo "<hr><a href='news.php?action=new'>Neuer Eintrag</a> - <a href='news.php'>Lesen</a>";
?>

aber jedesmal wenn ich die datei aufrufe, habe ich folgende fehler

Warning: fopen(): open_basedir restriction in effect. File(/verzeichnis1/include/news.txt) is not within the allowed path(s): (/var/www/l3s5188/) in /var/www/l3s5188/html/verzeichnis1/admin/news.php on line 104

Warning: fopen(/verzeichnis1/include/news.txt): failed to open stream: Operation not permitted in /var/www/l3s5188/html/thillainathan/admin/news.php on line 104

Warning: fwrite(): supplied argument is not a valid stream resource in /var/www/l3s5188/html/verzeichnis1/admin/news.php on line 105

Warning: fclose(): supplied argument is not a valid stream resource in /var/www/l3s5188/html/verzeichnis1/admin/news.php on line 109
Fehler beim schreiben.

Nebenbei noch eine kleine Frage:

Muss ich beiden Dateien (news.php und news.txt) CHMOD 777 geben? Oder reicht es, wenn news.php CHMOD 777 hat?

Gruß

Pintus

  1. Hallo Pintus,

    Warning: fopen(): open_basedir restriction in effect. File(/verzeichnis1/include/news.txt) is not within the allowed path(s): (/var/www/l3s5188/) in /var/www/l3s5188/html/verzeichnis1/admin/news.php on line 104

    Die Datei im Verzeichnis /verzeichnis1/include/news.txt gibt es nicht - mit einem / am Anfang landest du nämlich im Dokumentroot des Servers - und da hast du erstens nichts zu suchen und außerdem gibt es deine Datei dort nicht :-) Du musst bei deiner Variablen $fn am Anfang des Codeteils noch $_SERVER['DOCUMENT_ROOT'] oder dessen Inhalt einbauen.

    Muss ich beiden Dateien (news.php und news.txt) CHMOD 777 geben? Oder reicht es, wenn news.php CHMOD 777 hat?

    die news.txt bracht die Rechte dass es vom php-Interpreter gelesen und vorallem beschrieben werden kann, 666 dürfte das höchste sein, was du brauchst (je nach Konfiguration reicht auch 644 oder 664). Mit 777 würdest du jedem das Recht geben die Datei auszuführen - was nicht nötig ist. Die news.php braucht keine anderen Rechte als die anderen php-Dateien auch.

    Grüße aus Nürnberg
    Tobias

    --
    Selfcode: sh:( fo:) ch:? rl:( br:< n4:& ie:% mo:| va:) de:] zu:) fl:( ss:| ls:[ js:|