gpt4 book ai didi

Magento:ImageCdn 错误? (很长的故事)

转载 作者:行者123 更新时间:2023-12-04 16:11:57 25 4
gpt4 key购买 nike

我有一些与 Magento 的免费扩展有关的问题 OnePica ImageCdn .

当我上传“损坏的图像”时,前端出现损坏的图像。
enter image description here

好的,让我们开始长篇大论:

我注意到这是因为 ImageCdn 扩展和“损坏的图像”而发生的。

在 ImageCdn 的部分代码中:

OnePica_ImageCdn_Helper_Image

/**
* In older versions of Magento (<1.1.3) this method was used to get an image URL.
* However, 1.1.3 now uses the getUrl() method in the product > image model. This code
* was added for backwards compatibility.
*
* @return string
*/
public function __toString()
{
parent::__toString();
return $this->_getModel()->getUrl();
}

我的问题是,有人知道该代码的目的是什么吗?
我不明白他们上面的评论是什么意思。
我认为这是一个错误,因为它总是 return $this->_getModel()->getUrl();
真的是一个错误还是只是我的错误解释?

这是我到目前为止所做的:
  • 我有一张图片 dummy.jpeg
  • 经过一番调查,我才意识到这是一个“腐败的形象”。
  • 我测试使用:<?php print_r(getimagesize('dummy.jpeg')); ?>

  • 结果:

    Array
    (
    [0] => 200
    [1] => 200
    [2] => 6
    [3] => width="200" height="200"
    [bits] => 24
    [mime] => image/x-ms-bmp
    )


    当然,我对结果感到惊讶,因为当我使用 Preview 打开它时,它看起来不错。 (在 Mac OSX 上)
    looks good
  • 然后我用十六进制编辑器打开它,前两个字节是:BM这是 BMP 的标识符
  • 我尝试为产品上传 .bmp 图片 -> 失败,无法选择图片
  • 我让我的同事也上传它(在 Ubuntu 上),他能够将文件类型的选择更改为“任何文件”。当他单击“上传文件”时,显示的错误消息表明不允许该类型的文件。
  • 我想到的是:一个管理员试图上传 .bmp图像并失败。然后他将其重命名为.jpeg并成功。虽然我不明白什么样的图像可以重命名而不显示损坏的图像标志(超出主题)。
  • 这些场景会触发异常,我将分解我所追踪的内容。

  • 代码跟踪:

    • app/design/frontend/base/default/catalog/product/view/media.phtml

    <?php
    $_img = '<img id="image" src="'.$this->helper('catalog/image')->init($_product, 'image').'" alt="'.$this->htmlEscape($this->getImageLabel()).'" title="'.$this->htmlEscape($this->getImageLabel()).'" />';
    echo $_helper->productAttribute($_product, $_img, 'image');
    ?>
  • 从该代码中,我知道图像 url 是使用以下命令生成的:$this->helper('catalog/image')->init($_product, 'image')
  • 我做了Mage::log((string)$this->helper('catalog/image')->init($_product, 'image'));

  • Result: http://local.m.com/media/catalog/product/cache/1/image/9df78eab33525d08d6e5fb8d27136e95/d/u/dummy.jpeg



    .

    • Mage_Catalog_Helper_Image

    public function __toString()
    {
    try {
    if( $this->getImageFile() ) {
    $this->_getModel()->setBaseFile( $this->getImageFile() );
    } else {
    $this->_getModel()->setBaseFile( $this->getProduct()->getData($this->_getModel()->getDestinationSubdir()) );
    }

    if( $this->_getModel()->isCached() ) {
    return $this->_getModel()->getUrl();
    } else {
    if( $this->_scheduleRotate ) {
    $this->_getModel()->rotate( $this->getAngle() );
    }

    if ($this->_scheduleResize) {
    $this->_getModel()->resize();
    }

    if( $this->getWatermark() ) {
    $this->_getModel()->setWatermark($this->getWatermark());
    }
    Mage::log('pass');
    $url = $this->_getModel()->saveFile()->getUrl();
    Mage::log('not pass');
    }
    } catch( Exception $e ) {
    $url = Mage::getDesign()->getSkinUrl($this->getPlaceholder());
    }
    return $url;
    }
  • $this->_getModel()->saveFile()->getUrl() 中触发的错误.在部分代码中,最终会达到:

  • Varien_Image_Adapter_Gd2


    private function _getCallback($callbackType, $fileType = null, $unsupportedText = 'Unsupported image format.')
    {
    if (null === $fileType) {
    $fileType = $this->_fileType;
    }
    if (empty(self::$_callbacks[$fileType])) {
    //reach this line -> exception thrown
    throw new Exception($unsupportedText);
    }
    if (empty(self::$_callbacks[$fileType][$callbackType])) {
    throw new Exception('Callback not found.');
    }
    return self::$_callbacks[$fileType][$callbackType];
    }

    • The exception was catched in the previous code:

    Mage_Catalog_Helper_Image
    public function __toString()
    {
    ...
    } catch( Exception $e ) {
    $url = Mage::getDesign()->getSkinUrl($this->getPlaceholder());
    }
    ...
    }

    the $url became: http://local.m.com/skin/frontend/default/default/images/catalog/product/placeholder/image.jpg


  • 那么,它应该已经生成了占位符图像吧?
    placeholder
    (无 ImageCdn 扩展)
  • 不,因为

  • Mage_Catalog_Helper_Image was rewritten by OnePica_ImageCdn_Helper_Image


    public function __toString()
    {
    parent::__toString(); //the result is http://local.m.com/skin/frontend/default/default/images/catalog/product/placeholder/image.jpg but no variable store/process its value
    return $this->_getModel()->getUrl(); //in the end it will return http://local.m.com/media/catalog/product/cache/1/image/9df78eab33525d08d6e5fb8d27136e95/d/u/dummy.jpeg
    }

    如果你们都已经忘记了这个问题:
    有人知道该代码的目的是什么吗?我不明白他们上面的评论是什么意思。
    这真的是一个错误还是只是我的错误解释?

    最佳答案

    不,这不是错误。它只是对旧 Magento 系统的遗留支持。我想知道,您是否曾经四处窥探过早期版本的 magento(如内联文档注释所引用的,< 1.1.3)?

    事情的要旨在法师1.1.3之前,Mage_Catalog_Helper_Image实例碰巧从 to-string casts 产生 URL,例如

    $image = (some instance of Mage_Catalog_Helper_Image).. ;
    $imageUrl = (string) $image;
    __toString可能是 protectedprivate ,我不确定,但我确定通常的做法是始终编写此魔术方法,以便在您打算重写的类中使用它,该类期望使用这种数据转换。

    关于Magento:ImageCdn 错误? (很长的故事),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12056357/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com