How can I clear the memory while running a long PHP script? tried unset()
mysql, php
Solution
Use functions. Use `$var = null;` instead of `unset($var);`. Unset simply kills the variable reference.
As mentioned on this comment:
When you are using unset, the memory will only be freed whenever garbage collector decides, but when you are setting a variable to a different value (null in this case), then you might get some memory freed of course with the cost of CPU.
Problem
My script imports an excel file into a product database to update quantities new products etc.... I am having memory issue and I have tried raising the memory limit to the max(800MB+). I have tried unsetting the variables in order to release the memory between the loops but I still run out of memory. I have tried setting the timeout to infinite but its definitely a memory issue. Error msg from log file: Fatal error: Allowed memory size of 851443712 bytes exhausted (tried to allocate 71 bytes) None of the script is contained in a function. If I create the main for loop inside a function and repeatedly call that function will that help garbage collection and clear up memory? Any help or guidance will be appreciated. Import 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', "xxxxxx@gmail.com"); /* 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); ```