2012-09-18 103 views
1

我嘗試運行wkhtmltopdf(0.11.0 RC1)與在Apache(2.4.2)PHP(5.4.2)。 當我嘗試啓動wkhtmltopdf-i386 --use-xserver http://www.google.com google.pdf 2>&1時,我可以找到我的pdf。在這裏我的php代碼PHP和Apache:了shell_exec(wkhtmltopdf與xvfb的)命令不起作用

<?php 
    $cmd= '/usr/bin/wkhtmltopdf-i386 http://www.google.com google.pdf 2>&1'; 
    $ret = shell_exec($cmd); 
    echo $ret; 
?> 

它與Apache和作爲命令行php test.php。 因爲我的目標頁面包含許多圖像和一些「重」js圖表。當我嘗試將它轉換爲pdf時,我用wkhtmltopdf命令得到了分段錯誤。 使其工作的唯一方法是使用xvfb作爲X11模擬器。代碼如下所示:

<?php 
    $cmd= '/usr/bin/xvfb-run /usr/bin/wkhtmltopdf-i386 --use-xserver http://www.google.com google.pdf 2>&1'; 
    $ret = shell_exec($cmd); 
    echo $ret; 
?> 

這個腳本的工作原理與命令行php test.php但它不與Apache工作。如果我看一看到Apache與htop過程中,我可以看到,有兩個過程(與php test.php):

  • xvfb的
  • wkhtmltopdf

當我與Apache推出我只有xvfb進程。它由apache超時完成,因爲它正在等待wkhtmltopdf進程。

我可以把它的工作原理與Apache(2.2.21)和PHP(5.3.10)。

有沒有辦法,我失去了一些東西?也許在Apache的配置文件中的東西?

回答

1

我有同樣的問題。我正在使用exec函數,但同樣適用於shell_exec。函數執行在php.ini中被禁用。

解決方案:從php.ini文件的disable_functions中刪除shell_exec字符串。

0

我不知道爲什麼你的第二個版本不能從Apache調用(一定不要使用相同的shell,因爲shell_exec使用shell?),但作爲解決方法,你可以(從Apache PHP)shell_exec("php test.php");並獲得你預期的結果?

也許還嘗試的其他處理執行的功能,如pcntl_exec之一。

+0

我已經試過這樣做,但我仍然只有xvfb的進程中啓動。 – alexgindre

0

這主要是因爲所有權和權限,儘量

su www-data (for debian) 
php test.php 

你可能會看到錯誤。

+0

已經嘗試過。它完全適用於sudo -u www-data'php test.php' – alexgindre