Accueil Forum -> Techno Geek -> Programmation  >>  PHP - Notice: Undefined offset: X in /var/www/…
1 messages
Accueil Forum -> Techno Geek -> Programmation  >>  PHP - Notice: Undefined offset: X in /var/www/…
1 messages

PHP - Notice: Undefined offset: X in /var/www/…

25 octobre 2016 à 13:46 MetalTux    
Salut

j'ai un script en PHP qui doit faire des stats à la con depuis un fichier de logs de serveurs web, dont les 5 fichiers les plus demandés, et les IP des machines qui les ont demandés
Mais j'ai quelques erreurs qui commencent à me gonfler… Donc, voilà le résultat du script avec les messages d'erreurs


Résultat a écrit:

Notice: Undefined offset: 3 in /var/www/html/php/logs/logs.php on line 24
Notice: Undefined offset: 3 in /var/www/html/php/logs/logs.php on line 26
Notice: Undefined offset: 1 in /var/www/html/php/logs/logs.php on line 29
Notice: Undefined offset: 1 in /var/www/html/php/logs/logs.php on line 33
Notice: Undefined offset: 2 in /var/www/html/php/logs/logs.php on line 36
Notice: Undefined offset: 2 in /var/www/html/php/logs/logs.php on line 38

Les fichiers les plus demandés:
/schle005/accueil.html = 52
/galic005/afficher.php = 49
/pierr157/login.php = 46
/galic005/login.php = 44
/masso055/login.php = 40

Nombre de requêtes = 1320
Quantité totale des données = 348296
[citation nom]

La tête de mon fichiers logs.txt ressemble à peu près à ça

[citation nom=Fichiers Logs]
IP - - [Date:Heure +0000] "GET /url/vers/un/fichier HTTP/1.1" <HTTP_status_code> <nombre_octets_transférés>
IP - - [Date:Heure +0000] "POST /url/vers/un/autre/ HTTP/1.0" <HTTP_status_code> <nombre_octets_transférés>



Et enfin mon code PHP

logs.php a écrit:

<!DOCTYPE html>
<html>
<head>
<title>Logs : statistiques</title>
<meta http-equiv="content-type" content="text/html; charset=utf-8" />
<body>

<?php

$pattern='#^([^ ]+) [^"]+"[^/]+(/[^ ]*) .+ ([0-9]+|-)$#';
$requestnbr=0;
$transfereddata=0;
$tab=array();
$tabrequest=array();

$logsfile = fopen("log.txt","r");
while(! feof($logsfile))
{
$logs=fgets($logsfile);
$requestnbr++;

preg_match($pattern, $logs, $output);

if ($output[3] != "-")
{
$transfereddata += $output[3];
}

if (isset($tab[$output[1]])) {
$tab[$output[1]]++;
}
else {
$tabrequest[$output[1]]=1; /*Si variable vide, on fixe arbitrairement sur un, pour le debug*/
}

if (isset($tabrequest[$output[2]]))
{
$tabrequest[$output[2]]++;
}
else {
$tabrequest[$output[2]]=1;
}

}


echo "<br>Les fichiers les plus demandés: <br>";
arsort($tabrequest);
$i=0;
foreach ($tabrequest as $key => $val) {

if($i<5) {
echo "$key = $val<br>";
$i++;
}
else break;

}

/* echo "<br>Machines ayant demandé les fichiers : <br>"; */

echo "<br><br>";
echo "Nombre de requetes = $requestnbr<br>";
echo "Quantité totale des données = $transfereddata<br>";

fclose($logsfile);
?>

</body>
</head>


La grande question étant c'est quoi exactement l'erreur "Undefined offset" et comment résoudre le problème?

PS : J'ai fais très peu de PHP, j'ai avaiy pas retouché depuis 2 ans et je hais ce langage (d'autant plus que
je suis pas développeur web à la base… mais passons ) donc pour les explications, merci de simplifier au maximum, comme quand on s'adresse à quelqu'un qui n'a jamais touché un ordinateur en fait