【问题标题】:PHP exec() and command line switchesPHP exec() 和命令行开关
【发布时间】:2015-04-27 18:06:53
【问题描述】:

所以我正在使用 PHP exec() 在我的服务器上运行一个批处理文件:

echo exec("printCountries.bat");

批处理文件打开 Microsoft Access 2007 并运行宏以打印表单,然后关闭 Access:

START /MIN /B msaccess.exe "C:\inetpub\wwwroot\system\reports.accdb" /X printCountries

我可以从命令行成功运行批处理文件,表单打印到我们的网络打印机(这是用于公司内部网)并关闭 Access。但是当我运行 PHP 脚本时,批处理文件只运行访问进程而不执行命令行切换或打开数据库文件。

我已将 PHP 配置为在 IIS 上具有正确的权限,我只是对为什么命令行开关不起作用以及批处理文件无法打开数据库感到困惑。

有什么想法吗?

这里是回显输出:

C:\inetpub\wwwroot\scale>START /MIN /B msaccess.exe "C:\inetpub\wwwroot\system\reports.accdb" /X printCountries

【问题讨论】:

    标签: php batch-file ms-access-2007


    【解决方案1】:

    您的访问权限似乎有问题。

    你有没有尝试在 PHP 中运行这个echo exec("whoami"); 你得到什么用户名? "nt authority\iusr" 之类的东西?

    您必须授予默认 IIS 用户(即 IIS_IUSRS)对脚本所在路径的完全访问权限。

    此外,您可以将默认应用程序池用户从 ApplicationPoolIdentity 更改为(只是暂时的,嗯?)LocalServiceLocalSystem 以测试结果...

    如果我是你,我会在 IIS 中创建一个新的应用程序,然后我会创建一个新的应用程序池并将它分配给这个应用程序。然后我创建了一个新用户,该用户可以访问所有适当的目录(网络目录和 bat 所在的位置)。

    如果上述方法均无效,我将在本地命令提示符下使用 php 命令从命令行(本地)测试我的 php 应用程序。

    【讨论】:

      【解决方案2】:

      我不擅长 PHP,也不擅长 Access。但是,当您从 PHP 调用批处理文件时,请创建一个 cmd.exe 实例并将“/c printCountries.bat”传递给 cmd.exe。换句话说,PHP exec 运行的命令应该是这样的(假设 PATH 设置正确):

      cmd.exe /c printCountries.bat
      

      另外,在 printContries.bat 中,我认为您需要等到访问过程终止。所以它应该看起来像

      START /WAIT /MIN /B msaccess.exe "C:\inetpub\wwwroot\system\reports.accdb" /X printCountries
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2013-09-07
        • 2012-05-27
        • 2012-08-18
        • 2017-05-06
        • 2019-02-18
        • 2013-07-28
        • 1970-01-01
        相关资源
        最近更新 更多