【问题标题】:TYPO3: cObj->IMAGE not generating imageTYPO3:cObj->IMAGE 未生成图像
【发布时间】:2011-12-17 09:56:10
【问题描述】:

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

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-Install-Directory 之外 - 但包含在 open_basedir 中(并且 safe_mode 为 Off)。

我在 open_basedir 中添加了以下路径:/var/www/vhosts/domain.com/httpdocs/path/
如果文件可以从我的扩展程序中读取,我使用 is_readable() 进行了测试 - 它返回 true。
安装工具中的图像处理工作正常。

你有什么想法,我还能测试什么?还是我错过了一些重要的东西?

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

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

【问题讨论】:

  • 我没有收到任何错误 - return $cObj->IMAGE($imgTSConfig) 只是返回 NULL
  • 我的意思是你上面描述的错误是什么。您以但我使用绝对路径开始一个句子但您从未完成它。
  • 哦,太尴尬了,我很抱歉 - 我的思维似乎比我的手指快 :-) 我完成了文本。

标签: image typo3 image-generation


【解决方案1】:

IMAGE 函数将始终在 typo3conffileadmin 中期待与 PATH_site 相关的文件(请参阅 t3lib_tstemplate 中的 getFilename 函数)。

如果您想在文档根目录之外添加图片,可以想到两种方法:

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

【讨论】:

  • 现在我得到一个非常奇怪的 Core-Error-Handler-Message... 对于 file_exists() 它说 open_basedir 限制有效,尽管我刚刚创建的符号链接的目标路径已经包含在内在 PHP 的 open_basedir 配置中。我在 Web-Root 中创建了一个目录“thumbnails”,并在其中放置了两个指向外部文件夹的符号链接。并且通过浏览器请求访问文件是可行的,所以我猜符号链接和权限应该没问题。
  • 好的,我刚刚发现,IMAGE() 根本不起作用。只是运气好,本地图片原封不动返回。
  • 解决了!非常感谢!问题是,文件必须在typo3conf/ 或fileadmin/ 中——任何其他目录都可能不起作用(如我的情况)。