2016-02-20 89 views
1

我試圖讓我的web應用程序創建PDF文件上傳縮略圖使用下面的命令來創建:PDF縮略圖不能通過EXEC

exec("/usr/local/bin/convert '/path/to/file.pdf'[0] -background white -alpha remove -thumbnail 600x '/path/to/file.pdf.png'", $output, $return); 

當我運行從它的工作原理命令行命令,既,當我使用運行它作爲根,當我運行它_www(Web服務器的用戶):

sudo -u _www /usr/local/bin/convert '/path/to/file.pdf'[0] -background white -alpha remove -thumbnail 600x '/path/to/file.pdf.png' 

但當exec命令運行時,不創建的縮略圖。 $ output數組爲空,$返回值爲1(一般錯誤)。

此外,當我爲其他類型的文件生成縮略圖時,我完全沒有任何問題。例如我使用的GIF:

exec("/usr/local/bin/convert '/path/to/file.gif'[0] -thumbnail 600x '/path/to/file.gif'", $output, $return); 

我對JPG,PNG或BMP也沒有問題。這導致我認爲問題可能與GhostScript有關,因爲只有PDF需要GhostScript來生成縮略圖。作爲最後一條評論,縮略圖生成在我的本地主機和我的服務器上均失敗。

我出來的想法,任何人都有嗎?謝謝!

+0

我希望轉換爲您提供一些有意義的錯誤,您是否從過程中捕獲stdout和stderr?你最可能的問題是,當你執行轉換時,環境(例如PATH)是不同的,所以轉換根本找不到Ghostscript。 – KenS

+0

謝謝,我從來沒有能夠捕捉到你提到的錯誤日誌,但是你的第二個評論讓我朝着正確的方向前進,請檢查我的答案以獲取詳細信息。 – Sophivorus

回答

0

最後,我有兩個不同的問題,一個在我的本地主機,另一個在我的服務器。

在我的本地主機中,GhostScript不在exec環境的PATH中。爲了解決這個問題,我添加了以下行命令之前:

putenv('PATH=' . getenv('PATH') . ':' . dirname('/usr/local/bin/gs')); 

這在我的本地固定的問題。但是當我將新代碼推送到服務器時,它仍然不起作用。所以我檢查了我的服務器中的PATH,並且GhostScript已經在那裏。然後我發現我的服務器使用的是舊版本的GhostScript,沒有「alpha」支持。所以我簡化了命令:

exec("/usr/local/bin/convert '/path/to/file.pdf'[0] -thumbnail 600x '/path/to/file.pdf.png'", $output, $return); 

現在無論我的本地主機和服務器的工作,耶!