2012-05-16 18 views
0

我需要在后台启动OpenOffice服务器(如果它不是instanciate),然后用JODConverter做一个文件转换。
该方案是如下:由PHP发起的Bash后台进程不起作用

  • 用户通过一个形式输入一个* .html文件。
  • 我通过PHP脚本中的$ _FILES变量获取对应于表单动作的文件
  • 我使用shell_exec运行bash脚本,并将temp路径传递给它,以访问我的bash脚本中的文件,然后做皈依

这是PHP代码:

 $fichier = $_FILES['html_file']; 
     if($fichier) { 
      if(is_uploaded_file($fichier['tmp_name'])) { 

       if(move_uploaded_file($fichier['tmp_name'],"/var/www/test/doc/".$fichier['name'])) { 
        $output = shell_exec("./converter {$fichier['name']}"); 
        echo $output; 
       } 
      } 
     } 

脚本 “转换器” 代码:

#!/bin/bash 
fichier=$1 
pid=$$ 

echo RUNNING sOFFICE : 

SERVICE=soffice 
if P=$(pgrep $SERVICE) 
then 
    echo sOFFICE IS ALREADY RUNNING 
else 
    echo sOFFICE WILL BE START WAIT 5s PLEASE 
    soffice --headless --accept="socket,host=127.0.0.1,port=8100;urp;" --nofirststartwizard & 
    sleep 5 
fi 

echo CONVERSION START 
java -jar ./jodconverter/lib/jodconverter-cli-2.2.2.jar ./$1 ./$1.odt 
echo CONVERSION END 

我的问题是在bash脚本的第一部分,当我尝试在后台运行sOFFICE服务器时,即使使用&,此命令也会阻止脚本的最终执行。
我试着通过终端运行这个脚本,它完美的工作。
所以我认为,问题出现在bash脚本的php执行中。有想法吗?

编辑:
发现的解决方案感谢吉姆·鲁宾斯坦响应:

重定向标准输出和标准错误流

: 通过更换

soffice --headless --accept="socket,host=127.0.0.1,port=8100;urp;" --nofirststartwizard & 
soffice --headless --accept="socket,host=127.0.0.1,port=8100;urp;" --nofirststartwizard > /dev/null 2> /dev/null & 

回答