我正在发布有关该错误的评论,并帮助任何有同样问题的人。 (我自己发布的答案)

使用Wysiwyg编辑器并插入图像时,图像管理器未显示缩略图图像。

查看Magento产生的图像URL,我可以看到URL缺少 / wysiwyg / pottion

http://site.domain/media//.thumbs/ex_logo_sm.jpg?rand = 1392103618

它看起来纯粹是缺少的,double //在URL中注意到了

有帮助吗?

解决方案

追踪代码,在我看来,位于 Mage_Cms_Helper_Wysiwyg_Images::getBaseUrl()

例程就是这样:

public function getBaseUrl()
    {
        return Mage::getBaseUrl('media') . '/';
    }

并将其更改为

public function getBaseUrl()
    {
        return Mage::getBaseUrl('media') . Mage_Cms_Model_Wysiwyg_Config::IMAGE_DIRECTORY . '/';
    }

解决问题。

这是从 Mage_Cms_Model_Wysiwyg_Images_Storage::getThumbnailUrl()

return str_replace('\\', '/', $this->getHelper()->getBaseUrl() . $thumbSuffix) . $randomIndex;

它清楚地输出了错误的URL,而无需定位。

其他提示

我们在客户网站上遇到了同样的问题,实际上有很多元素正在播放,我可以就如何触发不存在的图像问题提供一个可能的解释,即使似乎不可能:

  1. 如上所述的问题是,Magento正在检查 media/wysiwyg/.thumbs/image.jpg, ,而不是正确的位置 media/wysiwyg/.thumbs/wysiwyg/image.jpg, ,如果现在显示指向不正确URL的链接 http://example.com/media//wysiwyg/.thumbs/image.jpg fd

  2. 我们安装了AppSec-212,引入了 realpath() 要删除安全问题,但是,此功能的组合和在我们的符号链接中的使用情况 media 目录引起了 Mage_Cms_Model_Wysiwyg_Images_Storage::getThumbsPath() 返回一个目录 media/wysiwyg/.thumbs, ,而不是 media/wysiwyg/.thumbs/wysiwyg - 原因是因为此方法进行有条件的检查,该检查未对真实进行评估,因为我们的媒体目录已通过 realpath() 因此,没有返回0 strpos() 检查,请参阅下面的检查,第6行:

    public function getThumbsPath($filePath = false)
    {
        $mediaRootDir = Mage::getConfig()->getOptions()->getMediaDir();
        $thumbnailDir = $this->getThumbnailRoot();
    
        if ($filePath && strpos($filePath, $mediaRootDir) === 0) {
            $thumbnailDir .= DS . dirname(substr($filePath, strlen($mediaRootDir)));
        }
    
        return $thumbnailDir;
    }
    
  3. 这对我们来说是独一无二的,但是我们也否认访问DotFile目录,并且以前没有注意到这是一个问题,因为我们在安装AppSec-212之前从未使用过它们,因此,即使我们解决了问题,我们也会在404上启动404。任何东西 .thumbs

我们遇到的问题仍然存在于1.9.1.0(写作时的最新版本) - 我将没有人注意,因为图像仍然不使用该图像“飞行” .thumbs 目录,只有引入AppSec-212,并结合了一个符合链接 media 目录,导致拇指文件在不正确的位置生成,然后导致错误检查路径返回true,并让我们随后在图像上看到404。

有趣的是,如果不是我们的链接,AppSec-212将解决该问题 media 目录。

顺便说一句,这是我们的修改:

在应用程序/代码/核心/mage/cms/helper/wysiwyg/images.php中:

@@ -89,7 +89,7 @@ public function getStorageRoot()
      */
     public function getBaseUrl()
     {
-        return Mage::getBaseUrl('media') . '/';
+        return Mage::getBaseUrl('media') . '/' . Mage_Cms_Model_Wysiwyg_Config::IMAGE_DIRECTORY . '/';
     }

     /**

在App/Code/Core/Mage/CMS/Model/Wysiwyg/images/Storage.php中:PHP:

@@ -336,7 +336,7 @@ public function getThumbnailUrl($filePath, $checkFile = false)
         $mediaRootDir = $this->getHelper()->getStorageRoot();

         if (strpos($filePath, $mediaRootDir) === 0) {
-            $thumbSuffix = self::THUMBS_DIRECTORY_NAME . DS . substr($filePath, strlen($mediaRootDir));
+            $thumbSuffix = self::THUMBS_DIRECTORY_NAME . DS . substr($filePath, strlen(realpath(Mage::getConfig()->getOptions()->getMediaDir())));

             if (! $checkFile || is_readable($mediaRootDir . $thumbSuffix)) {
                 $randomIndex = '?rand=' . time();
@@ -405,8 +405,8 @@ public function resizeOnTheFly($filename)
      */
     public function getThumbsPath($filePath = false)
     {
-        $mediaRootDir = Mage::getConfig()->getOptions()->getMediaDir();
-        $thumbnailDir = $this->getThumbnailRoot();
+        $mediaRootDir = realpath(Mage::getConfig()->getOptions()->getMediaDir());
+        $thumbnailDir = realpath($this->getThumbnailRoot());

         if ($filePath && strpos($filePath, $mediaRootDir) === 0) {
             $thumbnailDir .= DS . dirname(substr($filePath, strlen($mediaRootDir)));

实际上,有几个错误聚集在一起。

默认情况下,Magento似乎将拇指保存在目录中 media/wysiwyg/.thumbs/wysiwyg/. 。但 Mage_Cms_Model_Wysiwyg_Images_Storage::getThumbnailUrl() 寻找拇指 media/wysiwyg/.thumbs/.

仅当拇指进来时,错误才会触发 media/wysiwyg/.thumbs/. 。我无法在错误的目录中保存拇指的哪些条件。但至少它解释了为什么只有一些服务器显示此问题。

因此,除了Proxiblue所说的内容外,您还必须更改 Mage_Cms_Model_Wysiwyg_Images_Storage::getThumbnailUrl()

public function getThumbnailUrl($filePath, $checkFile = false)
{
    $mediaRootDir = $this->getHelper()->getStorageRoot();

    if (strpos($filePath, $mediaRootDir) === 0) {
        $thumbSuffix = self::THUMBS_DIRECTORY_NAME . DS . substr($filePath, strlen($mediaRootDir));

        if (! $checkFile || is_readable($mediaRootDir . $thumbSuffix)) {
            $randomIndex = '?rand=' . time();
            return str_replace('\\', '/', $this->getHelper()->getBaseUrl() . $thumbSuffix) . $randomIndex;
        }
    }

    return false;
}

public function getThumbnailUrl($filePath, $checkFile = false)
{
    $mediaRootDir = Mage::getConfig()->getOptions()->getMediaDir() . DS;

    if (strpos($filePath, $mediaRootDir) === 0) {
        $thumbSuffix = self::THUMBS_DIRECTORY_NAME . DS . substr($filePath, strlen($mediaRootDir));

        if (! $checkFile || is_readable($this->getHelper()->getStorageRoot() . $thumbSuffix)) {
            $randomIndex = '?rand=' . time();
            return str_replace('\\', '/', $this->getHelper()->getBaseUrl() . $thumbSuffix) . $randomIndex;
        }
    }

    return false;
}

最好通过设置模块而不是覆盖核心文件。

许可以下: CC-BY-SA归因
scroll top