Hướng dẫn php clear memory after loop - php xóa bộ nhớ sau vòng lặp

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.

Tôi đang gặp vấn đề về bộ nhớ và tôi đã thử nâng giới hạn bộ nhớ lên mức tối đa [800MB+]. Tôi đã thử giải quyết các biến để phát hành bộ nhớ giữa các vòng lặp nhưng tôi vẫn hết bộ nhớ. Tôi đã thử đặt thời gian chờ thành vô hạn nhưng nó chắc chắn là vấn đề bộ nhớ.

MSG lỗi từ tệp nhật ký: Lỗi nghiêm trọng: Kích thước bộ nhớ được phép là 851443712 byte cạn kiệt [đã cố gắng phân bổ 71 byte]

Không có tập lệnh nào đượ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 thập rác và xóa bộ nhớ? Bất kỳ sự giúp đỡ hoặc hướng dẫn sẽ được đánh giá cao.

Nhập tập lệnh:

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',                    ""];
/* 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 xpath['//item'] as $key => &$item] {

  • // ...

  • // Clear item and other variables from memory after each loop, or you will run out of it really fast.

  • $item = NULL;

  • }

  • Programming Language: PHP

    PHP không được đặt rõ ràng bộ nhớ?

    unset [] thực hiện đúng những gì tên của nó nói - không đặt một biến.Nó không buộc giải phóng bộ nhớ ngay lập tức.Người thu gom rác của PHP sẽ làm điều đó khi thấy phù hợp - theo ý định sớm, vì những chu kỳ CPU đó không cần thiết, hoặc muộn như trước khi tập lệnh sẽ hết bộ nhớ, bất cứ điều gì xảy ra trước.It does not force immediate memory freeing. PHP's garbage collector will do it when it see fits - by intention as soon, as those CPU cycles aren't needed anyway, or as late as before the script would run out of memory, whatever occurs first.

    Điều gì tốt hơn trong việc giải phóng bộ nhớ bằng php unset [] hoặc $ var null?

    Biến NULL: Nó nhanh chóng giải phóng bộ nhớ.

    Bộ sưu tập rác hoạt động như thế nào trong PHP?

    Nếu một biến là một phần của tham chiếu theo chu kỳ, ví dụ: trong đó $ A chỉ vào $ B và $ B trở lại $ A, thì biến chỉ có thể được làm sạch bởi bộ thu gom rác của PHP.Bộ thu gom rác được kích hoạt bất cứ khi nào 10.000 đối tượng hoặc mảng có thể có trong bộ nhớ và một trong số chúng rơi ra khỏi phạm vi.The garbage collector is triggered whenever 10,000 possible cyclic objects or arrays are currently in memory, and one of them falls out of scope.

    Bài Viết Liên Quan

    Chủ Đề