2010-12-10 2 views
1

У меня есть PHP-скрипт с exec(), который будет отлично работать из командной строки, но не в веб-контексте. Сценарий просто:exec() работает через командную строку, но не через сеть

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

Если я называю этот скрипт wee.php и запустить php wee.php, он отлично работает и wee.txt будет написана.

Если я перехожу к http://mysite.com/wee.php, скрипт притворяется, что работает нормально, но wee.txt на самом деле не написали.

Любая идея, почему это происходит?

ответ

3

Веб-сервер работает как другой пользователь, и у этого пользователя нет разрешения на запись в домашний каталог.

+0

Есть ли способ сделать эту работу? например, дать разрешение временно – Thejas

0

Возможно, ваш веб-сервер (правильно) не имеет соответствующих прав для записи в домашний каталог.

0

Заметил, что вы пишете/home/jason. Обратите внимание, что apache будет выполнять эту команду (например, пользователь www-data при использовании Ubunut или Debian). Имеет ли процесс права на переписывание в эту папку?

1

Другие плакаты верны, чтобы предложить пользователю веб-сервера не иметь права на запись в ваш домашний каталог. Чтобы убедиться, что они правы, попробуйте изменить код для записи в /tmp/wee.txt. Это должно быть доступно для всего мира.

Другая возможность заключается в том, что php может быть настроен для отключения вызова exec(). См. http://www.cyberciti.biz/faq/linux-unix-apache-lighttpd-phpini-disable-functions/

+0

, если отключить, ошибка должна быть выбрана php тогда? – ajreal

Смежные вопросы