nixp.ru v3.0

21 октября 2017,
суббота,
11:37:28 MSK

DevOps с компанией «Флант»
Аватар пользователя splinter
splinter написал 23 ноября 2008 года в 18:49 (630 просмотров) Ведет себя как четкий пацан; открыл 134 темы в форуме, оставил 1458 комментариев на сайте.

Привет всем, в пыхпыхе не силен, использую скрипт для отображения статистики 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>&nbsp;».$rw["ip"]."&nbsp;</td>
<td align=«right»>&nbsp;».gethostbyaddr($rw["ip"])."&nbsp;</td>
<td align=«right»>».$rw["trf"].» РњР‘&nbsp;</td>
</tr>
<tr>
<td colspan=«2»>&nbsp;Р&#152;того:</td>
<td align=«right»>&nbsp;«.$extwwwtrf.» РњР‘&nbsp;</td>
</tr>
<tr>
<td colspan=«3» align=«center» bgcolor=«#DDFFDD»>Статистика РїСЂРѕРєСЃРё-кэша Р·Р° $cur_month:</td>
</tr>
<tr>
<td colspan=«2»>&nbsp;Скачано локально:</td>
<td align=«right»>&nbsp;$locwwwtrf РњР‘&nbsp;</td>
</tr>
<tr>
<td colspan=«2»>&nbsp;Скачано РёР· интернета:</td>
<td align=«right»>&nbsp;$extwwwtrf РњР‘&nbsp;</td>
</tr>
<tr>
<td colspan=«2»>&nbsp;Сэкономлено системой:</td>
<td align=«right»>&nbsp;$econtrf РњР‘&nbsp;</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’>&nbsp;&copy;&nbsp;<a href=’mailto:user@mail.ru’>РћРћРћ РќРћРљ</a>,&nbsp;2008.&nbsp;</td>
</tr>
</table>
»;

?>

// Тему переместил(а) Dmitry Shurupov из форума «UNIX FAQ: вопросы по UNIX/Linux».

splinter

сам скрипт вроде отрабатывает но ошибки напрягают, подскажите можно ли поправить?

splinter

По строкам:

if ($HTTP_GET_VARS["month"]==«list»)  { 6-я

if ($HTTP_GET_VARS["month"]=="») { 17-я
»; 27-я

  $otherlink="$Другой месяц$»; — 44-я
<table>
<tr color="">
<td>&nbsp;».$rw["ip"]."&nbsp;</td>
<td align=«right»>&nbsp;».gethostbyaddr($rw["ip"])."&nbsp;</td>
<td align=«right»>».$rw["trf"].» РњР‘&nbsp;</td>
</tr>
</table>

REDkiy

В скрипт не приходит переменная name.

И в самом скрипте она неопределена.

splinter

ткни пожалуйста носом :(

REDkiy

Интерпретатор PHP перед выполнением проверяет все ли переменные определены, если нет выдаёт ошибку.

$HTTP_GET_VARS["month"] — эта конструкция используется в PHP5 и означает, что по протоколу HTTP методом GET сценарию передаётся переменная $month. Это связано с безопасностью.

Так вот сценарий вызывается с какими-то параметрами,среди которых и должна находиться переменная $month.

Её нет.

PHP какой версии?

splinter
PHP какой версии?


5-й, пример был скопипастен и немного переделан с инета, концов ужен не найду. Я так и не понял где и как её объявлять :(

REDkiy

<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») — вот этот элемент массива не определен. Либо надо как-то проверять, что он определен, либо (если это не играет никакой роли), можно воспользоваться чудной штучкой «@»:

echo $var; // будет ругаться, если var не определена
@echo $var; // не будет ругаться
REDkiy

Собака не выход.

У неё,на мой взгляд 2 применения,при отладке,если написан только общий каркас и когда переменная(массив) определяются во время выполнения скрипта.

Если натыкать в коде @, будет выходом, тогда можно сценарий просто урезать.

Ulysses
REDkiy
$HTTP_GET_VARS["month"] — эта конструкция используется в PHP5 и означает, что по протоколу HTTP методом GET сценарию передаётся переменная $month. Это связано с безопасностью.

Не надо говорить глупости. ЭЖта конструкция НЕ используется в PHP5. Она раньше использовалась. А теперь используется конструкция вида $_GET["month"].

http://ru2.php.net/manual/ru/reserved.variables.post.php

Ulysses
Dmitry Shurupov
В тексте ошибки же все написано: undefined index — неопределенный индекс (именованного массива). В данном случае это, например, $HTTP_GET_VARS (индекс «month») — вот этот элемент массива не определен. Либо надо как-то проверять, что он определен, либо (если это не играет никакой роли), можно воспользоваться чудной штучкой «@»:

echo $var; // будет ругаться, если var не определена
@echo $var; // не будет ругаться

Дима, я тебя уважаю за твою деятельность, но никогда никому такое не советуй. Ошибки надо обрабатывать, а ставить собаку — прятать голову в песок.

Дмитрий Шурупов

Согласен. Для этого и написал «если это не играет никакой роли», и указал этот «способ» вторым, надеясь на сознательность автора. Вопрос ведь был конкретно о сообщениях в логах ;-)

Anarchist
Ulysses
Ошибки надо обрабатывать, а ставить собаку — прятать голову в песок.

Ага :)

Вот стоять над головой пых-пых шкодера с молотком, и отрабатывать, отрабатывать, отрабатывать…

Ulysses
Anarchist
Ага :)

Вот стоять над головой пых-пых шкодера с молотком, и отрабатывать, отрабатывать, отрабатывать…

Вы по видимому мало знакомы с программированием. Язык тут не причём, а обработка (ну или перехват) ошибок — обычная практика.

Anarchist
Ulysses
Вы по видимому мало знакомы с программированием. Язык тут не причём, а обработка (ну или перехват) ошибок — обычная практика.

Увы, я слишком хорошо знаком с реалиями программирования:

«Работает? И хорошо. Ошибки? Хрен с ними.»

Code Monkey
Ulysses
Вы по видимому мало знакомы с программированием. Язык тут не причём, а обработка (ну или перехват) ошибок — обычная практика.

почему-то у многие кто пишут на пхп на это задвигают, в отличие от пишущих на чем-то другом. Сталкивался.

Code Monkey
Anarchist
Увы, я слишком хорошо знаком с реалиями программирования:

«Работает? И хорошо. Ошибки? Хрен с ними.»

А это уже иногда суровая производственная необходимость. Никогда не встречал программу с логикой на exception’ах? :)

ckjet

До оператора if можно сделать обработку вида if($_GET['mounth']==»){$_GET['mounth']=»;}

и еще в php «;» не обязательна после последовательности дийствий.