Gerade eben habe ich ein paar PHP-Dateien eines meiner PHP-Projekte vom einem USB-Stick auf die Festplatte überspielt, da bekam ich folgende Fehlermeldung:
Warning: Unknown: failed to open stream: Permission denied in Unknown on line 0
Warning: Unknown: Failed opening '/home/development/homepages/foobar/index.php' for inclusion (include_path='.:/usr/share/php:/usr/share/pear') in Unknown on line 0
Auf der Konsole habe ich mir dann mit dem ls Befehl das Verzeichnis mit den Rechten anzeigen:
Download Code!
ls -lisa
312200 4 -rwx------ 1 seal seal 3598 2006-11-25 21:09 index.php
Augenscheinlich schien alles zu stimmen, doch nach kurzer Überlegung fiel mir dann ein, dass der Webserver unter einem anderen Benutzer lief. Der Benutzer des Webservers ist bei mir www-data. Somit ist klar, warum es zu der Meldung:
Warning: Unknown: failed to open stream: Permission denied in Unknown on line 0 gekommen ist - es fehlen die entsprechenden Rechte.
Lösung
Um die entsprechenden Rechte zu setzen, habe ich den find Befehl in Kombination mit chmod benutzt. Der Befehl sieht folgendermaßen aus:
Download Code!
find ./ -type f -exec chmod 644 '{}' \;
Eine kurze Erklärung: find ist der Befehl um eine Suche zu starten. Das ./ ist das aktuelle Verzeichnis, von dem aus gesucht wird (auch alle darunter liegenden!). Das -type f sucht nur Dateien. Danach kommt der exec Befehl zum ausführen einer Anweisung. Um die Rechte zu ändern, wird chmod verwendet, mit der Bitmaske 644. Das Argument '{}' fügt jede gefunde Datei in die Kommandozeile ein und das \; zeigt, dass der exec Befehl zu ende ist.
PS. Fall ihr nur FTP-Zugang habt, könnt ihr auch mit eurem FTP-Programm die Dateirechte ändern. Meistens mit markieren der Datei(en) und dann rechte Maustaste, Details, Eigenschaften oder so etwas ähnliches.