【问题标题】:Restarting Apache Using PHP in IIS在 IIS 中使用 PHP 重新启动 Apache
【发布时间】:2012-09-21 06:58:35
【问题描述】:

我正在尝试使用 bat 文件重新启动我的 Apache2.2 网络服务器,该文件由在 IIS 中使用 exec() 运行的 PHP 调用,Apache 和 IIS 在同一台服务器中。

PHP 代码

exec("cmd /c restart.bat");

bat 文件

"PATH_TO_APACHE\bin\httpd.exe" -k restart -n Apache2.2

当我通过 http 加载我的 php 以重新启动时,我的 Apache 错误日志文件中出现“无法打开日志”错误。

我的大部分搜索结果表明存在端口 80 冲突,但是当我执行 netstat 时没有,我的 IIS 正在侦听不同的端口。双击 .bat 文件可以工作,但从 PHP 运行它会出错。有任何想法吗?请指教。

【问题讨论】:

  • 可能是因为蝙蝠是在IUSR下运行的?
  • 我也添加了对 cmd.exe 的权限,但我得到了同样的错误,在安全选项卡中添加了 NETWORK SERVICE 和 IUSR
  • 不确定这是否有帮助,但我曾经不得不启动一个后台进程(bat 中的start /B php longtimejob.php)并且使用execsystempassthru 没有成功。最后我使用了pclose(popen("work.bat","r")) 并工作了。所以也许你可以试试popenproc_open
  • 我收到同样的错误“无法打开日志”,可能是权限问题,但我不确定还有什么可以授予权限。
  • 将apache安装为服务并使用net stop; net start 重启apache服务。这应该可以帮助您更好地阐明权限。我怀疑apache实际上需要更多的权利。例如检查错误日志文件的权限。

标签: php iis-7 exec apache2.2


【解决方案1】:

IIS 在指定用户的上下文中运行所有可执行脚本,通常是 IUSR_[MACHINENAME] 帐户。 此帐户可以在池配置中的 IIS 配置中更改。

您遇到的问题可能是不允许该用户访问日志文件位置。

要追踪这个问题,我会: 1.(危险,仅供测试使用):将IUSR账号放入本地管理员组。再次测试。如果它有效,你知道这是一个权限问题。 2.尝试使用runas命令以IUSR用户运行cmd.exe并在控制台窗口中执行你的命令,这样你就可以看到所有的错误信息并且更容易测试。 3.允许IUSR写入apache日志位置。

一个完全不同的尝试是在 PHP 中创建一个标记文件,如果该标记文件存在,则使用以管理员身份运行的计划任务重新启动 apache。这样,您无需为 IUSR 帐户授予更多权限,也无需使用单独的代码来处理重启。

【讨论】:

  • 谢谢你,你给了我这个想法,我去检查了 IIS 中的应用程序池设置并将 NetworkService 更改为 LocalSystem 以用于该特定应用程序并且它有效。
猜你喜欢
  • 2010-11-09
  • 1970-01-01
  • 1970-01-01
  • 2012-05-24
  • 1970-01-01
  • 1970-01-01
  • 2023-03-15
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多