我遇到了一个将仓库系统与电子商务Magento同步的脚本问题。
脚本正在将Magento的记录直接更新到数据库,价格和数量。
致命错误:第962行的/lib/Zend/Cache/Backend/File.php中允许的内存大小为33554432字节(试图分配8309字节)
这显然是吃内存的脚本,有没有办法减少它的饥饿感?:)
我可以增加内存的容量,但它不会是解决方案,因为那里有大约700 MB的免费内存。
.csv文件中大约有1000行。
<?
define('MAGENTO', realpath(dirname(__FILE__)));
require_once MAGENTO . '/app/Mage.php';
umask(0);
Mage::app()->setCurrentStore(Mage_Core_Model_App::ADMIN_STORE_ID);
$count = 0;
$file = fopen(MAGENTO . '/SECRET-FOLDER-WITH-CSV/quantity-and-prices.csv', 'r');
while (($line = fgetcsv($file)) !== FALSE) {
if ($count == 0) {
foreach ($line as $key => $value) {
$cols[$value] = $key;
}
}
$count++;
if ($count == 1)
continue;
#Convert the lines to cols
if ($count > 0) {
foreach ($cols as $col => $value) {
unset(${$col});
${$col} = $line[$value];
}
}
// Check if SKU exists
$product = Mage::getModel('catalog/product')->loadByAttribute('sku', $sku);
if ($product) {
$productId = $product->getIdBySku($sku);
$stockItem = Mage::getModel('cataloginventory/stock_item')->loadByProduct($productId);
$stockItemId = $stockItem->getId();
$stock = array();
$newprice = $line[2];
$product->setPrice($newprice)->save();
if (!$stockItemId) {
$stockItem->setData('product_id', $product->getId());
$stockItem->setData('stock_id', 1);
} else {
$stock = $stockItem->getData();
}
foreach ($cols as $col => $value) {
$stock[$col] = $line[$value];
}
foreach ($stock as $field => $value) {
$stockItem->setData($field, $value ? $value : 0);
}
$stockItem->save();
unset($stockItem);
unset($product);
}
echo "<br />Stock updated $sku";
}
fclose($file);
答案 0 :(得分:3)
将每个循环的产品->loadByAttribute
替换为您将迭代的单个产品的集合负载:
使用此SKU数组加载集合:
$ collection = Mage :: getModel('catalog / product') - &gt; getCollection() - &gt; addAttributeToSelect('entity_id')//添加您需要的内容但是尽可能地限制它 - &gt; addAttributeToSelect('sku',$ skuArray) - &GT;负载()
迭代您的收藏并做您需要的事情
答案 1 :(得分:3)
在代码
下面插入ini_set('memory_limit', '64M');
后
define('MAGENTO_ROOT', getcwd());
index.php文件中的。它正在与我合作。
答案 2 :(得分:2)
您可以采取三种不同的方式: -
编辑ini.file - 你描述了它,但只有当hoster允许以这种方式重写php设置时才能完成。
编辑.htaccess文件:php_value memory_limit 256M。
编辑index.php,添加ini_set('memory_limit','256M');