2016-09-16 7 views
2

PHPカテゴリのビルディングツリーに問題がありました。 それは非常に長い時間のためにツリーを構築していますし、その後、私はエラーを得た:ここPHPビルドツリー中にメモリが枯渇する致命的なエラー

Fatal error: Out of memory (allocated 637796352) (tried to allocate 208666926 bytes) in D:\OpenServer\domains\site.local\Core\Widgets.php on line 488

は、ツリーを構築するために私の機能です。

まずiはカテゴリの配列を作った:

public function makeCategoriesArray() 
     { 
//   $row = DB::select() 
//    ->from('catalog_tree') 
//    ->where('parent_id', '=', $this->post['parent_id']) 
//    ->union(DB::select() 
//     ->from('catalog_tree') 
//     ->where('id', 'in', DB::expr("(SELECT catalog_tree_id FROM catalog_tree_parents WHERE parent_id = '".$this->post['parent_id']."')"))) 
//    ->find_all(); 
      $row = DB::select() 
       ->from('catalog_tree') 
       ->where('status', '=', '1') 
       ->find_all(); 
      $categories_arr = array(); 
      foreach ($row as $cat) { 
       $categories_arr[$cat->parent_id][] = $cat; 
      } 
      unset($cat); 
      unset($row); 

      foreach($categories_arr as $key=>$value) { 
       $row = DB::select() 
        ->from('catalog_tree') 
        ->where('id', 'in', DB::expr("(SELECT catalog_tree_id FROM catalog_tree_parents WHERE parent_id = '".$key."')")) 
        ->find_all(); 

       foreach($row as $cat) { 
        $categories_arr[$key][] = $cat; 
       } 
       unset($cat); 
       unset($row); 
      } 

      return $categories_arr; 
     } 

、私はこの配列と木の構築を開始:

public function BuildMainTree($array, $pid) { 

      global $MainMenu; 

      if (isset($array[$pid])) { // If category with $pid exist 

       $MainMenu.= "<ul class=\"dropdown-menu\" role=\"menu\">"; 

       foreach ($array[$pid] as $value) 
       { 
        if ($pid!='0' && !isset($array[$value->id])) { 

         $MainMenu.= '<li class="divider"></li> 
            <li class="dropdown"> 
             <a href="/catalog/' . $value->alias . '"> 
              '. $value->name .' 
             </a> 
            </li>'; 
        } 
        else { 

         $MainMenu.= '<li class="divider"></li> 
            <li class="dropdown"> 
             <a href="/catalog/' . $value->alias . '"> 
              '. $value->name .' 
              <span class="caret"></span> 
             </a> 
            </li>'; 
         $this->BuildMainTree($array, $value->id); 
        } 
       } 
       if ($pid=='0') { 
        $MainMenu .= "</ul>"; 
       } 
       else { 
        $MainMenu .= "</ul></li>"; 
       } 
      } 
     } 

このプロセスの初期化は、この機能では、次のとおりです。

public function Header() { 
      $contentMenu = Common::factory('sitemenu')->getRows(1, 'sort'); 
      $array['contentMenu'] = $contentMenu; 
      $array['user'] = User::info(); 
      $array['countItemsInTheCart'] = Cart::factory()->_count_goods; 

      $categories_arr = $this->makeCategoriesArray(); 
      $this->BuildMainTree($categories_arr, 0); 
      $array['mainMenu'] = $MainMenu; 

      return $array; 
     } 

また、私は配列をとすればmakeCategoriesArray()それはうまく動作しますが、BuildMainTree($ array、$ pid)関数はエラーを引き起こします...

最も面白い部分は、このコードが他のサイトで完璧に動作することです。

おそらく私はここでいくつかの詳細を見逃していました...このコードを実行しようと2日を費やしましたが、何も得られませんでした。コードの問題ではありません

array(156) { 
    [0]=> 
    array(21) { 
    [0]=> 
    object(stdClass)#17 (18) { 
     ["id"]=> 
     string(4) "2075" 
     ["created_at"]=> 
     string(10) "1470080793" 
     ["updated_at"]=> 
     string(10) "1473775697" 
     ["status"]=> 
     string(1) "1" 
     ["sort"]=> 
     string(1) "0" 
     ["name"]=> 
     string(27) "Садовая мебель" 
     ["alias"]=> 
     string(14) "sadovaja-mebel" 
     ["ikea_alias"]=> 
     string(7) "outdoor" 
     ["parent_id"]=> 
     string(1) "0" 
     ["image"]=> 
     string(36) "dc30302d5e76ddf7d3be9cb0f8b4d711.jpg" 
     ["h1"]=> 
     NULL 
     ["title"]=> 
     NULL 
     ["keywords"]=> 
     NULL 
     ["description"]=> 
     NULL 
     ["text"]=> 
     NULL 
     ["views"]=> 
     string(3) "129" 
     ["course"]=> 
     string(4) "9.50" 
     ["discount_percent"]=> 
     string(1) "0" 
    } 
    [1]=> 
    object(stdClass)#19 (18) { 
     ["id"]=> 
     string(4) "2076" 
     ["created_at"]=> 
     string(10) "1470080793" 
     ["updated_at"]=> 
     string(10) "1473950659" 
     ["status"]=> 
     string(1) "1" 
     ["sort"]=> 
     string(1) "0" 
     ["name"]=> 
     string(39) "Оформление интерьера" 
     ["alias"]=> 
     string(19) "oformlenie-interera" 
     ["ikea_alias"]=> 
     string(10) "decoration" 
     ["parent_id"]=> 
     string(1) "0" 
     ["image"]=> 
     string(36) "91b3786d06e22081abbb945b9e4e02d8.jpg" 
     ["h1"]=> 
     NULL 
     ["title"]=> 
     NULL 
     ["keywords"]=> 
     NULL 
     ["description"]=> 
     NULL 
     ["text"]=> 
     NULL 
     ["views"]=> 
     string(3) "287" 
     ["course"]=> 
     string(4) "9.50" 
     ["discount_percent"]=> 
     string(1) "0" 
    } 
    [2]=> 
    object(stdClass)#20 (18) { 
     ["id"]=> 
     string(4) "2077" 
     ["created_at"]=> 
     string(10) "1470080793" 
     ["updated_at"]=> 
     string(10) "1472474523" 
     ["status"]=> 
     string(1) "1" 
     ["sort"]=> 
     string(1) "0" 
     ["name"]=> 
     string(27) "Офисная мебель" 
     ["alias"]=> 
     string(14) "ofisnaja-mebel" 
     ["ikea_alias"]=> 
     string(10) "workspaces" 
     ["parent_id"]=> 
     string(1) "0" 
     ["image"]=> 
     string(36) "6884cb6cf5defdf8ec7fe467bad542ca.jpg" 
     ["h1"]=> 
     NULL 
     ["title"]=> 
     NULL 
     ["keywords"]=> 
     NULL 
     ["description"]=> 
     NULL 
     ["text"]=> 
     NULL 
     ["views"]=> 
     string(3) "247" 
     ["course"]=> 
     string(4) "9.50" 
     ["discount_percent"]=> 
     string(1) "0" 
    } 
    [3]=> 
    object(stdClass)#21 (18) { 
     ["id"]=> 
     string(4) "2078" 
     ["created_at"]=> 
     string(10) "1470080793" 
     ["updated_at"]=> 
     string(10) "1472409476" 
     ["status"]=> 
     string(1) "1" 
     ["sort"]=> 
     string(1) "0" 
     ["name"]=> 
     string(34) "Посуда для готовки" 
     ["alias"]=> 
     string(19) "posuda-dlja-gotovki" 
     ["ikea_alias"]=> 
     string(7) "cooking" 
     ["parent_id"]=> 
     string(1) "0" 
     ["image"]=> 
     string(36) "ca3e4a8eb9d0d7ea22f9a7fc3c300ef9.jpg" 
     ["h1"]=> 
     NULL 
     ["title"]=> 
     NULL 
     ["keywords"]=> 
     NULL 
     ["description"]=> 
     NULL 
     ["text"]=> 
     NULL 
     ["views"]=> 
     string(3) "514" 
     ["course"]=> 
     string(4) "9.50" 
     ["discount_percent"]=> 
     string(1) "0" 
    } 
    [4]=> 
    object(stdClass)#22 (18) { 
     ["id"]=> 
     string(4) "2079" 
     ["created_at"]=> 
     string(10) "1470080793" 
     ["updated_at"]=> 
     string(10) "1472547042" 
     ["status"]=> 
     string(1) "1" 
     ["sort"]=> 
     string(1) "0" 
     ["name"]=> 
     string(16) "Столовая" 
     ["alias"]=> 
     string(9) "stolovaja" 
     ["ikea_alias"]=> 
     string(6) "dining" 
     ["parent_id"]=> 
     string(1) "0" 
     ["image"]=> 
     string(36) "d5704ec3e70a3415b181c7c4f9005c1a.jpg" 
     ["h1"]=> 
     NULL 
     ["title"]=> 
     NULL 
     ["keywords"]=> 
     NULL 
     ["description"]=> 
     NULL 
     ["text"]=> 
     NULL 
     ["views"]=> 
     string(3) "147" 
     ["course"]=> 
     string(4) "9.50" 
     ["discount_percent"]=> 
     string(1) "0" 
    } 
    [5]=> 
    object(stdClass)#23 (18) { 
     ["id"]=> 
     string(4) "2080" 
     ["created_at"]=> 
     string(10) "1470080793" 
     ["updated_at"]=> 
     string(10) "1472547236" 
     ["status"]=> 
     string(1) "1" 
     ["sort"]=> 
     string(1) "0" 
     ["name"]=> 
     string(31) "Сервировка стола" 
     ["alias"]=> 
     string(16) "servirovka-stola" 
     ["ikea_alias"]=> 
     string(6) "eating" 
     ["parent_id"]=> 
     string(1) "0" 
     ["image"]=> 
     string(36) "2d2142a8edd5fc3ce1ffa01fbe6655c9.jpg" 
     ["h1"]=> 
     NULL 
     ["title"]=> 
     NULL 
     ["keywords"]=> 
     NULL 
     ["description"]=> 
     NULL 
     ["text"]=> 
     NULL 
     ["views"]=> 
     string(3) "338" 
     ["course"]=> 
     string(4) "9.50" 
     ["discount_percent"]=> 
     string(1) "0" 
    } 
    [6]=> 
    object(stdClass)#24 (18) { 
     ["id"]=> 
     string(4) "2081" 
     ["created_at"]=> 
     string(10) "1470080793" 
     ["updated_at"]=> 
     string(10) "1472540142" 
     ["status"]=> 
     string(1) "1" 
     ["sort"]=> 
     string(1) "0" 
     ["name"]=> 
     string(21) "Кухни МЕТОД" 
     ["alias"]=> 
     string(11) "kuhni-metod" 
     ["ikea_alias"]=> 
     string(7) "kitchen" 
     ["parent_id"]=> 
     string(1) "0" 
     ["image"]=> 
     string(36) "decf1d321c63aed673d949b34c452a37.jpg" 
     ["h1"]=> 
     NULL 
     ["title"]=> 
     NULL 
     ["keywords"]=> 
     NULL 
     ["description"]=> 
     NULL 
     ["text"]=> 
     NULL 
     ["views"]=> 
     string(3) "304" 
     ["course"]=> 
     string(4) "9.50" 
     ["discount_percent"]=> 
     string(1) "0" 
    } 
    [7]=> 
    object(stdClass)#25 (18) { 
     ["id"]=> 
     string(4) "2082" 
     ["created_at"]=> 
     string(10) "1470080793" 
     ["updated_at"]=> 
     string(10) "1472466401" 
     ["status"]=> 
     string(1) "1" 
     ["sort"]=> 
     string(1) "0" 
     ["name"]=> 
     string(18) "Освещение" 
     ["alias"]=> 
     string(11) "osveschenie" 
     ["ikea_alias"]=> 
     string(8) "lighting" 
     ["parent_id"]=> 
     string(1) "0" 
     ["image"]=> 
     string(36) "3ac3d00a4734040cf346f2a63a09a7f9.jpg" 
     ["h1"]=> 
     NULL 
     ["title"]=> 
     NULL 
     ["keywords"]=> 
     NULL 
     ["description"]=> 
     NULL 
     ["text"]=> 
     NULL 
     ["views"]=> 
     string(3) "243" 
     ["course"]=> 
     string(4) "9.50" 
     ["discount_percent"]=> 
     string(1) "0" 
    } 
    [8]=> 
    object(stdClass)#26 (18) { 
     ["id"]=> 
     string(4) "2083" 
     ["created_at"]=> 
     string(10) "1470080793" 
     ["updated_at"]=> 
     string(10) "1472547518" 
     ["status"]=> 
     string(1) "1" 
     ["sort"]=> 
     string(1) "0" 
     ["name"]=> 
     string(14) "Детская" 
     ["alias"]=> 
     string(8) "detskaja" 
     ["ikea_alias"]=> 
     string(14) "childrens_ikea" 
     ["parent_id"]=> 
     string(1) "0" 
     ["image"]=> 
     string(36) "8d78781b99b8ee7a1abc0f9cbfdc7e01.jpg" 
     ["h1"]=> 
     NULL 
     ["title"]=> 
     NULL 
     ["keywords"]=> 
     NULL 
     ["description"]=> 
     NULL 
     ["text"]=> 
     NULL 
     ["views"]=> 
     string(3) "321" 
     ["course"]=> 
     string(4) "9.50" 
     ["discount_percent"]=> 
     string(1) "0" 
    } 
    [9]=> 
    object(stdClass)#27 (18) { 
     ["id"]=> 
     string(4) "2084" 
     ["created_at"]=> 
     string(10) "1470080793" 
     ["updated_at"]=> 
     string(10) "1472411322" 
     ["status"]=> 
     string(1) "1" 
     ["sort"]=> 
     string(1) "0" 
     ["name"]=> 
     string(16) "Гостиная" 
     ["alias"]=> 
     string(9) "gostinaja" 
     ["ikea_alias"]=> 
     string(11) "living_room" 
     ["parent_id"]=> 
     string(1) "0" 
     ["image"]=> 
     string(36) "c9c933ae12652bca96eb2ef66c832a82.jpg" 
     ["h1"]=> 
     NULL 
     ["title"]=> 
     NULL 
     ["keywords"]=> 
     NULL 
     ["description"]=> 
     NULL 
     ["text"]=> 
     NULL 
     ["views"]=> 
     string(3) "181" 
     ["course"]=> 
     string(4) "9.50" 
     ["discount_percent"]=> 
     string(1) "0" 
    } 
    [10]=> 
    object(stdClass)#28 (18) { 
     ["id"]=> 
     string(4) "2085" 
     ["created_at"]=> 
     string(10) "1470080793" 
     ["updated_at"]=> 
     string(10) "1472388754" 
     ["status"]=> 
     string(1) "1" 
     ["sort"]=> 
     string(1) "0" 
     ["name"]=> 
     string(35) "Домашняя прачечная" 
     ["alias"]=> 
     string(24) "domashnjaja-prachechnaja" 
     ["ikea_alias"]=> 
     string(7) "laundry" 
     ["parent_id"]=> 
     string(1) "0" 
     ["image"]=> 
     string(36) "08c9713d828235679b861c095784af0e.jpg" 
     ["h1"]=> 
     NULL 
     ["title"]=> 
     NULL 
     ["keywords"]=> 
     NULL 
     ["description"]=> 
     NULL 
     ["text"]=> 
     NULL 
     ["views"]=> 
     string(3) "106" 
     ["course"]=> 
     string(4) "9.50" 
     ["discount_percent"]=> 
     string(1) "0" 
    } 
    [11]=> 
    object(stdClass)#29 (18) { 
     ["id"]=> 
     string(4) "2086" 
     ["created_at"]=> 
     string(10) "1470080793" 
     ["updated_at"]=> 
     string(10) "1472481068" 
     ["status"]=> 
     string(1) "1" 
     ["sort"]=> 
     string(1) "0" 
     ["name"]=> 
     string(45) "Дополнительное хранение" 
     ["alias"]=> 
     string(22) "dopolnitelnoe-hranenie" 
     ["ikea_alias"]=> 
     string(17) "secondary_storage" 
     ["parent_id"]=> 
     string(1) "0" 
     ["image"]=> 
     string(36) "bb180b85cc1e34ab9b6185f4cf71fbf0.jpg" 
     ["h1"]=> 
     NULL 
     ["title"]=> 
     NULL 
     ["keywords"]=> 
     NULL 
     ["description"]=> 
     NULL 
     ["text"]=> 
     NULL 
     ["views"]=> 
     string(3) "158" 
     ["course"]=> 
     string(4) "9.50" 
     ["discount_percent"]=> 
     string(1) "0" 
    } 
    [12]=> 
    object(stdClass)#31 (18) { 
     ["id"]=> 
     string(4) "2088" 
     ["created_at"]=> 
     string(10) "1470080793" 
     ["updated_at"]=> 
     string(10) "1472136224" 
     ["status"]=> 
     string(1) "1" 
     ["sort"]=> 
     string(1) "0" 
     ["name"]=> 
     string(16) "Прихожая" 
     ["alias"]=> 
     string(10) "prihozhaja" 
     ["ikea_alias"]=> 
     string(7) "hallway" 
     ["parent_id"]=> 
     string(1) "0" 
     ["image"]=> 
     string(36) "985600d075b4080f57488b87e0e898ff.jpg" 
     ["h1"]=> 
     NULL 
     ["title"]=> 
     NULL 
     ["keywords"]=> 
     NULL 
     ["description"]=> 
     NULL 
     ["text"]=> 
     NULL 
     ["views"]=> 
     string(2) "64" 
     ["course"]=> 
     string(4) "9.50" 
     ["discount_percent"]=> 
     string(1) "0" 
    } 
    [13]=> 
    object(stdClass)#32 (18) { 
     ["id"]=> 
     string(4) "2089" 
     ["created_at"]=> 
     string(10) "1470080793" 
     ["updated_at"]=> 
     string(10) "1472556911" 
     ["status"]=> 
     string(1) "1" 
     ["sort"]=> 
     string(1) "0" 
     ["name"]=> 
     string(14) "Спальня" 
     ["alias"]=> 
     string(7) "spalnja" 
     ["ikea_alias"]=> 
     string(7) "bedroom" 
     ["parent_id"]=> 
     string(1) "0" 
     ["image"]=> 
     string(36) "439a1f90391568bffabcfbc5a8b22559.jpg" 
     ["h1"]=> 
     NULL 
     ["title"]=> 
     NULL 
     ["keywords"]=> 
     NULL 
     ["description"]=> 
     NULL 
     ["text"]=> 
     NULL 
     ["views"]=> 
     string(3) "172" 
     ["course"]=> 
     string(4) "9.50" 
     ["discount_percent"]=> 
     string(1) "0" 
    } 
    [14]=> 
    object(stdClass)#33 (18) { 
     ["id"]=> 
     string(4) "2090" 
     ["created_at"]=> 
     string(10) "1470080793" 
     ["updated_at"]=> 
     string(10) "1472481070" 
     ["status"]=> 
     string(1) "1" 
     ["sort"]=> 
     string(1) "0" 
     ["name"]=> 
     string(18) "Еда в ИКЕА" 
     ["alias"]=> 
     string(10) "eda-v-ikea" 
     ["ikea_alias"]=> 
     string(4) "food" 
     ["parent_id"]=> 
     string(1) "0" 
     ["image"]=> 
     string(36) "1886868c925ed2f22a10fe7e51a6050c.JPG" 
     ["h1"]=> 
     NULL 
     ["title"]=> 
     NULL 
     ["keywords"]=> 
     NULL 
     ["description"]=> 
     NULL 
     ["text"]=> 
     NULL 
     ["views"]=> 
     string(2) "24" 
     ["course"]=> 
     string(4) "9.50" 
     ["discount_percent"]=> 
     string(1) "0" 
    } 
    [15]=> 
    object(stdClass)#34 (18) { 
     ["id"]=> 
     string(4) "2091" 
     ["created_at"]=> 
     string(10) "1470080793" 
     ["updated_at"]=> 
     string(10) "1472554267" 
     ["status"]=> 
     string(1) "1" 
     ["sort"]=> 
     string(1) "0" 
     ["name"]=> 
     string(16) "Текстиль" 
     ["alias"]=> 
     string(7) "tekstil" 
     ["ikea_alias"]=> 
     string(8) "Textiles" 
     ["parent_id"]=> 
     string(1) "0" 
     ["image"]=> 
     string(36) "1ed5b13bc1abab2d5966b6ab074b7174.jpg" 
     ["h1"]=> 
     NULL 
     ["title"]=> 
     NULL 
     ["keywords"]=> 
     NULL 
     ["description"]=> 
     NULL 
     ["text"]=> 
     NULL 
     ["views"]=> 
     string(3) "194" 
     ["course"]=> 
     string(4) "9.50" 
     ["discount_percent"]=> 
     string(1) "0" 
    } 
    [16]=> 
    object(stdClass)#35 (18) { 
     ["id"]=> 
     string(4) "2092" 
     ["created_at"]=> 
     string(10) "1470080793" 
     ["updated_at"]=> 
     string(10) "1473774214" 
     ["status"]=> 
     string(1) "1" 
     ["sort"]=> 
     string(1) "0" 
     ["name"]=> 
     string(33) "Домашние растения" 
     ["alias"]=> 
     string(19) "domashnie-rastenija" 
     ["ikea_alias"]=> 
     string(16) "indoor_gardening" 
     ["parent_id"]=> 
     string(1) "0" 
     ["image"]=> 
     string(36) "a42bf2728494d635bc16b0f12db5855d.jpg" 
     ["h1"]=> 
     NULL 
     ["title"]=> 
     NULL 
     ["keywords"]=> 
     NULL 
     ["description"]=> 
     NULL 
     ["text"]=> 
     string(0) "" 
     ["views"]=> 
     string(2) "55" 
     ["course"]=> 
     string(4) "9.50" 
     ["discount_percent"]=> 
     string(1) "0" 
    } 
    [17]=> 
    object(stdClass)#36 (18) { 
     ["id"]=> 
     string(4) "2093" 
     ["created_at"]=> 
     string(10) "1470080793" 
     ["updated_at"]=> 
     string(10) "1472481066" 
     ["status"]=> 
     string(1) "1" 
     ["sort"]=> 
     string(1) "0" 
     ["name"]=> 
     string(39) "Беспроводная зарядка" 
     ["alias"]=> 
     string(22) "besprovodnaja-zarjadka" 
     ["ikea_alias"]=> 
     string(17) "wireless_charging" 
     ["parent_id"]=> 
     string(1) "0" 
     ["image"]=> 
     string(36) "6ee6de2d3769d7f617b7e05fd81fbaa4.jpg" 
     ["h1"]=> 
     NULL 
     ["title"]=> 
     NULL 
     ["keywords"]=> 
     NULL 
     ["description"]=> 
     NULL 
     ["text"]=> 
     NULL 
     ["views"]=> 
     string(2) "95" 
     ["course"]=> 
     string(4) "9.50" 
     ["discount_percent"]=> 
     string(1) "0" 
    } 
    [18]=> 
    object(stdClass)#37 (18) { 
     ["id"]=> 
     string(4) "2094" 
     ["created_at"]=> 
     string(10) "1470080793" 
     ["updated_at"]=> 
     string(10) "1472517463" 
     ["status"]=> 
     string(1) "1" 
     ["sort"]=> 
     string(1) "0" 
     ["name"]=> 
     string(12) "Ванная" 
     ["alias"]=> 
     string(7) "vannaja" 
     ["ikea_alias"]=> 
     string(8) "bathroom" 
     ["parent_id"]=> 
     string(1) "0" 
     ["image"]=> 
     string(36) "f69159cedca764bc7d44ff7d6a13b52a.jpg" 
     ["h1"]=> 
     NULL 
     ["title"]=> 
     NULL 
     ["keywords"]=> 
     NULL 
     ["description"]=> 
     NULL 
     ["text"]=> 
     NULL 
     ["views"]=> 
     string(3) "157" 
     ["course"]=> 
     string(4) "9.50" 
     ["discount_percent"]=> 
     string(1) "0" 
    } 
    [19]=> 
    object(stdClass)#38 (18) { 
     ["id"]=> 
     string(4) "2095" 
     ["created_at"]=> 
     string(10) "1470080793" 
     ["updated_at"]=> 
     string(10) "1472379447" 
     ["status"]=> 
     string(1) "1" 
     ["sort"]=> 
     string(1) "0" 
     ["name"]=> 
     string(24) "Товары IKEA FAMILY" 
     ["alias"]=> 
     string(18) "tovary-ikea-family" 
     ["ikea_alias"]=> 
     string(20) "ikea_family_products" 
     ["parent_id"]=> 
     string(1) "0" 
     ["image"]=> 
     string(36) "9e0c8d67fd4189ebed7b821e1c6b9df8.jpg" 
     ["h1"]=> 
     NULL 
     ["title"]=> 
     NULL 
     ["keywords"]=> 
     NULL 
     ["description"]=> 
     NULL 
     ["text"]=> 
     NULL 
     ["views"]=> 
     string(2) "78" 
     ["course"]=> 
     string(4) "9.50" 
     ["discount_percent"]=> 
     string(1) "0" 
    } 
    [20]=> 
    object(stdClass)#39 (18) { 
     ["id"]=> 
     string(4) "2096" 
     ["created_at"]=> 
     string(10) "1470080793" 
     ["updated_at"]=> 
     string(10) "1472482584" 
     ["status"]=> 
     string(1) "1" 
     ["sort"]=> 
     string(1) "0" 
     ["name"]=> 
     string(34) "Для вашего бизнеса" 
     ["alias"]=> 
     string(20) "dlja-vashego-biznesa" 
     ["ikea_alias"]=> 
     string(8) "business" 
     ["parent_id"]=> 
     string(1) "0" 
     ["image"]=> 
     string(36) "3b9d8f1d77703f38d3d043fb95dd2b5e.jpg" 
     ["h1"]=> 
     NULL 
     ["title"]=> 
     NULL 
     ["keywords"]=> 
     NULL 
     ["description"]=> 
     NULL 
     ["text"]=> 
     NULL 
     ["views"]=> 
     string(3) "118" 
     ["course"]=> 
     string(4) "9.50" 
     ["discount_percent"]=> 
     string(1) "0" 
    } 
    }  
+1

最小限の例のvar_dumpを追加してくださいArray、それはこの行のように見えます問題:$ this-> BuildMainTree($ array、$ value-> id); $ value-> idが0のままであれば、無限の再帰を得ます –

+0

これは '$ categories_arr [$ cat-> parent_id] [] = $ cat'というエラーをスローしませんか? '$ categories_arr [$ cat-> parent_id]'に新しい配列項目を追加していますが、最初に配列にする必要はありません。 –

+0

@DoktorOSwaldo、$ array –

答えて

0

問題のように あなたも何かにポストメタデータを増やす必要があります@DoktorOSwaldoは正しかった、以前の再帰は無限だった。

1

:ここ

は、配列のvar_dumpです。私が考える

public static function BuildTree($pid) { 

      global $MainMenu; 

      $row = DB::select() 
       ->from('catalog_tree') 
       ->where('parent_id', '=', $pid) 
       ->and_where('status', '=', '1') 
       ->union(DB::select() 
        ->from('catalog_tree') 
        ->where('id', 'in', DB::expr("(SELECT catalog_tree_id FROM catalog_tree_parents WHERE parent_id = '".$pid."')")) 
        ->and_where('status', '=', '1')) 
       ->find_all(); 

      if ($row->count() > 0) { 

       $MainMenu .= "<ul class=\"dropdown-menu\" role=\"menu\">"; 

       foreach ($row as $value) 
       { 

         $MainMenu .= '          
            <li class="divider"></li> 
            <li class="dropdown"> 
             <a href="/catalog/' . $value->alias . '"> 
              '. $value->name .' 
             </a> '; 

        Widgets::BuildTree($value->id); 
       } 
       if ($pid=='0') { 
        $MainMenu .= " <li class=\"divider\"></li></ul>"; 
        return $MainMenu; 
       } 
       else { 
        $MainMenu .= " <li class=\"divider\"></li></ul></li>"; 
       } 
      } 
     } 

この機能は完璧に動作します:) :以上の128メートルにphp.iniファイルでのmemory_limitを設定し、この機能によって解決10000

+0

私は試しました。今のところそれは2048Mです... –

1

まず、memory_get_peak_usage()は役に立ちません。割り当てられたメモリの量だけが返されます。これはエラーの原因となった数と同じです。

は、呼び出されたときに割り当てられているアクティブなメモリ量を返します。

ini_set('memory_limit', '256M');は、システムのメモリにPHPのフットプリントの最大許容量を設定します。 768KでOOMを取得している場合は、問題を修正することはできません。

使用しているPHPのバージョンは表示されませんが、すぐにアップグレードをお勧めします。 Zendのメモリマネージャでメモリの割り当てを解除できないバグがいくつかあります。これはまさに同じ問題につながります。

ローカルサーバとプロダクションサーバの両方が同じバージョンのOS、同じロングビット、同じバージョンのPHPを実行していますか?答えはノーでしょう。

malloc()の問題は、それがサブドメインでVirtualHost内にある可能性があり、768kしか割り当てていない場合、OSの問題のように聞こえることがほとんどです。

スクリプトにアクセスするときにコマンドプロンプトからtasklistを実行します。追加のApacheスレッド、またはプロセススパイク全体でのメモリ使用量が見えますか?

最後のアイデアは、表の行/列の各ループの後にflush()および/またはob_flush();を実行することです。これにより、バッファがクリアされ、問題が発生している場所でメモリが節約されます。

+0

私は他の方法で問題を解決しましたが、あなたの答えに感謝します。おそらく私は将来このような状況を避けるために、PHPなどでメモリなどについてもっと読むべきです... –

関連する問題