处理大数据的错误信息
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中写数据的时候报错,错误信息如下,请大神指导