2016-03-11 44 views
3

我們現在使用libreoffice --headless已經有一段時間了,第一次通過Debian,在過去的幾個月中我們切換到了CentOS。我們使用Symfony Process命令轉換docxpdf,簡化的命令看起來像:Libreoffice headless處理結果不返回,但等待超時

libreoffice --headless --convert-to pdf \ 
    --outdir /home/conversionoutdir \ 
    /home/conversionindir/4f00ac05aee274967b.docx 

的Symfony的過程,執行上面的命令是相當簡單:

$process = new Process($cmd); 
    $process->mustRun(); 

一切都已經工作好吧,但是由於幾天之後轉換沒有完成,並且進程一直持續到60秒超時。

通過在我們的DEV服務器上進行完全相同的轉換來進行調試,在這裏一切都很好。還試圖轉換小文件和大文件,以查看或達到超時的頁面數量。也直接在命令行上執行命令,轉換也是可以的,並在幾秒鐘內完成。

異常是由我們的應用程序捕獲,並被髮送到記錄器:

過程\「的/ usr/bin中/ LibreOffice的--headless --nologo --nofirststartwizard --norestore - 轉換-to pdf:writer_web_pdf_Export --outdir/home/conversionoutdir /home/conversionindir/4f00ac05aee274967b.docx \「超過了60秒的超時時間。

似乎像PHP不能跟蹤過程了。這裏會發生什麼?任何有關如何進一步調試的線索?

編輯:抽象掉symfony的流程組件,所述conversionoutdir權限設置爲777和執行下面的代碼段之後,轉換仍保持如果從PHP執行掛:

$output = array(); 
exec('libreoffice --headless --convert-to pdf \ 
    --outdir /home/conversionoutdir \ 
    /home/conversionindir/4f00ac05aee274967b.docx', $output); 
print_r($output); 

回答

3

找到了解決該問題,不知何故,linux的HOME變量更改爲/root,libreoffice無法執行到該路徑的轉換。也許這在重新啓動Apache時發生了某種改變。

解決方法是總是讓PHP設置/tmpHOME變量:

putenv('HOME=/tmp'); 

以下職位提供了更多信息: