Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/redis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用PHP exec命令执行批处理文件时出现问题_Php_Exec_Openoffice.org - Fatal编程技术网

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

使用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如下所示,

我试图让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:

$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!