TYPO3:cObj->IMAGE无法生成图像。

4

我有一个扩展,需要生成缩略图。为此,我编写了一种包装函数。

public static function pictureGenerator($file, $title, $size_w, $size_h) {
    $cObj = t3lib_div::makeInstance('tslib_cObj');
    $imgTSConfig = array();
    $imgTSConfig['file'] = $file;
    $imgTSConfig['file.']['width'] = $size_w . 'm';
    $imgTSConfig['file.']['height'] = $size_h . 'm';
    $imgTSConfig['altText'] = empty($title) ? 'preview' : $title;
    $imgTSConfig['titleText'] = empty($title) ? 'preview' : $title;

    return $cObj->IMAGE($imgTSConfig);
}

只要我使用相对于TYPO3目录的路径,比如:../typo3conf/ext/sd_filmbase/res/images/default_film.jpg,这个函数就能正常工作。

但是,一旦我尝试使用绝对系统路径(例如下面的路径),就不再生成图片了,“return $cObj->IMAGE($imgTSConfig)”返回NULL。
/var/www/vhosts/domain.com/httpdocs/path/to/picture/c.example.hq.jpg
这个路径在TYPO3安装目录之外,但在open_basedir中包含(safe_mode已关闭)。

我将以下路径添加到open_basedir中:/var/www/vhosts/domain.com/httpdocs/path/
并使用is_readable()测试从我的扩展程序是否可以读取该文件 - 它返回true。
安装工具中的图像处理功能正常。

你有什么其他的想法,我还需要测试什么吗?或者我漏掉了什么重要的东西吗?

顺便说一下:我正在运行TYPO3 4.6.1和PHP 5.3。

解决方案:
在Web目录中创建一个符号链接指向外部路径。此符号链接必须位于fileadmin/或typo3conf/中。
请参见konsolenfreddy的帖子。


我没有收到任何错误 - 返回 $cObj->IMAGE($imgTSConfig) 只返回 NULL。 - Stefan
我的意思是,你上面的描述中有什么错误。你以but开头一个句子,但是当我使用绝对路径时,你没有完成它。 - Micromega
哦,真尴尬,抱歉 - 看来我的大脑比手指更快 :-) 我已经完成了这段文字。 - Stefan
1个回答

1

IMAGE 函数总是期望相对于 PATH_site 的文件,无论是在 typo3conf 还是在 fileadmin 中(请参见 t3lib_tstemplate 中的 getFilename 函数)。

如果您想要一个超出文档根目录的图像,则有两种方法:

  1. typo3conffileadmin 中的目录中放置符号链接,例如:fileadmin/myimages/,通过 .htaccess 保护目录内容。
  2. 直接使用 Gifbuilder 函数。这可能很麻烦,并可能禁用一些更高级别的缓存 cObject

现在我收到一个非常奇怪的Core-Error-Handler-Message... 对于file_exists(),它显示open_basedir限制已生效,尽管我刚刚创建的符号链接的目标路径已包含在PHP的open_basedir配置中。我在Web根目录下创建了一个名为“thumbnails”的目录,并在其中放置了两个指向外部文件夹的符号链接。通过浏览器请求访问文件是可以的,所以我想应该是符号链接和权限没问题吧。 - Stefan
好的,我刚刚发现,IMAGE()根本不起作用。仅仅是因为本地图片没有变化,所以看上去像是有返回结果而已。 - Stefan
已解决!非常感谢!问题在于文件必须位于typo3conf/或fileadmin/目录内,任何其他目录可能无法使用(就像我的情况一样)。 - Stefan

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接