1

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

PHP 代码

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

蝙蝠文件

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

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

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

4

1 回答 1

0

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

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

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

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

于 2012-09-24T21:08:48.737 回答