title: How can I clear the memory while running a long PHP script? tried unset()
body: <p>My script imports an excel file into a product database to update quantities new products etc....</p>
  
  <p>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.</p>
  
  <p>Error msg from log file:
  Fatal error: Allowed memory size of 851443712 bytes exhausted (tried to allocate 71 bytes)</p>
  
  <p>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.</p>
  
  <p>Import Script:</p>
  
  <pre><code>error_reporting( E_ALL &amp; ~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()-&gt;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-&gt;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-&gt;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 &gt; 0 &amp;&amp; $cProductName != ""){
  
          echo date("m.d.y g:i a")."\t($ITcnt / $ITtotal) Working On: " . $cProductName . " - SKU: $cSKU\n";
          $ProdID = Prod_GetIDfromSKU($cSKU);
  
  
          if($ProdID &gt; 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 &lt;= $cCost){
              array_push($PriceErrors, "[$cSKU] $cProductName &gt; 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);
  </code></pre>