2016-01-25 25 views
0

我執行命令行命令:PHP Ghostscript的錯誤,但命令行工作正常(解碼PDF至PNG)

gs -sOutputFile=- -sDEVICE=pnggray -dFirstPage=1 -dLastPage=1 -dNOPAUSE -sPAPERSIZE=a4 -r90 -q /Volumes/DATA/03-www/temp/test.pdf -c quit 

,它工作正常,PDF格式爲PNG解碼。但後來我執行這個代碼從PHP:

$cmd = "gs -sOutputFile=- -sDEVICE=pnggray -dFirstPage=1 -dLastPage=1 -dNOPAUSE -sPAPERSIZE=a4 -r90 -q " . $pdf_file . " -c quit"; 
$img = shell_exec($cmd); 

我得到空響應。我附加2>&1至$ CMD看到錯誤:

$cmd = "gs -sOutputFile=- -sDEVICE=pnggray -dFirstPage=1 -dLastPage=1 -dNOPAUSE -sPAPERSIZE=a4 -r90 -q " . $pdf_file . " -c quit 2>&1"; 

,輸出爲下列之一:

dyld: Library not loaded: /opt/local/lib/libtiff.5.dylib 
    Referenced from: /opt/local/lib/libgs.9.16.dylib 
    Reason: Incompatible library version: libgs.9.16.dylib requires version 8.0.0 or later, but libtiff.5.dylib provides version 6.0.0 

Ghostscript的版本給(CLI):

GPL Ghostscript 9.16 (2015-03-30) 
Copyright (C) 2015 Artifex Software, Inc. All rights reserved. 

任何幫助嗎?

+0

爲什麼在PHP腳本中將輸出文件設置爲STDOUT(即,轉換後的文件在哪裏?)?系統上有多個Ghostscript副本嗎?當你從你的CLI和PHP腳本里面運行'which gs'時,輸出是否匹配? – Crontab

+0

我已經設置了STDOUT來獲取png數據作爲腳本的響應。通過這種方式,我不需要編寫臨時文件來稍後閱讀並刪除它。 '哪個gs'在php和CLI裏有相同的位置。 – Miquel

回答

0

在我看來,你使用的是使用共享庫的Ghostscript構建,而系統找不到libtiff 8動態庫。

您似乎安裝了libtiff 5,您需要安裝libtiff 8.據推測,libtiff 8是爲您的用戶安裝的,但不是PHP用戶,因此它可以在命令行中爲您工作。

或者您可以使用不使用共享庫的Ghostscript構建,但這意味着要自己構建它,因爲它看起來像您的發行版的打包程序選擇使用共享庫。

相關問題