繁体   English   中英

使用PHP exec命令执行批处理文件时出现问题

[英]Problem using PHP exec command to execute a batch file

我试图让PHP调用一个批处理文件,该文件将使用RTF文件,并使用OpenOffice宏将其转换为PDF。 我已经在命令行上测试了该批处理文件,并且工作正常,但是我没有运气,并且没有使用PHP中的同一批处理文件。

我的机器操作系统是XP Professional SP3。我正在运行IIS 6和PHP版本5.2.9。 我已向c:\\ windows \\ system32 \\ cmd.exe上的Internet用户授予了执行权限。 我指定了要执行的批处理文件的完整路径,以及要转换的RTF文件的完整路径。

PHP看起来像这样,其中$ arg是要转换的RTF:

$arg = "C:\\web_root\\whatever\\tempOutput.rtf";
$command = "c:\\windows\\system32\\cmd.exe /c c:\\web_root\\whatever\\convert.bat $arg";

然后在try-catch中,我调用exec命令:

exec("$command 2>&1 && exit", $ret, $err);

我在捕获后回显结果:

echo "ret: ";
print_r ($ret);
print "<br>";
echo "err is ";
echo $err;
print "<br>";
echo "DONE!";

这就是我所看到的:

ret: Array ( ) 
err is 0
DONE!

RTF文件未转换,并且看不到错误。 关于下一步可以尝试的任何想法? 谢谢!!!

我敢打赌这是关于权限的。

在典型的设置中,PHP以apache的身份运行-因此,您需要确保apache有权执行批处理文件。

另外,请检查此相关的SO问题以及此google搜索

看起来输出数组为空。 您的批处理脚本应该输出吗?

另外,应使用escapeshellcmd和escapeshellarg

您是否正在使用IIS作为Web服务器? 如果是这样,则默认情况下,PHP exec函数将无法运行,并且您不应绕过阻止其运行的安全措施。

检查事件查看器,您应该找到一些与您的问题有关的错误。 通过google运行以下查询:IIS PHP exec。 这将为您提供有关该问题的大量信息。

基本上,PHP exec函数会尝试派生新的cmd.exe实例。 IIS禁止这样做,因为它可能会在系统中打开安全漏洞。

我想出的最好的解决方案是让您的php脚本将要执行的命令写入平面文件或进行数据库输入。 然后,您需要编写一个单独的脚本,该脚本由Windows Scheduler启动,每10分钟运行一次,以便检查您的平面文件或数据库以查找要运行的命令。 然后,新脚本将运行命令,然后放置结果或执行确认,以供您的Web应用程序稍后访问。

这是肯定的。

PHP是否以安全模式运行? 如果是这样,则使用escapeshellcmd对 shell命令进行转义。 也许这是问题所在?

您可以控制运行PHP脚本的服务器吗?

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM