Here's the code I used recently for creating a product. It's based on having an array of image urls ($imgArray) rather than a single image url. It adds the first image in the array as the thumb/base/small and the rest as additional images.
It was based on MagePsycho's blog post here;
http://www.blog.magepsycho.com/how-to-import-product-images-from-external-url-in-magento/
// We set up a $count variable - the first image gets used as small, thumbnail and base $count = 0; $mediaAttribute = array ( 'thumbnail', 'small_image', 'image' ); foreach ($imgArray as $image) : $imgUrl = $this->_save_image( $image ); if ($count == 0) : $newproduct->addImageToMediaGallery( $imgUrl , $mediaAttribute, false, false ); else : $newproduct->addImageToMediaGallery( $imgUrl , null, false, false ); endif; $count++; endforeach;
And the _save_image method;
protected function _save_image($img) { $imageFilename = basename($img); $image_type = substr(strrchr($imageFilename,"."),1); //find the image extension $filename = md5($img . strtotime('now')).'.'.$image_type; //give a new name, you can modify as per your requirement $filepath = Mage::getBaseDir('media') . DS . 'import'. DS . $filename; //path for temp storage folder: ./media/import/ $newImgUrl = file_put_contents($filepath, file_get_contents(trim($img))); //store the image from external url to the temp storage folder return $filepath; }
If you are using similar and it isn't working you might want to look at filepaths, permissions and also reindexing as potential issues that could fix your problem.