при выполнении скрипта на сервере в логах вылетает ошибка о переполнении и он не выпо

mess

Новичок
при выполнении скрипта на сервере в логах вылетает ошибка о переполнении и он не выпо

он не выполняется до конца. Скрипт создает список и рассылает почту по нему.
ругается в логах сервера так:
PHP Fatal error: Allowed memory size of 8388608 bytes exhausted at (null):0 (tried to allocate 2 bytes) in /home/market/scheduled_tasks/notificator_quot_open.php on line 88 Allowed memory size of 8388608 bytes exhausted (tried to allocate 523 bytes)
что значит эта ошибка?
ругается на следующую строку:
eval("\$first = \"$header\";");
$message = $first.$message."</TABLE>$footer</BODY></HTML>"; <- вот на эту!
Письма вроде бы небольшие килобайт по 20. не пойму что не так.
 

Yaponchick

Новичок
Скрипт съедает памяти больше чем 8 мегабайт.
решение:
1) увеличить max_memory_usage(если не ошибаюсь)
2) решить проблему с mem_leak / bad-code :D
 

mess

Новичок
а что может быть проблема в eval?
я не знаю. с кодом разбираюсь, сам не пойму зачем он там стоит.
И второе: где увеличить размер памяти?

-~{}~ 22.06.06 16:19:

и подскажите что здесь он делает. почему такая странная конструкция с слешами.
 

ТопольМ

Новичок со стажем
зачем увеличивать?
приведи по-больше кода

пс: сам захотел царствовать и всем владеть? :)
 

mess

Новичок
я только программер, не админ. так что не знаю где пофиксить max_memory_usage
 

Panchous

Павел
с вероятностью в 100% могу сказать, что там евал не нужен.
увеличение размера памяти - нелучший способ.
советую оптимизировать скрипт..
 

_vampiro_

Новичок
размер увеличивать не надо. :)
3 строки до и после покажи.

Ошибка логическая - её надо править, а не думать как заставить работать с ошибкой. ИМХО eval там для бекдора сделан автором ;)
 

mess

Новичок
получается формируется письмо. в header заголовок письма. Он динамический, туда вписываются переменные. а eval в итоге заменяет переменные в first и приклеевает к письму заголовок.
 

ТопольМ

Новичок со стажем
даешь код!

-~{}~ 22.06.06 16:32:

вариант:
попробуй строку eval("\$first = \"$header\";");
заменить на : $first = $header;
:)
 

mess

Новичок
код::)
начало цикла:
for ($i=0; $i<$rows; )
{
$firm_id=pg_result($res,$i,'firm_id');
$firm_schedule=.....
близлежащий код:
if ($i==$rows || pg_result($res,$i,'firm_id')!=$firm_id)
{
if (strpos($firm_schedule,$the_hour)==0)
$hours = "&#237;&#224; $the_hour:00";
else
{
$prev_hour = substr($firm_schedule,strpos($firm_schedule,$the_hour)-3,2);
$hours = "&#241; $prev_hour:00 &#239;&#238; $the_hour:00";
}
eval("\$first = \"$header\";");
$message = $first.$message."</TABLE>$footer</BODY></HTML>";

// $res0=pg_exec($conn,"SELECT email FROM firms WHERE id=$firm_id");
// $firm_email=pg_result($res0,0,0);

-~{}~ 22.06.06 16:35:

фишка eval как я понял в том, что в header используются двойные кавычки и следовательно в переменную записываю одинарные, поэтому выходит что переменные туда не записываются. ВОт eval переменные проставляет

-~{}~ 22.06.06 16:37:

близлежащий код ничего не дал. в конце цикла $message="";
т.е. обнуляется.

-~{}~ 22.06.06 16:40:

не пойму почему ругается на message. как там может быть переполнение аж 8ми метров, если письма маленькие.
Письмо обнуляется и в начале цикла и в конце.
 

_vampiro_

Новичок
в header используются двойные кавычки и следовательно в переменную записываю одинарные, поэтому выходит что переменные туда не записываются.
Э... отсыпь немного.

PHP:
$i++
не затер там случайно?
 

mess

Новичок
$message.="<TR><TD><A HREF=\"$SetHost/members/quot_prices/quot?qid=$item_quot_id\">$item_quot_id</a></TD><TD><A href=\"$SetHost/showfirm?firm_id=$item_customer_id\">$item_customer_name</A></TD><TD><A HREF=\"$SetHost/members/quot_prices/editpage/create/?qid=$item_quot_id&oid=$item_id\">$item_name</A></TD><TD>$item_qty&nbsp;$item_unit</TD><TD>$item_comment</TD><TD>$item_delivery_place</TD></TR>\n";
$prev_rub=$rub_id;

$i++;
if ($i==$rows || pg_result($res,$i,'firm_id')!=$firm_id)
 

mess

Новичок
да полно здесь переменных.
Ничего страшного если весь код напишу?

-~{}~ 22.06.06 16:44:

$message="";
$firms=0;
$rubs=0;
$mtn_quots_arr=array();
$mtn_quots_list=" ";
for ($i=0; $i<$rows; )
{
$firm_id=pg_result($res,$i,'firm_id');
$firm_schedule=pg_result($res,$i,'quot_notificator_schedule');
$rub_id=pg_result($res,$i,'rubric_id');
$item_name=pg_result($res,$i,'name');
$item_qty=pg_result($res,$i,'qty');
$item_unit=pg_result($res,$i,'unit');
$item_delivery_place=pg_result($res,$i,'delivery_place');
$item_id=pg_result($res,$i,'id');
$item_quot_id=pg_result($res,$i,'quot_id');
$item_comment = pg_result($res,$i,'comment');
$item_customer_id = pg_result($res, $i, 'customer_id');
$item_customer_name = pg_result($res, $i, 'r_name');

$mtn_quots_arr[$item_quot_id]=1;
//$mtn_quots_list.=$item_quot_id." ";

if($prev_rub!=$rub_id)
{
$res0=pg_exec($conn,"SELECT code, name FROM rubrics WHERE id=$rub_id");
$message.="<TR><TD colspan=6>&#208;&#243;&#225;&#240;&#232;&#234;&#224;: <a href=\"$SetHost/members/quot_prices/?rubric_id=$rub_id\">".pg_result($res0,0,'code')." - ".pg_result($res0,0,'name')."</a></TD></TR>\n";
pg_freeresult($res0);
$rubs++;
}

$message.="<TR><TD><A HREF=\"$SetHost/members/quot_prices/quot?qid=$item_quot_id\">$item_quot_id</a></TD><TD><A href=\"$SetHost/showfirm?firm_id=$item_customer_id\">$item_customer_name</A></TD><TD><A HREF=\"$SetHost/members/quot_prices/editpage/create/?qid=$item_quot_id&oid=$item_id\">$item_name</A></TD><TD>$item_qty&nbsp;$item_unit</TD><TD>$item_comment</TD><TD>$item_delivery_place</TD></TR>\n";
$prev_rub=$rub_id;

$i++;
if ($i==$rows || pg_result($res,$i,'firm_id')!=$firm_id)
{
if (strpos($firm_schedule,$the_hour)==0)
$hours = "&#237;&#224; $the_hour:00";
else
{
$prev_hour = substr($firm_schedule,strpos($firm_schedule,$the_hour)-3,2);
$hours = "&#241; $prev_hour:00 &#239;&#238; $the_hour:00";
}
eval("\$first = \"$header\";");
$message = $first.$message."</TABLE>$footer</BODY></HTML>";

-~{}~ 22.06.06 16:45:

$mtn_keys=array_keys($mtn_quots_arr);
for ($mtn_i=0; $mtn_i<count($mtn_keys); $mtn_i++){
$mtn_quots_list.=$mtn_keys[$mtn_i]." ";
} //for

mtn_insert_mail_report_line("[email protected]", $firm_email, "[email protected]", "&#211;&#226;&#229;&#228;&#238;&#236;&#235;&#229;&#237;&#232;&#229; &#238; &#231;&#224;&#239;&#240;&#238;&#241;&#224;&#245; &#234;&#238;&#242;&#232;&#240;&#238;&#226;&#238;&#234; &#246;&#229;&#237; &#226; &#209;&#221;&#210; ".$mtn_quots_list, "t", "", "", "");
$mtn_quots_list=" ";
$mtn_quots_arr=array();
///
pg_freeresult($res0);
$res0=pg_exec($conn,"DELETE FROM quot_note WHERE firm_id=$firm_id");
if (!$res0 || pg_cmdtuples($res0)==0)
echo "? an error in deleting from quot_note where firm_id=$firm_id\n";
pg_freeresult($res0);
$firms++;
$message="";
$prev_rub=0;
}
}
echo "OK - notifications sent to $firms firms (total $rubs rubricsXfirms)\n";

-~{}~ 22.06.06 16:48:

$header='<HTML><BODY>
<center><b>&#211;&#226;&#229;&#228;&#238;&#236;&#235;&#229;&#237;&#232;&#229; &#238; &#231;&#224;&#239;&#240;&#238;&#241;&#229;(&#224;&#245;) &#234;&#238;&#242;&#232;&#240;&#238;&#226;&#238;&#234; &#246;&#229;&#237; &#226; &#209;&#221;&#210;<b></center><br>\n
$the_date $hours &#226; &#241;&#232;&#241;&#242;&#229;&#236;&#243; &#253;&#235;&#229;&#234;&#242;&#240;&#238;&#237;&#237;&#238;&#233; &#242;&#238;&#240;&#227;&#238;&#226;&#235;&#232; &#239;&#238; &#240;&#243;&#225;&#240;&#232;&#234;&#224;&#236;,
&#237;&#224; &#234;&#238;&#242;&#238;&#240;&#251;&#229; &#226;&#251; &#239;&#238;&#228;&#239;&#232;&#241;&#224;&#237;&#251;, &#239;&#238;&#241;&#242;&#243;&#239;&#232;&#235;&#232; &#231;&#224;&#239;&#240;&#238;&#241;&#251; &#237;&#224; &#241;&#235;&#229;&#228;&#243;&#254;&#249;&#243;&#254; &#239;&#240;&#238;&#228;&#243;&#234;&#246;&#232;&#254;:<br>\n
<TABLE width=98% align=center border=1 cellspacing=0 cellpadding=3 bordercolor=\'#666666\'>
<TR><TD>&#205;&#238;&#236;&#229;&#240; &#234;&#238;&#242;&#232;&#240;&#238;&#226;&#234;&#232;</TD><TD>&#199;&#224;&#234;&#224;&#231;&#247;&#232;&#234;</TD><TD>&#205;&#224;&#232;&#236;&#229;&#237;&#238;&#226;&#224;&#237;&#232;&#229;</TD><TD>&#202;&#238;&#235;-&#226;&#238;</TD><TD>&#210;&#240;&#229;&#225;&#238;&#226;&#224;&#237;&#232;&#255;, &#239;&#240;&#229;&#228;&#250;&#255;&#226;&#235;&#255;&#229;&#236;&#251;&#229; &#234; &#239;&#240;&#238;&#228;&#243;&#234;&#246;&#232;&#232;</TD><TD>&#204;&#229;&#241;&#242;&#238; &#228;&#238;&#241;&#242;&#224;&#226;&#234;&#232;</TD></TR>\n';
 
Сверху