2012-12-04 61 views
2

我試圖使用Magento的API來創建一個圖像,但它與消息如何創建圖像與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) 
    ) 
); 

我在做什麼錯?

回答

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將它發送給客戶端。

0

我只是想爲此添加一些其他相關信息 - 並感謝Benubird的評論,他們非常有幫助。我試圖通過API上傳圖片,並得到了「無法創建圖片」消息。

在深入瞭解Magento之後,我發現如果您的php.ini文件中的內存限制爲-1,則會阻止上傳任何圖像。在Magento內核中,在嘗試處理圖像(lib/Varien/Image/Adapter/Gd2.php第57行)之前進行檢查,其中圖像的大小與可用內存進行比較。它沒有考慮-1意味着無限的值並拋出「已達到內存限制」異常。

解決方法是將您的memory_limit值設置爲非負數。正確的解決方法是讓Magento代碼正確處理這個問題(儘管如果imagecreatefromjpeg因爲不可捕捉的錯誤而死亡,那麼也許這是不可能的)。

祝你好運!