Hi,
I fetch 13.000 products from a external API and want to save them in my shop. The import is triggered via cron.
After fetching, I do the following code, which causes a timeout:
private function apiArticlesToShop($apiArticles)
{
Mage::app()->setCurrentStore(Mage_Core_Model_App::ADMIN_STORE_ID);
$imageSaveDir = Mage::getBaseDir("media") . DS . "import" . DS;
try
{
foreach ($articles as $articleStruct)
{
$product = Mage::getModel("catalog/product");
$productId = $product->getIdBySku($articleStruct["internal_id"]);
if(!$productId)
{
$product->setStoreId(1);
$product->setWebsiteIds([1]);
$product->setCreatedAt(strtotime("now"));
$product->setUpdatedAt(strtotime("now"));
$product->setTypeId("simple");
$product->setVisibility(Mage_Catalog_Model_Product_Visibility::VISIBILITY_BOTH);
$product->setSku($articleStruct["internal_id"]);
$product->setCategoryIds([26]);
$product->setEan($articleStruct["ean"]);
$product->setWeight($articleStruct["weight"] * 1000);
// images
$product->setMediaGallery(["images"=>[], "values"=>[]]);
foreach ($articleStruct["images"] as $i => $imageUrl)
{
$saveLocation = $imageSaveDir . basename($imageUrl);
// save image in file system
if (!file_exists($saveLocation))
{
$curl = $this->getCurlClient($imageUrl);
$data = curl_exec($curl);
curl_close($curl);
file_put_contents($saveLocation, $data);
}
if ($i == 0)
$product->addImageToMediaGallery($saveLocation, ["image", "thumbnail", "small_image"], false, false);
else
$product->addImageToMediaGallery($saveLocation, [], false, false);
}
}
else
{
$product = $product->load($productId);
}
$product->setName($articleStruct["title"]);
$product->setDescription("");
$product->setShortDescription("");
$product->setTaxClassId(1);
$product->setPrice($articleStruct["price_without_rebate"]);
// stock data
$product->setStockData([
"use_config_manage_stock" => 0,
"manage_stock" => 1,
"min_sale_qty" => $articleStruct["minimum_purchase"],
"max_sale_qty" => $articleStruct["stock"],
"is_in_stock" => $articleStruct["stock"] > 0 ? 1 : 0,
"qty" => $articleStruct["stock"]
]);
$product->setStatus(1);
$product->save();
}
}
catch (Exception $e)
{
Mage::log($e->getMessage());
}
}
this code works fine, products are created.
but after a while I get a timeout:
[27-Sep-2018 13:09:26 UTC] PHP Fatal error: Maximum execution time of 240 seconds exceeded in /../magento/app/Mage.php on line 0
I dont know where ths 240 seconds come from. php_ini is configured with many more time.
sometime, the same error occurs with other file and line number... but always 240 seconds.
on top of my import file I have this line
ini_set('MAX_EXECUTION_TIME', -1);
because I though it would help... but it does not.
Problem is not the fetching but the saving...
PLEASE HELP ME!
Hello FloC3,
It could be a few things here.
I will be guessing as I have no idea what setup of hosting you have: Dedicated/VPS/Shared
ini_set('MAX_EXECUTION_TIME', -1);
Might not work if your PHP setup is running in safe mode.
If you using shared hosting or current Magento setup as a sub account.
local php.ini will be restricted by global php.ini or hosting provider.
Try checking with phpinfo() for more details (example below)
Hi,
the php.ini of the hosting has set a max_execution_time of 18000 and my htaccess does the same.