[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Ошибки при переводе кода из с++ в php
Guest
Было написано что-то вроде чатбота на с++. Он принимал реплику пользователя и отвечал на нее. Я решил попробовать его вывести в сеть, чтобы работал, как к примеру a.l.i.c.e.
В одной из функции возникает ошибка.


function load_memory(&$bots_replics){
$source=fopen("baza_replic_1.txt","r");
$temp="nothing";
while(!feof($source)){
$temp=fgets($source);
$group_name="noname";//string
$group_name=fgets($source);
$temp=fgets($source);

$pre_tags=array();
$pre_answers=array();
$pre_tag="nothing";
$pre_ans="nothing";

//Ошибка возникает здесь.
//Цикл считывание признаков/тэгов заканчивается, когда читается строка <tag_end>

while($pre_tag!="<tag_end>"){
$pre_tag=fgets($source);
if($pre_tag=="<tag_end>")break;
$pre_tags[]=$pre_tag;//конкретно - в этой строке.
}

$temp=fgets($source);//Считываем ненужную пока строку.

//Далее то же самое для answers.{
//....
//}


$temp=fgets($source);//Считываем ненужную пока строку.
$temp=fgets($source);//Считываем ненужную пока строку.

add_group_of_replics($pre_tags,$pre_answers,$bots_replics);
}
fclose($source);
}


Фрагмент кода на плюсах:

string pre_tag("nothing");
string pre_ans("nothing");
while(true){
getline(source,pre_tag);
if(pre_tag=="<tag_end>")break;
pre_tags.push_back(pre_tag);
}


Кусочек того, что содержится в текстовом файле:
Цитата

<group_begin>
приветствие
<tag_begin>
--------t-- --t--------
здравствуй робот 9
здорово робот 9
привет тебе 9
здравствуйте - 9
здравствуй - 9
салют - 9
привет - 9
--------t-- --t--------
<tag_end>
<answers_begin>
---- ----
и тебе привет, человек.
Привет и тебе, @
Здорово-здорово.
Салют, @
Приветствую.
Вас приветствует бот. Чат-бот...
---- ----
<answers_end>
<group_end>


Я так понимаю, ошибка связана с тем, что я неправильно читаю из файла. Вот ошибка:
Цитата

ERROR E_ERROR/ Allowed memory size of 134217728 bytes exhausted(tryed to allocated 35 bytes) at ...line
Может, кто-нибудь подскажет, в чем может быть проблема?




Спустя 2 минуты, 17 секунд (28.07.2010 - 16:24) DiGriZ написал(а):
Это опять же я, только зарегистрировался.

Спустя 3 минуты, 15 секунд (28.07.2010 - 16:27) sergeiss написал(а):
Эта ошибка говорит о том, что ты пытаешь использовать памяти больше, чем у тебя разрешено (в файле php.ini). 134217728 байт = 128 МБ.
Вариантов 2:
1. Увеличить допустимую память (не самый лучший вариант).
2. Оптимизировать скрипт (лучше заняться этим).

Спустя 48 минут, 1 секунда (28.07.2010 - 17:15) DiGriZ написал(а):
как я могу использовать больше 128 МБ?
У меня текстовый файл с "базой" бота 12 Кб весит.
У меня подозрения, что файл читается бесконечным образом. Только тогда возможны эти 128 Мб.

Где-то в уроках по php я читал, что функция feof() работает не так, как в с++, но ничего конкретно не было сказано. Может, в этом проблема?

Спустя 37 минут, 8 секунд (28.07.2010 - 17:52) sergeiss написал(а):
Попробуй подойти по-другому.
В ПХП есть фунция file(), которая читает весь файл в один массив, одна строка - один элемент массива. Возможно, это тебе поможет.

И еще подсказка - при проходе по полученному массиву используй цикл foreach. В ПХП, тем более в данном случае, он просто ну очень полезен.

Спустя 3 дня, 21 час, 34 минуты, 17 секунд (1.08.2010 - 15:26) DiGriZ написал(а):
Спасибо за информацию.)
проблема была в том, что пхп не читал из файла то, что у меня было заключено в < >. Не знаю, почему. сменил вид тэга, и все в порядке.
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.