[php] утекает память.. непонятно где.
после diff file1 file2 - я не нашёлА они есть.
никаких отличий.
Во втором случае нет строчки: $count_offline=0;
вряд ли пхп смог для неё выделить 50мегов
mysql_free_result($res) нужно делать даже если результата нет (нет строк).
вряд это из-за того, что какую-то переменную забыли удалить.
2) Твой код - пиздец говно.
3) Ты что, серьёзно думал, что кто-то будет тут ковыряться в нескольких страницах твоего говна в попытке понять, что оно делает?
Если по теме - не верю, что весь этот твой код является минимальным, производящим эту ошибку. Очисти его до минимума, и после этого что-то спрашивай.
я сказал, что два куска делают одно и тоже, что один кушает память в ожидаемый кол-вах, второй - в неожидаемых.
вопрос был не в том, что я прошу кого-нибудь там найти косяк, а в том, чтобы узнать идею, почему такое может быть. я с таким поведением столкнулся в первый раз.
код был дан лишь с целью ознакомления(какие функции используются и пр). о чём речь, т.к. если убрать его, первым же постом было бы
" ну ты бы хоть код свой показал "
эти два (ужасно кривых) куска кода неодинаковы
во второй части есть:
$out2.="<td><a href=".HTTP_VIEWFOTO_PATH."/viewfoto.php?id=".$username.">".$row[0]."</a> </td>".
$out2.="<td".(intval($row[1])?"":" bgcolor=\"lightgrey\"").">".$row[1]."</td>";
там точка в конце строки вместо ";" забавно
Точку я и не заметил. Думал оно на ругается. )
там точка в конце строки вместо ";" забавноа как это интерпретируется?
если косяк в этом, то очень странно, что оно работало без ошибок
$a .= "text1" . $a = "text2";
разве сначала присваивание, а потом конкатенация?
т.е. эквивалентно
$a .= $text1" . ($a = "text2");
?
Отсюда наверное и память растёт по экспоненте. У тебя длина строки удваиватся на каждом шаге.
это оно.
но непонятно всё равно, почему растёт память.
$teststr = "";
for($i=1;$i<10;$i++) {
$teststr = " test1 ". $teststr= " test2 ";
print $teststr."\n";
}
c:\home\igor\devel\etc>php aaa.php
test1 test2
test1 test2
test1 test2
test1 test2
test1 test2
test1 test2
test1 test2
test1 test2
test1 test2
UPD
зато в совокупности с ? "" :"fdsaf"; получили
for($i=1;$i<5;$i++) {
$b = rand(0,1);
$teststr .= " test1 ".
$teststr.= " test2 ". ($b==0) ? "" : "test3";
print "b: ".$b. " ". $teststr."\n";
}
c:\home\igor\devel\etc>php aaa.php
b: 0 test1
b: 1 test1 test1 test1
b: 0 test1 test1 test1 test1 test1 test1 test1
b: 0 test1 test1 test1 test1 test1 test1 test1 test1 test1 test1 test
1 test1 test1 test1 test1
в общем, опять подвела лень приводить код в порядок
хочется услышать, что именно в нём не нравится.
глядишь, почерпну пару-тройку новых замечаний
Щас тебе еще посоветуют определить все классами и методами, и весь твой экшн уложится в пять-десять красивых строк.
$teststr .= " test1 ". $teststr= " test2 ";
в цикле присваивание замени на .=, отсюда и говно лезет
напомнило
Сам прикинь. У тебя $action "rp9a" отличается от "rp9" только sql выражениемэто не в счёт, т.к. должен быть только один rp9.
интересно услышать по поводу того, что внутри if'ов
когда появляется время, я конечно, объединяю общие куски.
как мне объяснили, весь код писался в овральном режиме без каких-то планирований изменений в будущем, и самое главное сами изменения вносились на скорую руку, в результате, получилось то, что есть.
интересно услышать по поводу того, что внутри if'овПо хорошему надо:
1) Функции работы с БД обернуть классом;
2) Вместо кусков кода $out2.= использовать какой-нибудь движок шаблонов.
Этот код сейчас не удобно ни читать, ни отлаживать, ни модифицировать.
разве сначала присваивание, а потом конкатенация?оказывается да, сам удивился
Оставить комментарий
Phoenix
теперь то, что выводит блок
при вызове с параметром rp9