如何使用magento api创建图像

时间:2012-12-04 13:00:37

标签: php api magento soap

我正在尝试使用magento api创建一个图像,但它没有显示消息

SoapFault exception: [104] Cannot create image.

这不是一个有用的错误消息!这是什么意思?它为什么这样做?如何使用magento api创建图像?

这是我的代码:

$client = new SoapClient($wsdlurl);
$sessionId = $client->login($user, $key);
$file = array(
    'content' =>
    base64_encode(file_get_contents($filename)),
    'mime' => 'image/jpeg',
    'name' => 'newfile.jpg'
);

$result = $client->call(
    $sessionId,
    'catalog_product_attribute_media.create',
    array(
        $productId,
        array('file'=>$file, 'label'=>'new_test_label', 'position'=>'100', 'types'=>array('thumbnail'), 'exclude'=>0)
    )
);

我做错了什么?

2 个答案:

答案 0 :(得分:0)

我找到了解决方案。它试图将图像放入(... / media / catalog / product /)的目录没有设置权限以允许在其中创建新文件夹。

为了他人的利益,我确实找到了一些有用的东西: 首先,文件系统操作由./lib/Varien/Io/File.php执行,它有自己的cd,mkdir等包装器,如果失败则会抛出非常模糊的异常。

目录创建发生在Mage_Catalog_Model_Product_Attribute_Backend_Media-> _moveImageFromTmp

来自./app/code/core/Mage/Catalog/Model/Product/Attribute/Media/Api.php 它处理所有图像api调用,例如创建,更新,删除等

因此,如果您遇到同样的问题并且它不是权限问题...您现在知道将调试代码放在何处;)。

哦,是的,如果你想输出错误信息,你不能只是回声或死亡;你需要抛出一个异常,它将被Mage_Catalog_Model_Product_Attribute_Media_Api捕获,然后调用$ this-> _fault将它发送给客户端。

答案 1 :(得分:0)

我只想在此添加一些其他相关信息 - 感谢Benubird的评论,他们非常乐于助人。我试图通过API上传图像,并且正在获取"无法创建图像"消息。

深入Magento之后,我发现如果你的php.ini文件中有一个内存限制为-1,那么这将防止上传任何图像。在Magento核心中,在尝试处理图像之前进行检查(lib / Varien / Image / Adapter / Gd2.php第57行),其中将图像的大小与可用存储器进行比较。它没有考虑-1的值意味着无限制并且抛出了"已达到内存限制"异常。

解决此问题的方法是将memory_limit值设置为非负数。对此的正确解决方法是让Magento代码正确处理(尽管如果imagecreatefromjpeg因不可捕获的错误而死亡,那么可能它是不可能的)。

祝你好运!