Probleme mit file_put_contents()

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

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);
}
[/PHP]

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‘, „
“, FILE_APPEND);[/PHP]

LG

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?

Ich habs gerade mal in Ubuntu 14.04 mit PHP 7.0.10 getestet funktioniert bei mir auch nicht o_O also mit „doppelter Dateiendung“.

Eine Idee wieso? Und wie man das umgehen kann?

LG

PHP 7.0.9 + Ubuntu 14.0.4 → funktioniert einwandfrei

Das Problem ist, dass mein Server auf einem Raspberry Pi läuft, und man kein PHP7 installieren kann.

Kann man es nicht irgendwie umgehen?

LG

PHP 5.5.9 + Ubuntu 14.0.4 → funktioniert ebenfalls einwandfrei

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 . ‚
‘;
file_put_contents( $dat, $fullmess, FILE_APPEND);
[/PHP] ( was auch immer ein
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 );[/PHP]

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
sorgt bei Ausgabe der Datei für einen Zeilemumbruch.

LG

Ich denke schon…

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

Dann sind wir ja mal froh dass es sowieso nicht funktioniert. Bei deinem Chat ist eine Code Injection ein Kinderspiel.

Das
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( ‚
‘, $aFileLines );[/PHP]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
[B]
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[/B]

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

test.user gehört dem Superuser, die kannst du nicht beschreiben

Das heißt? Was kann man tun?

LG

Owner und Group ändern.

chown www-data test.user
chgrp www-data test.user