2017-12-23 18 views
0

Ich benutze Ubuntu 16.04. Ich versuche ein PHP-Skript unter var/www/html/CronScripts/ als Cronjob auszuführen. All dieses Skript erstellt eine .txt oder .out Datei im selben Verzeichnis. Hier ist das Skript:Berechtigung verweigert oder Etwas, wenn Sie versuchen, PHP-Skript als CRONJOB auszuführen, um eine TXT-Datei zu erstellen

<?php 

$handle = fopen("theFileHandle.out", "a"); 
fwrite($handle, "The quick brown fox jumps over a lazy dog.\n"); 
fclose($handle); 

?> 

Nun das Problem ist, dass, wenn ich dieses Skript ausführen, indem sie im Browser zu öffnen, erhalte ich folgende Fehler:

Warning: fopen(theFileHandle.out): failed to open stream: Permission denied in /var/www/html/CronScripts/index.php on line 3 

Warning: fwrite() expects parameter 1 to be resource, boolean given in /var/www/html/CronScripts/index.php on line 4 

Warning: fclose() expects parameter 1 to be resource, boolean given in /var/www/html/CronScripts/index.php on line 5 

so meine Schlussfolgerung ist, dass, wenn dies Skript wird ausgeführt als sudo, es wird keine PERMISSION PROBLEME geben; und da ich schließlich werde das Skript in einem cronjob laufen, ich ausgeführt, um den folgenden Befehl im Terminal

sudo crontab -e 

die follwoing cronjob sudo Benutzer-crontab-Datei hinzuzufügen.

* * * * * php /var/www/html/CronScripts/index.php > /var/www/html/CronScripts/output.out 

Danach wird eine Datei mit dem Namen output.out geschaffen ** ABER es leer war.

dann aus meiner websearch schloss ich, dass ich cronjob sudo Benutzer crontab wurde hinzugefügt, aber apache2/php vom User www-data laufen, so dass wahrscheinlich das Problem ist. Also wechselte ich den Benutzer zu www-data durch Ausführen von su -s /bin/bash www-data und dann zu seiner Crontab ich * * * * * php /var/www/html/CronScripts/index.php > /var/www/html/CronScripts/out.out hinzugefügt, aber die Ausgabe-Protokolldatei out.out wird nie erstellt.

Also meine Frage ist, warum bin ich mit diesem Problem konfrontiert und wie löse ich das?

+0

im ersten Fall, wenn Sie Sudo ausführen ... gibt es Fehler in /var/log/apache2/error.log? Und was ist die Ausgabe dieser Befehlszeile: ls -la/var/www/html? – Nico

Antwort

0

Das ursprüngliche Problem scheint, dass der Benutzer www-Daten (der Apache und damit das PHP-Skript ausführen) keine Rechte zum Schreiben in das Verzeichnis hat. Sie können das mit chown und chmod lösen, indem Sie dem www-data-Benutzer in diesem Verzeichnis Lese- und Schreibrechte erteilen.

Diese Lösung könnte ein Sicherheitsproblem sein. Ziehen Sie in Erwägung, ein Verzeichnis außerhalb des Apache-Servers zu verwenden (z. B./varr/www/anotherplace) und stellen Sie keine Ausführungsrechte für die von Ihrem Skript erstellten Dateien bereit.

Verwandte Themen