处理大数据的错误信息

Posted

技术标签:

【中文标题】处理大数据的错误信息【英文标题】:Error message for processing big data 【发布时间】:2018-08-06 10:49:15 【问题描述】:

我在 php 中处理文件时遇到问题。处理小文件时,可以看到输出。但是,当文件很大时,它会显示如下警告:

PHP 致命错误:C:\xampp\htdocs\ujian_online\application\views\data_soal\view_proses.php 第 644 行内存不足(已分配 1068498944)(试图分配 133955584 字节)

我们可以看到这样的代码:



    <?php
                                                       $no_urut = 0;
                                                        //print_r($array_query_simantic_reletedness);
                                                        foreach ($val_simantic_reletedness as $doc_simantic_word) 
                                                            foreach ($array_query_simantic_reletedness as $text_simantic_current_key => $text_simantic_current_val) 
                                                                //get fix val
                                                                $status = 0;
                                                                $spe = 0;
                                                                $sr = 0;
                                                                if ($text_simantic_current_key == $doc_simantic_word) 
                                                                    $status++;
                                                                    $spe = 1;
                                                                
                                                                $where_get_kamus = array('kata' => $text_simantic_current_key);
                                                                $get_kamus = $this->master->find_data($where_get_kamus, 'tb_kamus')->row_array();
                                                                // print_r($get_kamus);
                                                                //split kamus by ';'
                                                                $kamus_synonim = explode(';', $get_kamus['synonim']);
                                                                //split kata by '.'

                                                                foreach ($kamus_synonim as $key_word_split => $val_word_split) 
                                                                    $kata_current_kamus = explode(';', $val_word_split);
                                                                    //print_r($kata_current_kamus);
                                                                    foreach ($kata_current_kamus as $key_current_word_doc => $val_current_word_doc) 
                                                                        //split by doc 
                                                                        $word_split_doc = explode('.', $val_current_word_doc);
                                                                        if (empty($word_split_doc[0])) 
                                                                            continue;
                                                                        
                                                                        if (isset($word_split_doc[1])) 
                                                                            $word_split_slash = explode('|', $word_split_doc[1]);
                                                                        
                                                                        // print_r($word_split_slash);
                                                                        // ---- foreach for checking ---
                                                                        foreach ($word_split_slash as $val_current_word_check) 
                                                                            //print_r($val_current_word_check);
                                                                            $val_current_word_check = str_replace(' ', '', $val_current_word_check);
                                                                            $val_current_word_check = str_replace("\r", '', $val_current_word_check);
                                                                            $val_current_word_check = str_replace("\t", '', $val_current_word_check);
                                                                            $val_current_word_check = str_replace("\n", '', $val_current_word_check);
                                                                            // print_r($val_current_word_check);
                                                                            if ($doc_simantic_word == strtolower($val_current_word_check)) 
                                                                                $status++;
                                                                                // penentuan dmax
                                                                                $where_get_spe_check = array('kata' => $doc_simantic_word);
                                                                                $get_word_spe = $this->master->find_data($where_get_spe_check, 'tb_kamus')->row_array();
                                                                                if ($get_kamus['dmax'] > $get_word_spe['dmax']) 
                                                                                    $dmax_spe = $get_kamus['dmax'];
                                                                                 else 
                                                                                    $dmax_spe = $get_word_spe['dmax'];
                                                                                
                                                                                //count spe
                                                                                $spe = $get_kamus['dmax'] / $dmax_spe;
                                                                            
                                                                        
                                                                        //---- end foreach for checking ----------------
                                                                        //echo '<br>';
                                                                    
                                                                
                                                                $no_urut++;
                                                                if ($status > 0) 
                                                                    $val_view = 1;
                                                                 else 
                                                                    $val_view = 0;
                                                                    $spe = 0;
                                                                
                                                                $sr = $spe * $val_view;

                                                                echo "
                                              <tr>
                                                  <td>$no_urut</td> 
                                                  <td>$text_simantic_current_key " . '=' . " $doc_simantic_word</td>
                                                  <td>$val_view</td>
                                                  <td>$spe</td>
                                                  <td>$sr</td>
                                              </tr>

                                              ";
                                                //  echo '||';echo $no_urut;echo '|'; echo $text_simantic_current_key ; echo '=' ;echo $doc_simantic_word;echo '|'; echo $val_view;echo '|'; echo $spe;echo '|'; echo $sr;
                                                            
                                                        //end simantic word doc
                                                        ?>
and i give the highlight for line 644 is > echo " <tr> <td>$no_urut</td> <td>$text_simantic_current_key " . '=' . " $doc_simantic_word</td> <td>$val_view</td> <td>$spe</td> <td>$sr</td> </tr> > "; But when i check my code in https://phpcodechecker.com/ i have the different notice like this : Error: There is 1 more opening parenthesis '(' found This count is unaware if parenthesis are inside of a string and we can see the code :
    $get_data_tema = $this->master->find_data(array('id_tema'=>$key_val_final),'tb_tema')->row_array();
                                                 echo 'nama tema " <b>'.$get_data_tema['nama'].'</b>"';
                                            
                                            $array_post_input = array('text_soal'=> $data_post['text_soal'],
                                                                    'a' =>$data_post['a'],
                                                                    'b' =>$data_post['b'],
                                                                    'c' =>$data_post['c'],
                                                                    'd' =>$data_post['d'],
                                                                    'e' =>$data_post['e'],
                                                                    'answer' =>$data_post['answer'],
                                                                    'guru_id'=> $this->session->userdata('id_current'),
                                                                    'tema_id'=>0,
                                                                    'mapel_id' =>$data_post['mapel_id'],
                                                                    'gbrsoal' =>$data_post['gbrsoal'],'label_id'=>0,
                                                                        );
                                            $this->master->insert_data('tb_soal',$array_post_input);

我正在使用 xampp 版本 v3.2.2 和 windows 8.1,RAM 8 GB,6,94 可用,PHP 版本 5.6.15 和 codeigniter 框架,我在 php.ini 51200000000000 M 内设置了内存限制。那么,应该我要解决我的问题吗?我必须修哪条线?谢谢。

【问题讨论】:

你实际上有“51200000000000M”?这不仅仅是安装的 RAM。 8GB 大约是 8000MB。 如果您不想使用像 xdebug 这样的调试器并查看实际发生的情况,请尝试注释某些行,直到您知道哪些行正在耗尽内存,通常是那些 5 中的变量分配嵌套循环 请整理出问题中的代码。这很不可读。您还应该缩小问题范围,而不仅仅是发布一堆代码让我们找出您的问题发生在哪里。 【参考方案1】:

第一个问题的解决方案:由于数据量很大,打印过程可能会耗费大量资源。因此,在所有 foreach 迭代完成后,将可打印部分保存到数组中并打印一次。注意:在我的代码中查找$results

<?php

$results = [];
$no_urut = 0;

foreach ($val_simantic_reletedness as $doc_simantic_word) 
    foreach ($array_query_simantic_reletedness as $text_simantic_current_key => $text_simantic_current_val) 

        //...

        $sr = $spe * $val_view;

        $results[] = "<tr>
                        <td>$no_urut</td> 
                        <td>$text_simantic_current_key " . '=' . " $doc_simantic_word</td>
                        <td>$val_view</td>
                        <td>$spe</td>
                        <td>$sr</td>
                    </tr>";
    


echo implode('', $results);

第二个问题的解决方案(如果我理解正确的话):删除出现在该行之后的“”字符

echo 'nama tema " <b>' . $get_data_tema['nama'] . '</b>"';

祝你好运。

【讨论】:

以上是关于处理大数据的错误信息的主要内容,如果未能解决你的问题,请参考以下文章

hadoop在往HDFS中写数据的时候报错,错误信息如下,请大神指导

Apache日志优化

尝试处理多维数据集,但在模拟信息中出现错误

cms请求数据错误怎么处理

Ext JS 5 关于Store load返回json错误信息或异常的处理

归档—监控ORACLE数据库告警日志