Как сказал Марк Б, вам нужны права пользователя root, чтобы можно было перезапустить Apache.Лучший способ справиться с этим, ИМХО, - дать пользователю, работающему под Apache, перезапустить Apache с помощью команды sudo
.
. Вы захотите отредактировать * 1006.* файл и добавьте строки, подобные следующим:
Cmnd_Alias RESTART_APACHE = /sbin/service apache2 restart
www-data ALL=NOPASSWD: RESTART_APACHE
Вам может потребоваться nobody
вместо www-data
, это зависит от пользователя, под которым работает Apache.В Debian Apache обычно запускается под пользователем www-data
, тогда как в Red Hat часто Apache запускается под пользователем nobody
.Кроме того, /sbin/service apache2 restart
может быть /sbin/service apache restart
или /sbin/service httpd restart
.Все зависит от конфигурации вашей системы.
Как только это будет сделано, в PHP вы можете использовать код:
exec('/sbin/service apache2 restart');
(Очевидно, это изменилось, если команда для перезапуска Apache отличается на вашем сервере.)
Обратите внимание: это вполне может считаться угрозой безопасности! Если вы сделаете это, вы полностью доверяете двоичному файлу sudo
, двоичному файлу service
и ваша система подчиняется правилам и не позволяет процессу Apache / PHP получить корневую оболочку.Я настоятельно рекомендую спросить http://serverfault.com о последствиях того, что вы здесь делаете.