Сбой при работе со скриптом

12
ewg777
На сайте с 04.06.2007
Offline
225
#11
myViS:
я туда 900000 поставил, не в этом дело, да и функция implode быстро работает, даже 30 секунд очень много.





где $mass_words - это одномерный массив из 40000 элементов, где каждый элемент это слово, в среднем по 8 букв.

Это из серии http://phpclub.ru/talk/showthread.php?postid=878541#post878541

pikasso
На сайте с 27.01.2008
Offline
150
#12
myViS:
я туда 900000 поставил, не в этом дело, да и функция implode быстро работает, даже 30 секунд очень много.

Вот видите, откуда я мог это знать ? Вы с одной стороны просите помощи, а с другой не даете никакой информации, боясь за свой супер пупер навороченный код... Как уже было сказано, шаманы в отпуске, удачи.

whites
На сайте с 28.10.2009
Offline
21
#13

Оперативки спокойно может не хватать, вероятнее в этом дело. Поменяйте в php.ini memory_limit.

x-Strife Game Team
MV
На сайте с 08.07.2008
Offline
51
#14

Убрал функцию implode, вместо нее слепливаю сразу через for. Проблема исчезла.

Тем не менее, до сих пор не понятно почему implode давал сбой.

Если кому интересно, то выкладываю скрипт. Сама панель большая, выкладываю функцию, в которой возникал сбой.

function FreeWords ($text, $rusbel){

$words_line = '';
$badwords_line = '';
$trash_words_line = '';
$words = mysql_query("SELECT * FROM `panel_".$rusbel."words`");
for ($mass_words = array(); $row = mysql_fetch_assoc($words); $words_line .= $row['word'].'|');
$bad_words = mysql_query("SELECT `word` FROM `panel_badwords` WHERE `lang`='".$rusbel[0]."' OR `lang`='a'");
for ($mass_badwords = array(); $row = mysql_fetch_assoc($bad_words); $badwords_line .= $row['word'].'|');
$trash_words = mysql_query("SELECT `word` FROM `panel_trash` WHERE `lang`='".$rusbel[0]."'");
for ($mass_trash = array(); $row = mysql_fetch_assoc($trash_words); $trash_words_line .= $row['word'].'|');
/* $words = implode("|", $mass_words); <- В этой строке был сбой
$badwords = implode("|", $mass_badwords);
$trash_words = implode("|", $mass_trash); */
$line = '_|'.$words_line.$badwords_line.$trash_words_line;
$tech_text = DelBadSymb($text);
$tech_text = strtolower($tech_text);
$tech_text = del2words(trim($tech_text));
$mass_words = explode(" ", $tech_text);
$words = '';
$i = 0;
while ($i < count($mass_words)){
if (!strpos($line, '|'.$mass_words[$i].'|')){
$words .= $mass_words[$i].'|';
}
$i++;
}
return trim($words, '|');
}
whites
На сайте с 28.10.2009
Offline
21
#15

myViS, я ответил на вопрос, Вы проверяли? Я очень уверен что дело было в памяти.

ewg777
На сайте с 04.06.2007
Offline
225
#16
whites:
myViS, я ответил на вопрос, Вы проверяли? Я очень уверен что дело было в памяти.

Когда не знают, всегда что-то ляпают. Видя конструкцию типа "while ($i < count($mass_words)){ ", уже дальше можно смотреть. myViS, какую задачу должен выполнять данный код?

whites
На сайте с 28.10.2009
Offline
21
#17

ewg777, серьезно? Похоже Вы просто не понимаете о чем речь. Диагноз выдал сам ТС, я его подчеркнул и сформулировал, а также стало очень интересно почему мой совет никак не был воспринят.

Слабо посчитать сколько надо оперативки для $words = implode("|", $mass_words) и массиве более 40000 элементов? 😂 А для while ($i < count($mass_words))?

MV
На сайте с 08.07.2008
Offline
51
#18
whites:
Оперативки спокойно может не хватать, вероятнее в этом дело.

Этот массив весит в районе 800 кб, здесь со стандартными настройками проблем быть не должно.

Или оперативная память как-то по-другому считается?

whites:
Поменяйте в php.ini memory_limit.

У меня:

memory_limit = 64M

ewg777:
Видя конструкцию типа "while ($i < count($mass_words)){ ", уже дальше можно смотреть

Я не понял эту фразу.

ewg777:
myViS, какую задачу должен выполнять данный код?

Функция выдает слова из текста $text, которых нет в базе данных.

whites:
а также стало очень интересно почему мой совет никак не был воспринят.

Я извиняюсь, так получилось.

whites:
Слабо посчитать сколько надо оперативки для $words = implode("|", $mass_words) и массиве более 40000 элементов? А для while ($i < count($mass_words))?

Сколько, и как считать? Я уже спрашивал выше.

ewg777
На сайте с 04.06.2007
Offline
225
#19
Функция выдает слова из текста $text, которых нет в базе данных.

Тогда это у Вас бред написан. http://www.php.net/manual/en/function.array-intersect.php надо юзать.

12

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий