我需要在后台启动OpenOffice服务器(如果它不是instanciate)然后用JODConverter进行文件转换。
方案如下:
这是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执行。有个主意吗?
编辑:
感谢Jim Rubenstein的回答:
重定向标准输出和标准错误流
: 取代
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 &
答案 0 :(得分:4)
这个问题通常只需添加&在命令的最后;但似乎您还需要重定向标准输出和标准错误流。我在这里找到了关于堆栈溢出的相同问题的答案: