【问题标题】:Using Batik with Yii - Fails in the app but works in terminal将 Batik 与 Yii 一起使用 - 在应用程序中失败但在终端中工作
【发布时间】:2011-07-13 18:38:19
【问题描述】:

我正在尝试使用 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 有什么想法吗?还是让它执行我需要的功能?


【问题讨论】:

  • 如果你想产生相同的结果,你应该使用相同的外壳/环境。
  • 你能检查一下 pdf_temp 文件夹和里面的文件的权限和所有者吗? Web 服务器可能以与您不同的用户身份运行。
  • @waitinfratrain - 恐怕早就想到了,我早就检查过用户并 777'd 文件夹...

标签: php shell svg png batik


【解决方案1】:
【解决方案2】:

我目前也在使用 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");

有效!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-01-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-02
    • 2020-03-31
    • 1970-01-01
    相关资源
    最近更新 更多