2010-12-10 11 views
1

Ich habe ein PHP-Skript mit exec(), die gut von der Befehlszeile, aber nicht in einem Web-Kontext ausgeführt werden kann. Das Skript ist einfach:exec() läuft über die Befehlszeile, aber nicht Web

<?php exec('echo "wee" > /home/jason/wee.txt'); 

Wenn ich dieses Skript wee.php aufrufen und ausführen php wee.php, es funktioniert gut und wee.txt wird geschrieben. Wenn ich zu http://mysite.com/wee.php gehe, gibt das Skript vor, gut zu laufen, aber wee.txt wird nicht wirklich geschrieben.

Eine Idee, warum das passiert?

Antwort

3

Der Webserver wird als anderer Benutzer ausgeführt, und dieser Benutzer hat keine Berechtigung zum Schreiben in Ihr Basisverzeichnis.

+0

Gibt es eine Möglichkeit, dies zu tun? wie Erlaubnis vorübergehend geben – Thejas

0

Ihr Webserver verfügt wahrscheinlich (richtig) nicht über die erforderlichen Berechtigungen zum Schreiben in ein Basisverzeichnis.

0

Ich bemerkte, dass Sie nach/home/jason schreiben. Beachten Sie, dass Apache derjenige ist, der diesen Befehl ausführt (z. B. www-data user, wenn Ubunut oder Debian verwendet wird). Verfügt der Prozess über die erforderlichen Rechte zum Schreiben in diesen Ordner?

1

Die anderen Poster sind korrekt, um zu empfehlen, dass der Webserver-Benutzer nicht berechtigt ist, in Ihr Home-Verzeichnis zu schreiben. Um zu sehen, ob sie richtig sind, versuchen Sie, den Code zu ändern, um ihn in /tmp/wee.txt zu schreiben. Das sollte weltweit beschreibbar sein.

Eine andere Möglichkeit ist, dass php so konfiguriert werden kann, dass sie den Aufruf von exec() deaktiviert. Siehe http://www.cyberciti.biz/faq/linux-unix-apache-lighttpd-phpini-disable-functions/

+0

wenn disable, sollte ein Fehler von php dann werfen? – ajreal

Verwandte Themen