使用蜡染与Yii -在应用程序失败,但在终端工作


Using Batik with Yii - Fails in the app but works in terminal

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

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

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

蜡染失败,出现(无用的)错误:

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

…在Terminal中工作,并将。png文件与其原始的。svg

一起保存在/pdf_temp/目录中。

那么,当终端正常时,PHP/apache环境导致Batik失败的不同之处是什么?

编辑:

在与一些同事聊天后,我们认为这可能是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.

任何想法,我如何能运行Java作为根与web服务器环境?还是允许它执行我需要的功能?


-Djava.awt.headless = true

http://www.emcken.dk/weblog/archives/25-svg-rasterizer-with-batik.html

我目前正在与蜡染和Yii以及工作。检查输出和源文件的路径。我提供了整个路径,现在它正在工作。似乎Yii并不站在你的观点是,相反,Yii当前的位置是你的网页。在我的例子中,我像这样修改:

    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");

它工作!