• Jetzt anmelden. Es dauert nur 2 Minuten und ist kostenlos!

[ERLEDIGT] Probleme mit file_put_contents()

L

Leif-Erik Kotsch

Guest
Hallo,

ich bin an einem PHP-Script, welches mit file_put_contents() einen Text in eine Datei schreiben soll.
Die Datei heist: test.test.txt. Leider funktioniert das irgendwie nicht.
Ich habe es jetzt mal mit einer anderen Datei probiert die nur test.txt heißt, und da funktioniert es auf einmal.

Kann das daran liegen das meine Datei zwei punkte im Name hat? Und wie kann das gemacht werden?

LG
 
Werbung:
Also normalerweise sollte es trotzdem gehen. Also ich hab es mal getestet mit folgendem Script

PHP:
$file = "test.test.txt";

if(is_file($file)) {
  $current = file_get_contents($file);

  $current .= "Das ist ein Test.\n";

  file_put_contents($file, $current);
}

Das geht bei mir einwandfrei. Vielleicht solltest du uns mal den Code zeigen wo die Datei befüllst.
 
Das ist mein Code. (Für einen "Chat")

PHP:
$toprivat = $_POST['...']; //(=user.admin)

$dat = $toprivat.".txt";
$fullmess = "(" . $time . ")" . " " . $abs . ": " . $mess;

file_put_contents('$dat', $fullmess, FILE_APPEND);
file_put_contents('$dat', "<br />", FILE_APPEND);

LG
 
Werbung:
Tja, da wird versucht, eine Datei mit dem Namen $dat zu erstellen, weil Variablen zwischen ' nicht geparst werden. Ich weiß sowieso nicht, was die da sollen.
 
Hallo,

habe den Fehler korrigiert, das funktioniert trotzdem nicht.

Kann es sein, das PHP das nicht macht, weil in dem Dateinamen zwei punkte vorkommen?
 
Werbung:
Werbung:
Das dürfte auch nicht an den Punkten liegen, denn egal ob Raspberry, Notebook oder PC, solange das OS ein Unix-Derivat ist, funktionieren Punkte in Dateinamen!

Was genau funktioniert denn an dem nicht:
PHP:
$toprivat = $_POST['...']; //(=user.admin)
$dat = $toprivat . '.txt';
$fullmess = '(' . $time . ')' . ' ' . $abs . ': ' .  $mess . '<br>';
file_put_contents( $dat, $fullmess, FILE_APPEND);
( was auch immer ein <br> in einer .txt Datei verloren hat )

Vielleicht scheitert es an den Zugriffsrechten?
Ich würde mal in dem Script das ErrorReporting einschalten, vielleicht kommt ja ein Hinweis auf die Fehlerquelle:
PHP:
error_reporting ( -1 );
ini_set ( 'display_errors', true );
 
Das dürfte auch nicht an den Punkten liegen, denn egal ob Raspberry, Notebook oder PC, solange das OS ein Unix-Derivat ist, funktionieren Punkte in Dateinamen!

Was genau funktioniert denn an dem nicht:
PHP:
$toprivat = $_POST['...']; //(=user.admin)
$dat = $toprivat . '.txt';
$fullmess = '(' . $time . ')' . ' ' . $abs . ': ' .  $mess . '<br>';
file_put_contents( $dat, $fullmess, FILE_APPEND);
( was auch immer ein <br> in einer .txt Datei verloren hat )

Vielleicht scheitert es an den Zugriffsrechten?
Ich würde mal in dem Script das ErrorReporting einschalten, vielleicht kommt ja ein Hinweis auf die Fehlerquelle:
PHP:
error_reporting ( -1 );
ini_set ( 'display_errors', true );


Hallo,
Danke für die Antwort. An den Rechten liegt es sicher nicht, da in eine andere Datei ohne Probleme geschrieben wird.
Ich dachte auch schon, da die Datei nach einem via .htaccess eingeloggten Nutzer benannt wird, das die Punkte möglicherweise als Sonderzeichen ausgegeben werden.
Das <br> sorgt bei Ausgabe der Datei für einen Zeilemumbruch.

LG
 
Werbung:
An den Rechten liegt es sicher nicht,

Ich denke schon...

da in eine andere Datei ohne Probleme geschrieben wird.

Das heißt nicht dass die Rechte der anderen Datei passen.

Das <br> sorgt bei Ausgabe der Datei für einen Zeilemumbruch.

Dann sind wir ja mal froh dass es sowieso nicht funktioniert. Bei deinem Chat ist eine Code Injection ein Kinderspiel.
 
Das <br> sorgt bei Ausgabe der Datei für einen Zeilemumbruch.
Das ist schon klar, aber das macht man wie gesagt nicht in der Datei, sondern bei der Ausgabe bspw.:
PHP:
$aFileLines = file( $dat, FILE_IGNORE_NEW_LINES|FILE_SKIP_EMPTY_LINES );
echo implode( '<br>', $aFileLines );
Einen Grund dafür hat scbawik gerade genannt.

Btw. hast Du denn den ErrorReport getestet oder gehst Du davon aus, dass nicht nötig ist, weil Du weißt, woran es nicht liegen kann?!
 
Hallo,
ich bekomme folgende Fehlermeldung:

Warning: file_put_contents(Private/test.test): failed to open stream: Permission denied in /var/www/html/index.php on line 41

Warning: file_put_contents(Private/test.test): failed to open stream: Permission denied in /var/www/html/index.php on line 42

Die Rechte der Index.php, welche die Datei erstellen soll liegen bei 777
Die Rechte des Ordners, in welchen die Dateien getan werden sollen liegen bei 771

Das mit der Code Injection wird noch behoben.

LG
 
Werbung:
Naja, aber Permission denied sagt doch alles!
Testweise mal auf 777 oder 775 stellen, um zu sehen, ob es das evtl. schon ist.
 
Naja, aber Permission denied sagt doch alles!
Testweise mal auf 777 oder 775 stellen, um zu sehen, ob es das evtl. schon ist.

Wessen Berechtigung? Des Ordners oder der PHP-Datei oder der TXT?
Die die Berechtigung des Ordners müssen ja passen, da eine datei ja ohne probleme bearbeitet werden kann.

Wenn ich mit ls -l in den Ordner schaue, kommt folgendes:

pi@raspberrypi:/var/www/html $ ls -l Private/
insgesamt 4
-rw-r--r-- 1 www-data www-data 0 Sep 9 14:04 leif.kotsch (bei dieser Datei funktioniert es)
-rw-r--r-- 1 root root 8 Sep 8 19:39 test.user (bei dieser nicht)



LG
 
Werbung:
Zurück
Oben