我有一个本地服务器,需要更改虚拟主机apache配置文件,然后重新启动apache,以便新配置生效.
PHP可以这样做吗?我试过passthru和exec,但他们没有工作.也许问题是我正在尝试重启PHP的父进程?
谢谢你的帮助!!
我使用了一个cron脚本(用PHP编写,不是从Web服务器执行)来检查服务器是否已启动并重新启动服务器.
但是,我不会从服务器创建的进程中执行此操作,因为您知道您将要杀死父进程,这会对子进程产生不良影响.
最简单的方法是拥有一个PHP可以创建的文件/ tmp/RESTART_APACHE,以及cron脚本检查的文件.如果cron脚本看到文件/ tmp/RESTART_APACHE,那么它会正确重启Apache.
使用cron脚本会引入延迟(如果每分钟运行一次,最多60秒),但除此之外应该按照您的意愿工作.
根据您打算如何使用它,这可能会有所帮助.
(您可能希望使用与/ tmp /不同的目录来设置权限,并防止服务器上的任何人能够创建该文件.)
编辑:请参阅Aaron H对此帖的评论.我同意他所说的话:你真的要小心,重启你的网络服务器的能力不是一般公众可以获得的服务.
限制对可以触发重启的系统的访问; 确保触发重新启动的文件具有限制性权限,因此只有Web进程可以创建该文件,并且通常是智能的.
我已经完成了这件事.但是,它仅用于开发环境,可以根据需要为开发人员快速创建虚拟主机.到目前为止工作非常愉快.
我的方法是在系统上创建一个新用户,为这个用户提供重新加载apache的权限,并从Apache-> PHP使用SSH到localhost,使用授权密钥,不用密码发送给该用户,发出命令.
这样做的原因是我不想给apache用户(通常是www-data)通常重新加载自己的能力.我将新用户命名为wwwctrl.
我使用的命令是:
ssh -i /path/to/key-file wwwctrl@localhost sudo /etc/init.d/apache2 reload
我必须手动执行此命令一次作为wwwctrl用户将本地主机密钥添加到~www.ctrl/.ssh/known_hosts.
我使用proc_open()来监视命令的执行.
事实上,我正在为不同系统上的不同Apache安装生成一批虚拟主机,因此在每个系统上我都有这个wwwctrl用户来重新加载Apache,基本上这样做是在"foreach hosts as host do ... wwwctrl @ host @".