PHP Datei einlesen

  • Guten Tag,
    ich wollte heute ein PHP Script schreiben was auf eine TXT (im selben Verzeichnis) zugreift und diese bearbeitet. Aber letzt endlich wurde mir diese Fehlermeldung angezeigt:


    PHP Warning: file_put_contents(test.txt): failed to open stream: Permission denied in /var/www/submit.php on line 13


    Darauf hin habe ich die Datei und das Verzeichnis freigegeben:
    www-data ALL=(root) NOPASSWD: /var/www
    www-data ALL=(root) NOPASSWD: /var/www/test.txt


    Aber der Fehler bleibt.


    Nun bräuchte ich Hilfe wie ich die Rechte vergeben soll.
    Danke schon mal im Voraus.


    PHP Script:

    PHP
    <?php
    $datei = 'test.txt';
    $inhalt = file_get_contents($datei);
    $inhalt .= "test\n";
    file_put_contents($datei, $inhalt);
    ?>
  • Da scheinst du etwas zu vermischen: Die über visudo eingetragenen Zeilen sind BEFEHLE die man Freigibt, nicht Verzeichnisse. Über sudo werden also keine Freigaben für Dateien / Verzeichnisse erteilt!


    Davon abgesehen muss du dafür keine sudo Rechte vergeben. Ich vermute eher das Verzeichnis oder die submit.php gehört nicht dem Webserver Benutzer, und somit hat er kein Recht dort zu schreiben.


    Es ist eine ziemlich blöde Idee alles über sudo regeln zu wollen - gewöhn dir das blos wieder ab!

  • Das mit dem Sudo war mehr oder weniger eine Panik Reaktion, aber du hast recht ich sollte sowas zukünftig lassen. Aber die TXT ist im selben Verzeichnis wie submit.php(/var/www). Des wegen habe ich mich über die Fehlermeldung gewundert. Giebt es noch andere Dinge weswegen meinen Server kein Zugriff bekommt? :s

  • Hier ist der Code:


    Code
    -rw-r--r--  1 root     www-data      444 Jan  3 15:56 submit.php
    -rw-r--r--  1 root     www-data        0 Jan  3 19:47 test.txt


    Ich glaube ich sehe das Problem, ich habe erst mit dem Editor die TXT erstellt und dann gehört die nicht zu www-data. oder? :-/

  • Der Besitzer ist root, die Gruppe ist www-data. Theoretisch sollte es gehen aber um absolut sicher zu gehen wäre es besser wenn der Besitzer ebenfalls www-data wäre - denn das nächste Problem wären die Dateirechte, die aktuell besagen das nur der Besitzer schreiben ( w ) darf, also es darf in diesem Fall nur root in test.txt schreiben, www-data hat nur lese ( r ) Rechte.


    Code
    sudo chown -R www-data:www-data /var/www/


    Damit werden Alle Dateien und Verzeichnisse sowie Unterverzeichnisse auf Besitzer www-data und Gruppe www-data geändert.