PHP exec()和命令行开关

时间:2015-04-27 18:06:54

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

所以我使用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脚本时,批处理文件只运行Access Process,但不执行命令行开关或打开数据库文件。

我已经将PHP配置为在IIS上拥有正确的权限,我只是难以理解为什么命令行切换不起作用而批处理文件无法打开数据库。

有什么想法吗?

这里是echo输出:

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

2 个答案:

答案 0 :(得分:0)

我不熟悉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

答案 1 :(得分:0)

看起来您有一些访问权限问题。

您是否尝试使用PHP运行echo exec("whoami"); 你得到什么用户名? 像"nt authority\iusr"

这样的东西

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

此外,您可以将默认应用程序池用户从ApplicationPoolIdentity更改为LocalServiceLocalSystem来测试结果(仅限TEM会??)

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

如果上述内容无效,我将使用本地命令提示符中的php命令从我的命令行(本地)测试我的php应用程序。