2010-07-28 125 views
1

我目前正在PHP中建立一個類,使用WKHTMLTOPDF命令行應用程序生成PDF文檔。在PHP中shell_exec()不執行我的具體命令

爲此,我使用shell_exec調用來調用WKHTMLTOPDF可執行文件。但是,這個特殊的調用似乎沒有被執行;它幾乎立即返回NULL。

一個小測試,我做給我的結果如下:

var_dump(shell_exec('ping nu.nl')); 
// This prints a string, containting the expected output of the ping command 
var_dump(shell_exec('"c:/wkhtmltopdf/wkhtmltopdf.exe" --orientation "Landscape" --page-size "A2" --margin-top "25mm" --margin-left "20mm" --margin-bottom "20mm" --margin-right "20mm" "http://www.nu.nl/" "C:/Temp/1280310218.pdf"')); 
// This prints NULL 

所以,shell_exec()似乎是工作,也safe_mode處於關閉狀態,並粘貼完整的命令到CMD.EXE 運行命令正常。

如果問題不在上述任何一種情況(安全模式,錯誤命令或shell_exec()本身),它還有什麼用?我所能想到的只是一個用戶權限問題,但其中的可執行文件和目錄對我的系統中的每個用戶組均具有完全訪問權限設置。 (注意:雖然我正在Windows機器上開發,但這些代碼將在Linux服務器上運行,因此,僅限於Windows的解決方案並不是我正在尋找的,除非這個問題本身轉向與Windows有關)

+0

您是否嘗試'手動'寫入'c:/ temp /'以確保php進程擁有者有權在那裏寫入? – 2010-07-28 10:06:54

+0

@Dennis Haarbrink:剛剛測試過,它完美的工作。但即使它沒有,我也希望看到'shell_exec()'返回的結果字符串中,因爲如果文件不可讀/可寫,WKHTMLTOPDF會發出警告。 – Duroth 2010-07-28 10:19:56

回答

0

通過在臨時目錄中使用fopen()創建文件來檢查權限。 它創建pdf嗎?也許這個程序不會輸出到stdout,但是與ffmpeg相同的stderr例如。嘗試在命令後添加「2> & 1」。

或者,此軟件使用安裝目錄中的某些文件。首先試試添加類似改變目錄 「CD C:\ wkhtmltopdf; YOUR_COMMAND」

+0

你的第一個建議做到了。顯然,引號圍繞要執行的命令('「c:/wkhtmltopdf/wkhtmltopdf.exe」')是不允許的,並且該錯誤確實存儲在stderr中。並且認爲我只添加了這些引號,因爲該應用程序安裝在「Program Files /」中! – Duroth 2010-07-28 10:31:25

0

你可以使用一個php庫來做到這一點,這將更有效率和集成。有例如html2pdf

+0

我之所以選擇一個CLI應用程序,而不是一個PHP庫,是因爲我所檢查的沒有一個爲我們提供了所有我們需要的選項; FPDF,DOMPDF,TCPDF等都缺乏這種或那種。 WKHTMLTOPDF是迄今爲止最好和最完整的解決方案。如果它有效,那就是。 – Duroth 2010-07-28 10:17:42

-1

刪除這些環境變量設置>>

"DYLD_LIBRARY_PATH="/Applications/MAMP/Library/lib:$DYLD_LIBRARY_PATH" 

#export DYLD_LIBRARY_PATH 

,它應該工作。

+1

您能否詳細說明您爲什麼認爲這應該起作用以及如何適合答案的答案,通過_removing這些環境變量設置來解決哪些問題_? – dbf 2012-09-14 00:24:47

+0

他在Win中開發並在Linux上部署,所以在這裏沒有Mamp – Paolo 2013-01-04 17:16:31