使用带有Yii的Batik - 在应用程序中失败但在终端中工作

时间:2011-07-13 18:38:20

标签: php shell svg png batik

我正在尝试使用Batik光栅化库将SVG转换为.png转换到我的Yii应用程序中。目前我在运行OSX 10.6.7,PHP 5.3.4和Java 1.6.0_24的Mac上本地工作。

当我运行处理转换的PHP脚本时,使用...

$output = shell_exec(java -jar batik/batik-rasterizer.jar -m image/png -d pdf_temp/file.png -w 800 pdf_temp/file.svg) 

Batik失败了(无用的)错误:

About to transcode 1 SVG file(s)
Converting file.svg to pdf_temp/file.png ...  file_1310581599.png

Error while converting SVG 

然而,使用......

java -jar batik/batik-rasterizer.jar -m image/png -d pdf_temp/file.png -w 800 pdf_temp/file.svg
终端中的

...处理并将.png文件与原始.svg一起保存在/ pdf_temp /目录中

那么当终端没问题时,导致Batik失败的PHP / apache环境会有什么不同呢?

编辑:

在与一些同事聊天之后,我们认为Java可能需要以root身份运行 - 它从终端运行,但不在Web服务器内运行。

...添加

2>&1 1> /dev/null

我的Batik shell_exec()命令显示以下错误:

Exception in thread "main" java.lang.InternalError: Can't connect to window server - not enough permissions.

关于如何在Web服务器环境中以root身份运行Java的任何想法?或者允许它执行我需要的功能?


2 个答案:

答案 0 :(得分:0)

答案 1 :(得分:0)

我目前正在与Batik和Yii合作。检查输出和源文件的路径。我提供了整条路径,现在正在运作。似乎Yii不站在您的视图所在的位置,而Yii当前位置是您的webroot。在我的情况下,我这样修理:

    define ('BATIK_PATH', '/var/www/wattquotes/protected/views/calculator/reports/batik/batik-rasterizer.jar');
    $typeString = ' -m image/jpeg';
    $outfile = ' /var/www/wattquotes/protected/views/calculator/reports/batik/temp/pic.jpg';
    $width = ' -w 600';
    $tempName = ' /var/www/wattquotes/protected/views/calculator/reports/batik/temp/proposal.svg';
    $output = shell_exec("java -jar ". BATIK_PATH ." $typeString -d $outfile $width $tempName");

有效!