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

ТопольМ

Новичок со стажем
попробуй после $message = $first.$message."</TABLE>$footer</BODY></HTML>";

вставить var_dump ($message);
и погляди ЧЕТАМ)
 

mess

Новичок
да кстати в хеадере нету двойных кавычек. И правда интеерсно почему через одинарные. footer то через двойные. Не вижу смысла в этом eval
 

_vampiro_

Новичок
Global variable $rows was used before it was defined (line 7)

-~{}~ 22.06.06 16:56:

я бы смотрел в сторону условия в цикле... опасно оно выглядит.

-~{}~ 22.06.06 16:59:

PHP:
eval("\$first = \"$header\";");
$message = $first.$message."</TABLE>$footer</BODY></HTML>";
я бы заменил на
PHP:
$message = $header.$message.'</TABLE>'.$footer.'</BODY></HTML>';
не потеряв функционала.
 

mess

Новичок
я просто не с самого начала написал. вот начало:
$the_hour=date('H');
$the_date = date('d.m.Y');

echo "start notify vendors of quot --- in hour $the_hour\n";

$sql_str =
"SELECT quot_note.firm_id, qr.rubric_id, I.name, I.qty, I.unit, I.comment, I.id, I.quot_id, I.delivery_place, opt.quot_notificator_schedule, f.r_name, q.customer_id
FROM subject_options AS opt, quot_note, quot_prepared AS I, quot_rubric AS qr, firms AS f, quot AS q
WHERE quot_note.firm_id=opt.firm_id
AND I.quot_id = q.id
AND q.customer_id = f.id
AND I.id=quot_note.quot_item_id
AND qr.quot_prepared_id = I.id
AND opt.quot_notificator_schedule like '%$the_hour%'
ORDER BY quot_note.firm_id, qr.rubric_id, I.quot_id, I.name
";

$res=pg_exec($conn,$sql_str);
$rows=pg_numrows($res);
echo "$rows items selected\n";
$prev_rub=0;
$header='<HTML><BODY>

А eval заменю попробую. спасибо.

-~{}~ 22.06.06 17:04:

насчет цикла строк rows строк там действительно много очень. запрос выполняется окол 50 секунд на серваке с его загруженностью.

-~{}~ 22.06.06 17:09:

меня смущает что ошибка показуется именно на строку $message = $first.$message."</TABLE>$footer</BODY></HTML>";
. так как смотрю по идее мессадж ну никак не может быть переполнен
 

_vampiro_

Новичок
PHP:
for ($i=0; $i<$rows; ){
   $i++;
   if ($i==$rows || pg_result($res,$i,'firm_id')!=$firm_id){
      ...skiped... 
      $message="";

   }

}
кто-то говорил, что мессадж чистится в конце цикла? Оно чистится только при последнем проходе, либо при
PHP:
pg_result($res,$i,'firm_id')!=$firm_id
все остальное время мессдж увеличивается в размерах.
 

mess

Новичок
это оно прибавляется при нем.
щас скину полный код чтоб путаницы не было.
#!/opt/mapserver-php/bin/php
<?
// HOURLY

include('isTest.inc.php');
include('globals.inc.php');
include('connect.inc.php');
include('ins_mail_rep.php');
include('func_mail.php');
// take a time from DB server???
$the_hour=date('H');
$the_date = date('d.m.Y');

echo "start notify vendors of quot --- in hour $the_hour\n";

$sql_str =
"SELECT quot_note.firm_id, qr.rubric_id, I.name, I.qty, I.unit, I.comment, I.id, I.quot_id, I.delivery_place, opt.quot_notificator_schedule, f.r_name, q.customer_id
FROM subject_options AS opt, quot_note, quot_prepared AS I, quot_rubric AS qr, firms AS f, quot AS q
WHERE quot_note.firm_id=opt.firm_id
AND I.quot_id = q.id
AND q.customer_id = f.id
AND I.id=quot_note.quot_item_id
AND qr.quot_prepared_id = I.id
AND opt.quot_notificator_schedule like '%$the_hour%'
ORDER BY quot_note.firm_id, qr.rubric_id, I.quot_id, I.name
";

$res=pg_exec($conn,$sql_str);
$rows=pg_numrows($res);
echo "$rows items selected\n";
$prev_rub=0;
$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';

$footer = "<p>&#199;&#224; &#228;&#238;&#239;&#238;&#235;&#237;&#232;&#242;&#229;&#235;&#252;&#237;&#238;&#233; &#232;&#237;&#244;&#238;&#240;&#236;&#224;&#246;&#232;&#229;&#233; &#238;&#225;&#240;&#224;&#242;&#232;&#242;&#229;&#241;&#252; &#226; <a href=\"$SetHost/members/quot_prices\">&#241;&#232;&#241;&#242;&#229;&#236;&#243;.</a></p>\n
<p>&#211;&#226;&#229;&#228;&#238;&#236;&#235;&#255;&#229;&#236; &#226;&#224;&#241;, &#247;&#242;&#238; &#237;&#224;&#239;&#240;&#224;&#226;&#235;&#229;&#237;&#232;&#229; &#231;&#224;&#234;&#224;&#231;&#247;&#232;&#234;&#238;&#236; &#231;&#224;&#239;&#240;&#238;&#241;&#224; &#234;&#238;&#242;&#232;&#240;&#238;&#226;&#238;&#234; &#246;&#229;&#237; &#232; &#239;&#240;&#229;&#228;&#238;&#241;&#242;&#224;&#226;&#235;&#229;&#237;&#232;&#229;
&#239;&#238;&#241;&#242;&#224;&#226;&#249;&#232;&#234;&#238;&#236; &#241;&#226;&#238;&#229;&#227;&#238; &#239;&#240;&#229;&#228;&#235;&#238;&#230;&#229;&#237;&#232;&#255; &#237;&#229; &#237;&#224;&#234;&#235;&#224;&#228;&#251;&#226;&#224;&#229;&#242; &#237;&#224; &#241;&#242;&#238;&#240;&#238;&#237;&#251; &#237;&#232;&#234;&#224;&#234;&#232;&#245; &#228;&#238;&#239;&#238;&#235;&#237;&#232;&#242;&#229;&#235;&#252;&#237;&#251;&#245;
&#238;&#225;&#255;&#231;&#224;&#242;&#229;&#235;&#252;&#241;&#242;&#226;.</p>\n
<p><b>&#196;&#224;&#237;&#237;&#238;&#229; &#239;&#232;&#241;&#252;&#236;&#238; &#255;&#226;&#235;&#255;&#229;&#242;&#241;&#255; &#232;&#237;&#244;&#238;&#240;&#236;&#224;&#246;&#232;&#238;&#237;&#237;&#251;&#236; &#232; &#240;&#224;&#241;&#241;&#251;&#235;&#224;&#229;&#242;&#241;&#255; &#241;&#232;&#241;&#242;&#229;&#236;&#238;&#233;, &#239;&#238;&#253;&#242;&#238;&#236;&#243; &#237;&#224;&#239;&#240;&#224;&#226;&#235;&#255;&#242;&#252;
&#239;&#232;&#241;&#252;&#236;&#238; &#226; &#238;&#242;&#226;&#229;&#242; &#237;&#229; &#241;&#235;&#229;&#228;&#243;&#229;&#242;.</b></p>\n
&#197;&#241;&#235;&#232; &#234;&#224;&#234;&#224;&#255;-&#235;&#232;&#225;&#238; &#231;&#224;&#239;&#240;&#224;&#248;&#232;&#226;&#224;&#229;&#236;&#224;&#255; &#239;&#240;&#238;&#228;&#243;&#234;&#246;&#232;&#255; &#237;&#229; &#241;&#238;&#238;&#242;&#226;&#229;&#242;&#241;&#242;&#226;&#243;&#229;&#242; &#226;&#224;&#248;&#229;&#236;&#243; &#239;&#240;&#238;&#244;&#232;&#235;&#254;
&#228;&#229;&#255;&#242;&#229;&#235;&#252;&#237;&#238;&#241;&#242;&#232;, &#239;&#238;&#230;&#224;&#235;&#243;&#233;&#241;&#242;&#224;, &#231;&#224;&#233;&#228;&#232;&#242;&#229; &#226; &#241;&#226;&#238;&#254; <a href=\"$SetHost/members/subscription/\">&#231;&#224;&#234;&#240;&#251;&#242;&#243;&#254; &#238;&#225;&#235;&#224;&#241;&#242;&#252;</a> &#232; &#239;&#240;&#238;&#226;&#229;&#240;&#252;&#242;&#229;, &#237;&#224; &#234;&#224;&#234;&#232;&#229; &#240;&#243;&#225;&#240;&#232;&#234;&#232;
&#226;&#251; &#239;&#238;&#228;&#239;&#232;&#241;&#224;&#237;&#251;. &#206;&#242;&#240;&#229;&#228;&#224;&#234;&#242;&#232;&#240;&#238;&#226;&#224;&#242;&#252; &#240;&#243;&#225;&#240;&#232;&#234;&#232;, &#237;&#224; &#234;&#238;&#242;&#238;&#240;&#251;&#229; &#226;&#251; &#239;&#238;&#228;&#239;&#232;&#241;&#224;&#237;&#251;, &#232; &#232;&#231;&#236;&#229;&#237;&#232;&#242;&#252; &#227;&#240;&#224;&#244;&#232;&#234; &#239;&#238;&#235;&#243;&#247;&#229;&#237;&#232;&#255;
&#241;&#238;&#238;&#225;&#249;&#229;&#237;&#232;&#233; &#226;&#251; &#236;&#238;&#230;&#229;&#242;&#229; &#241;&#224;&#236;&#238;&#241;&#242;&#238;&#255;&#242;&#229;&#235;&#252;&#237;&#238;. </p>\n
<p>&#209;&#224;&#233;&#242; &#241;&#232;&#241;&#242;&#229;&#236;&#251; &#253;&#235;&#229;&#234;&#242;&#240;&#238;&#237;&#237;&#238;&#233; &#242;&#238;&#240;&#227;&#238;&#226;&#235;&#232;: <a href=\"$SetHost\">$SetHost</a></p>\n
<p>
&#199;&#224; &#228;&#238;&#239;&#238;&#235;&#237;&#232;&#242;&#229;&#235;&#252;&#237;&#238;&#233; &#232;&#237;&#244;&#238;&#240;&#236;&#224;&#246;&#232;&#229;&#233; &#238;&#225;&#240;&#224;&#249;&#224;&#233;&#242;&#229;&#241;&#252;:<br>\n
&#195;&#211;&#207; &#202;&#202; \"&#214;&#229;&#237;&#242;&#240; &#232;&#237;&#244;&#238;&#240;&#236;&#224;&#246;&#232;&#238;&#237;&#237;&#251;&#245; &#242;&#229;&#245;&#237;&#238;&#235;&#238;&#227;&#232;&#233;\"<br>\n
&#242;&#229;&#235;. (861) 262-96-51,<br>\n
<a href=\"mailto: [email protected]\">[email protected]</a><br>\n
</p>";

$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>";

// $res0=pg_exec($conn,"SELECT email FROM firms WHERE id=$firm_id");
// $firm_email=pg_result($res0,0,0);
if (TEST)
{
echo "sent to $firm_email\n";
$firm_email='[email protected]';
}

// mail($firm_email,"$the_date $the_hour:00. &#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; ",$message,"From: [email protected]\nReply-To:[email protected]\nContent-Type: text/html; charset=koi8-r\nContent-Transfer-Encoding: 8bit\n",'[email protected]');
sendtofirm($firm_id,"$the_date $the_hour:00. &#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; ",$message,0);

///
$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";
?>
 

_vampiro_

Новичок
предлагаю в запросе воткнуть лимит на 10-50-100 строк и посмотреть будет-ли вываливатся. Письма больше 8М врят-ли Вам нужны.
 

ТопольМ

Новичок со стажем
вообще как-то странно цикл устроен
$i++ не на месте явно :)

-~{}~ 22.06.06 17:29:

и все что после него)
 

mess

Новичок
да никак не въеду в код. особо и не нада. нужно только избавиться от переполнения. Началось все с того что сервак должен был провести рассылку где то на 200 с чем то ящиков. Провел только на 100 где то.
ПОлез в логи и вычитал эту ошибочку.

-~{}~ 22.06.06 17:31:

а $i наверна не зря там стоит.
 

_vampiro_

Новичок
поясняю: у вас для какой-то фирмы пытается отправить слишком большое письмо. Это не есть гуд. :)

Код:
\n
внутри одинарных кавычек - тоже прикольно.
 

mess

Новичок
вампир: так он для какой то пытается? ил иполучается по циклу увеличивается каждое письмо и посылается каждому все больше и больше?
Насчет одинарных кавычек не понял :)
 

_vampiro_

Новичок
по кавычкам можно почитать ман. это косметика, не влияет на размер.

PHP:
$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 $item_unit</TD><TD>$item_comment</TD><TD>$item_delivery_place</TD></TR>\n";
$prev_rub=$rub_id;
накапливается мессадж, пока условие не начнет выполнятся. И для какой-то фирмы слишком долго накапливается, я думаю.
 

mess

Новичок
че то не въеду а как оно накапливается если там не цикл, а сравнение....
 
Сверху