Tập lệnh của tôi nhập tệp excel vào cơ sở dữ liệu sản phẩm để cập nhật số lượng sản phẩm mới, v.v.Làm cách nào để xóa bộ nhớ trong khi chạy tập lệnh PHP dài? try unset()
Tôi đang gặp vấn đề về bộ nhớ và đã thử tăng giới hạn bộ nhớ lên tối đa (800MB +). Tôi đã thử unsetting các biến để phát hành bộ nhớ giữa các vòng nhưng tôi vẫn chạy ra khỏi bộ nhớ. Tôi đã cố gắng thiết lập thời gian chờ để vô hạn nhưng nó chắc chắn là một vấn đề bộ nhớ.
Lỗi msg từ log file: Fatal error: Được phép kích thước bộ nhớ của 851.443.712 byte kiệt sức (cố gắng phân bổ 71 byte)
Không ai trong số các kịch bản được chứa trong một hàm. Nếu tôi tạo chính cho vòng lặp bên trong một hàm và liên tục gọi hàm đó sẽ giúp thu gom rác và xóa bộ nhớ? Bất kỳ trợ giúp hoặc hướng dẫn nào sẽ được đánh giá cao.
nhập Script:
error_reporting(E_ALL & ~E_NOTICE);
ini_set('memory_limit', '812M');
set_time_limit(0);
/* Config Start */
define('BasePath', '/home/xxxxx/public_html');
define('CfgMagentoPath', BasePath);
define('CfgCategoryMapDBxls', BasePath."/xxxx/Shdddddd.xls");
define('CfgVenderDBxls', BasePath."/xxxx/xxxxxx.xls");
define('CfgReportEmail', "[email protected]");
/* Config End */
require_once(CfgMagentoPath . '/app/Mage.php');
Mage::app();
//$app = Mage::app('default');
//Mage::app()->setCurrentStore(Mage_Core_Model_App::ADMIN_STORE_ID);
require_once(BasePath.'/xxxxx/xxxx/libs/mage.func-inc.php');
require_once(BasePath.'/xxxxx/xxxxx/libs/excel-read.class.php');
//Alert Arrays
$AAnotmapped = array();
$AAnewproducts = array();
$AApriceupdated = array();
$AAimgerror = array();
$PriceErrors = array();
$SkipCat = false;
//Create Mapped Cats - In Magento
$excel = new ExcelReader(CfgCategoryMapDBxls,"UTF-8");
$CM = $excel->getWorksheetData('Sheet1');
if(!$SkipCat){
echo "======== Generating Catagory Maps ===========\n\n";
CatMap_Create($CM);
echo "======== ============================== ===========\n\n";
}
//Start Item Read
$excel = new ExcelReader(CfgVenderDBxls,"UTF-8");
$IT = $excel->getWorksheetData('New_DATA');
$ITcnt = 0;
$ITtotal = count($IT);
foreach($IT as $ItemRow){
$ITcnt++;
$cSKU = $ItemRow['ITEM'];
$cProductName = Clean_Data($ItemRow['ALTSHORTDESC']);
$cCatName = Clean_Data($ItemRow['CATEGORY']);
$cManuf = Clean_Data($ItemRow['MANUFACTURER']);
$cShortDesc = Clean_Data($ItemRow['SHORTDESC']);
$cLongDesc = Clean_Data($ItemRow['LONGDESC']);
$cUPC = Prod_GetUPC($ItemRow['UPC'], $ItemRow['ALTUPC']);
$cStockQty = $ItemRow['QTY'];
$cWeight = Prod_GetWeight($ItemRow['WEIGHT'], $ItemRow['ALTWEIGHT']);
$cPrice = Prod_FigurePrice($ItemRow['COST'], $ItemRow['MSRP'], $ItemRow['MAP']);
$cCost = $ItemRow['COST'];
//Locate Catagory Map Magento ID
$mCatId = CatMap_Search($CM, $ItemRow['CATEGORY']);
//Now Create Product
if($mCatId > 0 && $cProductName != ""){
echo date("m.d.y g:i a")."\t($ITcnt/$ITtotal) Working On: " . $cProductName . " - SKU: $cSKU\n";
$ProdID = Prod_GetIDfromSKU($cSKU);
if($ProdID > 0){
if(Prod_Update($ProdID, $cCost, $cStockQty, $cWeight, $cUPC)){
echo "Updated: $cProductName\n";
$ITindex++;
}
}else{
Prod_Create($cSKU, $cProductName, $cManuf, $cPrice, $cCost, $cWeight, $cShortDesc, $cLongDesc, $cStockQty, $cUPC, $mCatId);
echo "Created: $cProductName to Catagory: $mCatId\n";
echo "$cShortDesc\n\n";
$ProdID = Prod_GetIDfromSKU($cSKU);
}
if($cPrice <= $cCost){
array_push($PriceErrors, "[$cSKU] $cProductName > Cost: $cCost | Price: $cPrice");
echo "Price Lower than Cost : Auto Inactive : Cost: $cCost | Price: $cPrice\n";
}
Prod_AddImg($ProdID, $cSKU);
}
unset($ItemRow, $ProdID, $cSKU, $cProductName, $cManuf, $cPrice, $cCost, $cWeight, $cShortDesc, $cLongDesc, $cStockQty, $cUPC, $mCatId);
echo "\n";
}
echo "======== Disabling 0 Product Catagories ===========\n\n";
Cat_Disable_Empty($CM);
echo "======== ============================== ===========\n\n";
unset($CM, $IT, $excel);
//array_push($AAnotmapped, 'Cat not Mapped');
//array_push($AApriceupdated, '### Price Updated');
//array_push($AAimgerror , 'Image Error');
Send_Status_Email();
Mage_Reindex();
echo date("m.d.y g:i a")."\tCompleted\n\n";
//print_r($AAnotmapped);
//print_r($AApriceupdated);
//print_r($AAimgerror);
Bỏ đặt các biến ngay trước khi bạn chỉ định lại các biến mà bạn không có gì ở đây. Phiên bản PHP nào? Có gì bên trong một số chức năng này? Trình đọc excel của bạn có thu thập dữ liệu háo hức hay lười biếng không? Liệu nó hết bộ nhớ trước khi đến mage_reindex? –
Xin chào Cory, phiên bản PHP là 5.2.9, kịch bản được thông qua khoảng ~ 3700-4000 sản phẩm trước khi nó chết. Tôi không chắc chắn nếu nó là lười biếng/háo hức và có nó chạy ra khỏi bộ nhớ trước khi gọi mage_reindex. –