Привет всем, в пыхпыхе не силен, использую скрипт для отображения статистики php+apache+mysql+squid.
В логах есть записи:
[Fri Nov 21 15:24:02 2008] [error] [client 172.24.118.219] PHP Notice: Undefined index: month in /var/www/htdocs/index.php on line 6
[Fri Nov 21 15:24:02 2008] [error] [client 172.24.118.219] PHP Notice: Undefined index: month in /var/www/htdocs/index.php on line 17
[Fri Nov 21 15:24:19 2008] [error] [client 172.24.118.219] PHP Notice: Undefined variable: table in /var/www/htdocs/index.php on line 27
[Fri Nov 21 15:24:43 2008] [error] [client 172.24.118.219] PHP Notice: Undefined variable: PHP_SELF in /var/www/htdocs/index.php on line 44
Сам скрипт (сорри за кодировку):
<?php
$def_charset=«UTF-8»;
$color="»; $year = «»; $ipv4=getenv(«REMOTE_ADDR»);
$res = mysql_connect(«localhost»,«user»,«passwd») or die(«Fatal PHP 'MySQL CONNECT' error.»);
$res = mysql_select_db(«traffics») or die(«Fatal database query 'USE' error»);
if ($HTTP_GET_VARS["month"]==«list») {
$res = mysql_query(«SELECT DISTINCT(LEFT(time,7)) AS month,LEFT(time,4) AS year FROM squid ORDER BY year DESC,month DESC;»);
while ($rw=mysql_fetch_array($res)) {
if ($year<>$rw["year"]) {
$year=$rw["year"];
$table.=»
$year РіРѕРґ:»;
};
$table.="<a href=$PHP_SELF?month=».$rw["month"].«>».$rw["month"]."</a> »;
}; $otherlink="<a href=$PHP_SELF?>Р—Р° текущий месяц»;
} else {
system(«/etc/squid/squid-to-mysql»);
if ($HTTP_GET_VARS["month"]=="») {
$res = mysql_query(«SELECT LEFT(NOW(),7) as month»);
$rw=mysql_fetch_array($res);
$cur_month=$rw["month"];
} else $cur_month=$HTTP_GET_VARS["month"];
$res = mysql_query(«SELECT round(sum(bytes)/10000)/100 as trf,ip FROM squid WHERE (LEFT(time,7)=’$cur_month’) AND (trans<>’NONE/-’) GROUP BY ip ORDER BY LENGTH(ip),ip;»);
while ($rw=mysql_fetch_array($res)) {
if ($ipv4 == $rw["ip"]) $color=» bgcolor=’#FFDDDD’»;
else $color=»;
$table.=»
»;
};
$res = mysql_query(«SELECT round(sum(bytes)/10000)/100 as trf FROM squid WHERE (LEFT(time,7)=’$cur_month’) AND (trans<>’NONE/-’);»);
$rw=mysql_fetch_array($res);
$extwwwtrf=$rw["trf"];
$table.=»
»;
$res = mysql_query(«SELECT round(sum(bytes)/10000)/100 as trf FROM squid WHERE (LEFT(time,7)=’$cur_month’);»);
$rw=mysql_fetch_array($res);
$locwwwtrf=$rw["trf"];
$econtrf=$locwwwtrf-$extwwwtrf;
$table.=»
»;
$table=»
$table
<table>
<tr color="">
<td> ».$rw["ip"]." </td>
<td align=«right»> ».gethostbyaddr($rw["ip"])." </td>
<td align=«right»>».$rw["trf"].» РњР‘ </td>
</tr>
<tr>
<td colspan=«2»> Р˜С‚РѕРіРѕ:</td>
<td align=«right»> «.$extwwwtrf.» РњР‘ </td>
</tr>
<tr>
<td colspan=«3» align=«center» bgcolor=«#DDFFDD»>Статистика РїСЂРѕРєСЃРё-кэша Р·Р° $cur_month:</td>
</tr>
<tr>
<td colspan=«2»> Скачано локально:</td>
<td align=«right»> $locwwwtrf РњР‘ </td>
</tr>
<tr>
<td colspan=«2»> Скачано РёР· интернета:</td>
<td align=«right»> $extwwwtrf РњР‘ </td>
</tr>
<tr>
<td colspan=«2»> Сэкономлено системой:</td>
<td align=«right»> $econtrf РњР‘ </td>
</tr>
<tr>
<td></td>
</tr>
<tr>
<td align=«center» colspan=«3» bgcolor=«#DDFFDD»>Статистика Р·Р° $cur_month:</td>
</tr>
</table>
»;
$otherlink="$Другой месяц$»;
};
echo »
<table align=«center» cellspacing=«0» border=«0» cellpadding=«0» height=’100%' width=’100%’>
<tr height=’100%’>
<td width=’100%' valign=«top» colspan=«2»>
$otherlink
<center>
$table
</center>
</td>
</tr>
<tr>
<td width=’100%’></td>
<td valign=«bottom» align=«right» bgcolor=’#FFDDDD’> © <a href=’mailto:user@mail.ru’>РћРћРћ РќРћРљ</a>, 2008. </td>
</tr>
</table>
»;
?>
// Тему переместил(а) Dmitry Shurupov из форума «UNIX FAQ: вопросы по UNIX/Linux».
Последние комментарии
- OlegL, 17 декабря в 15:00 → Перекличка 21
- REDkiy, 8 июня 2023 года в 9:09 → Как «замокать» файл для юниттеста в Python? 2
- fhunter, 29 ноября 2022 года в 2:09 → Проблема с NO_PUBKEY: как получить GPG-ключ и добавить его в базу apt? 6
- Иванн, 9 апреля 2022 года в 8:31 → Ассоциация РАСПО провела первое учредительное собрание 1
- Kiri11.ADV1, 7 марта 2021 года в 12:01 → Логи catalina.out в TomCat 9 в формате JSON 1
сам скрипт вроде отрабатывает но ошибки напрягают, подскажите можно ли поправить?
По строкам:
if ($HTTP_GET_VARS["month"]==«list») { 6-я
if ($HTTP_GET_VARS["month"]=="») { 17-я
»; 27-я
$otherlink="$Другой месяц$»; — 44-я
<table>
<tr color="">
<td> ».$rw["ip"]." </td>
<td align=«right»> ».gethostbyaddr($rw["ip"])." </td>
<td align=«right»>».$rw["trf"].» РњР‘ </td>
</tr>
</table>
В скрипт не приходит переменная name.
И в самом скрипте она неопределена.
ткни пожалуйста носом :(
Интерпретатор PHP перед выполнением проверяет все ли переменные определены, если нет выдаёт ошибку.
$HTTP_GET_VARS["month"] — эта конструкция используется в PHP5 и означает, что по протоколу HTTP методом GET сценарию передаётся переменная $month. Это связано с безопасностью.
Так вот сценарий вызывается с какими-то параметрами,среди которых и должна находиться переменная $month.
Её нет.
PHP какой версии?
5-й, пример был скопипастен и немного переделан с инета, концов ужен не найду. Я так и не понял где и как её объявлять :(
<form action=«script.php» method=«get»>
<input name=«month» type=«text» size=«40»>
<\form>
Eto primer formi,esli v dannoe tekstovoe pole chto-nibud' vvesti i nazhat' «Enter», to soderjimoe etogo polya budet prisvoeno peremennoy s imenem $month i otpravleno metodom GET scenariyu «script.php». Viglyadet' budet primerno tak:
www.bla-bla.org/script.php?month=chto-nibud'
Tvoi skript izvlekaet peremennuyu i ispolzuet.
Na praktike etogo ne proishodit.
</form>
В тексте ошибки же все написано: undefined index — неопределенный индекс (именованного массива). В данном случае это, например, $HTTP_GET_VARS (индекс «month») — вот этот элемент массива не определен. Либо надо как-то проверять, что он определен, либо (если это не играет никакой роли), можно воспользоваться чудной штучкой «@»:
Собака не выход.
У неё,на мой взгляд 2 применения,при отладке,если написан только общий каркас и когда переменная(массив) определяются во время выполнения скрипта.
Если натыкать в коде @, будет выходом, тогда можно сценарий просто урезать.
Не надо говорить глупости. ЭЖта конструкция НЕ используется в PHP5. Она раньше использовалась. А теперь используется конструкция вида $_GET["month"].
http://ru2.php.net/manual/ru/reserved.variables.post.php
Дима, я тебя уважаю за твою деятельность, но никогда никому такое не советуй. Ошибки надо обрабатывать, а ставить собаку — прятать голову в песок.
Согласен. Для этого и написал «если это не играет никакой роли», и указал этот «способ» вторым, надеясь на сознательность автора. Вопрос ведь был конкретно о сообщениях в логах ;-)
Ага :)
Вот стоять над головой пых-пых шкодера с молотком, и отрабатывать, отрабатывать, отрабатывать…
Вы по видимому мало знакомы с программированием. Язык тут не причём, а обработка (ну или перехват) ошибок — обычная практика.
Увы, я слишком хорошо знаком с реалиями программирования:
«Работает? И хорошо. Ошибки? Хрен с ними.»
почему-то у многие кто пишут на пхп на это задвигают, в отличие от пишущих на чем-то другом. Сталкивался.
А это уже иногда суровая производственная необходимость. Никогда не встречал программу с логикой на exception’ах? :)
До оператора if можно сделать обработку вида if($_GET['mounth']==»){$_GET['mounth']=»;}
и еще в php «;» не обязательна после последовательности дийствий.