[英]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文件未转换,并且看不到错误。 关于下一步可以尝试的任何想法? 谢谢!!!
看起来输出数组为空。 您的批处理脚本应该输出吗?
另外,应使用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.