使用PHP exec命令执行批处理文件时出现问题
我试图让PHP调用一个批处理文件,该批处理文件将获取一个RTF文件,并使用OpenOffice宏将其转换为PDF。我已经在命令行上测试了批处理文件,它工作得很好,但是我没有从PHP调用并使用相同的批处理文件 我的机器操作系统是XP professional SP 3。我正在运行IIS 6和PHP版本5.2.9。 我已在c:\windows\system32\cmd.exe上将执行权限授予internet用户。 我指定了正在执行的批处理文件的完整路径和要转换的RTF文件的完整路径 PHP如下所示,$arg是要转换的RTF:使用PHP exec命令执行批处理文件时出现问题,php,exec,openoffice.org,Php,Exec,Openoffice.org,我试图让PHP调用一个批处理文件,该批处理文件将获取一个RTF文件,并使用OpenOffice宏将其转换为PDF。我已经在命令行上测试了批处理文件,它工作得很好,但是我没有从PHP调用并使用相同的批处理文件 我的机器操作系统是XP professional SP 3。我正在运行IIS 6和PHP版本5.2.9。 我已在c:\windows\system32\cmd.exe上将执行权限授予internet用户。 我指定了正在执行的批处理文件的完整路径和要转换的RTF文件的完整路径 PHP如下所示,
$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!";
RTF文件没有被转换,我没有看到错误。我下一步可以试试什么?谢谢 PHP是否在安全模式下运行?如果是这样,shell命令将使用转义。也许这就是问题所在
您可以控制运行PHP脚本的服务器吗?PHP是否在安全模式下运行?如果是这样,shell命令将使用转义。也许这就是问题所在
您可以控制运行PHP脚本的服务器吗?我打赌这是关于权限的 在一个典型的设置中,PHP作为apache运行——因此您需要确保apache有权执行批处理文件
另外,检查,然后。我打赌这是关于权限的 在一个典型的设置中,PHP作为apache运行——因此您需要确保apache有权执行批处理文件
另外,选中,并且。看起来输出数组是空的。批处理脚本应该有输出吗
此外,还应使用escapeshellarg看起来输出数组是空的。批处理脚本应该有输出吗
此外,还应使用escapeshellarg您是否使用IIS作为Web服务器?如果是这样,PHP exec函数在默认情况下将不起作用,您不应该规避阻止它运行的安全措施 检查事件查看器,您会发现一些与问题相关的错误。通过google运行一个查询:IIS PHP exec。这将为您提供有关该问题的大量信息选择 基本上,PHP exec函数尝试派生一个新的cmd.exe实例。IIS禁止此操作,因为它可能会在系统中打开安全漏洞 我提出的最佳解决方案是让php脚本将要执行的命令写入平面文件或创建数据库条目。然后,您需要编写一个单独的脚本,由windows计划程序启动,每10分钟左右运行一次,以检查平面文件或数据库中要运行的命令。然后,新脚本将运行这些命令,然后将结果或执行确认放在web应用程序稍后可以访问的位置
这肯定是个难题。您是否使用IIS作为Web服务器?如果是这样,PHP exec函数在默认情况下将不起作用,您不应该规避阻止它运行的安全措施 检查事件查看器,您会发现一些与问题相关的错误。通过google运行一个查询:IIS PHP exec。这将为您提供有关该问题的大量信息选择 基本上,PHP exec函数尝试派生一个新的cmd.exe实例。IIS禁止此操作,因为它可能会在系统中打开安全漏洞 我提出的最佳解决方案是让php脚本将要执行的命令写入平面文件或创建数据库条目。然后,您需要编写一个单独的脚本,由windows计划程序启动,每10分钟左右运行一次,以检查平面文件或数据库中要运行的命令。然后,新脚本将运行这些命令,然后将结果或执行确认放在web应用程序稍后可以访问的位置
这肯定是个难题。你能列出你的批处理文件吗?相关的,你能列出你的批处理文件吗?相关的,
ret: Array ( )
err is 0
DONE!