2015-02-05 55 views
1

我使用wkhtmltopdf從php生成pdf,但我有特殊的問題。當模板不使用任何外部源時,一切都很好。但是,當進口任何通過HTTP /文件協議,我得到:Wkhtmltopdf無法解析從php執行的主機

The exit status code '1' says something went wrong: 
stderr: "" 
stdout: "Loading pages (1/6) 
[> ] 0% 
[======> ] 10% 
[=======> ] 13% 
[============================================================] 100% 
Counting pages (2/6) 
[============================================================] Object 1 of 1 
Resolving links (4/6) 
[============================================================] Object 1 of 1 
Loading headers and footers (5/6) 
Printing pages (6/6) 
[> ] Preparing 
[============================================================] Page 1 of 1 
Done 
Exit with code 1 due to network error: HostNotFoundError 

異常卻對我說: command: "D:\Programs\wkhtmlpdf\bin\wkhtmltopdf.exe" --lowquality "C:\Windows\TEMP\knp_snappy54d3831ed861e8.25642951.html" "C:\Windows\Temp\D60C.tmp".

在這種情況下,它是@import url(http://fonts.googleapis.com/css?family=Bree+Serif);導致了這一錯誤,但我根本無法使用任何鏈接,如果我想它從PHP工作。從命令行運行時,一切正常。我已經檢查過,php是從「SYSTEM」用戶執行它的,所以我產生了一個以SYSTEM身份運行的cmd窗口,並且創建了pdf沒有任何問題。 Allow_url_fopen也被啓用,openssl也是如此。

我正在使用KnpSnappyBundle,它使用Knp snappy庫,它使用wkhtmltopdf。 我已閱讀所有wkhtmltopdf相關的問題,但無法找到答案。

PHP 5.5.5,2.4.4阿帕奇

謝謝

更新:看來symfony的控制檯組件做一些魔術proc_open。

$this->process = proc_open($commandline, $descriptors, $this->processPipes->pipes, $this->cwd, $this->env, $this->options);

而且參數的var_dump是

string(227) "cmd /V:ON /E:ON /C "("D:\Programs\wkhtmlpdf\bin\wkhtmltopdf.exe" --lowquality "C:\Windows\TEMP\knp_snappy54d3949bd6e035.20793656.html" "C:\Windows\Temp\2627.tmp") 1>"C:\Windows\Temp\sf_26C4.tmp" 2>"C:\Windows\Temp\sf_26C5.tmp""" 
array(3) { 
    [0]=> array(2) { 
     [0]=> string(4) "pipe" 
     [1]=> string(1) "r" 
    } 
    [1]=> array(3) { 
     [0]=> string(4) "file" 
     [1]=> string(3) "NUL" 
     [2]=> string(1) "w" 
    } 
    [2]=> array(3) { 
     [0]=> string(4) "file" 
     [1]=> string(3) "NUL" 
     [2]=> string(1) "w" 
    } 
} array(0) { 

} string(24) "D:\Web\e-diagnostyka\web" array(0) { 

} array(3) { 
    ["suppress_errors"]=> bool(true) 
    ["binary_pipes"]=> bool(true) 
    ["bypass_shell"]=> bool(true) 
} 

回答

4

我也有類似的問題。它在我運行作曲家更新後開始發生。

問題出在KnpLabs/snappy存儲庫的最新版本。

恢復到此存儲庫的早期版本(0.3.1)解決了我的問題。

對於那個正在導致問題所做的更改的更多詳細信息,請參閱:KnpLabs/snappy version changes

希望它幫助。 :)