Notice : Undefined Offset ??? [Resolu]

Notice : Undefined Offset ??? [Resolu] - PHP - Programmation

Marsh Posté le 26-02-2005 à 13:24:31    

Bonjour,
voila sous easyphp 1.7 g des notices qui reviennent sur toute une serie de comparaison de chaine depuis un log unicode, je me doute que ce notice provient d un array mais je ne pige pas pk, et ce que c reellement...
 
Voila par ex un bout de code ou juste g un notice :
 

Code :
  1. if ($CurrentFile = file('Backup_Logs/' . $temp))
  2. {
  3.   $Game = new LogParsed( $temp);
  4.  for ( $i=0; $i < count( $CurrentFile); $i++)
  5.  {
  6.   $Ligne       = explode( chr(9), $CurrentFile[ $i]);
  7.   //===== INFO ====
  8.   if (strcasecmp( $Ligne[1], 'Info')==0 and
  9.     strcasecmp( $Ligne[2], 'Absolute_Time')==0)
  10.   {
  11.    $Game->AbsoluteTime = $ligne[3];
  12.   }


 
G un notice sur le "if strcasecmp( $Ligne[1] " .....
 
Une idee ? Merci


Message édité par mkracing66 le 26-02-2005 à 20:38:10
Reply

Marsh Posté le 26-02-2005 à 13:24:31   

Reply

Marsh Posté le 26-02-2005 à 13:47:40    

Ca serait super d'avoir le texte du notice pour pas parler dans le vide à partir de supositions tiré d'une boule de christal.

Reply

Marsh Posté le 26-02-2005 à 14:07:12    

et sors le count de ta boucle, pas besoin de la calculer a chaque fois...


---------------
Nos estans firs di nosse pitite patreye...
Reply

Marsh Posté le 26-02-2005 à 15:56:53    

omega2 a écrit :

Ca serait super d'avoir le texte du notice pour pas parler dans le vide à partir de supositions tiré d'une boule de christal.


 
j'aime bien la reponse un peu aggressive ou un peu foutage de gueule alors voila le message entier histoire de montrer que c ni une supposition ni du nostradamus powa :
Notice: Undefined offset: 1 in ..\easyphp\blablablabla on line 166
(and now look teh topic's title :whistle: )
 
Bon a priori il doit y avoir une couille dans le potage au niveau de la lecture du fichier peut etre, car si y a un pb avec $Ligne[1], c surement qu il ne trouve aucune valeur...

Reply

Marsh Posté le 26-02-2005 à 15:57:48    

KangOl a écrit :

et sors le count de ta boucle, pas besoin de la calculer a chaque fois...


 
ok c note, merci bien :)

Reply

Marsh Posté le 26-02-2005 à 15:59:24    

fait un print_r de $Ligne pour voir sont contenu...


---------------
Nos estans firs di nosse pitite patreye...
Reply

Marsh Posté le 26-02-2005 à 16:08:53    

if (isset($Ligne[1])){
// la case du tableau existe
}else{
// la case n'esiste pas, et si on utilise $Ligne[1] là dedans, on a le fameux "notice"
}
 
Si t'as eu ce notice, c'est par ce que le php.ini est réglé pour afficher aussi ce genre de notice et pas uniquement les erreurs.


Message édité par omega2 le 26-02-2005 à 16:09:53
Reply

Marsh Posté le 26-02-2005 à 17:04:43    

omega2 a écrit :

if (isset($Ligne[1])){
// la case du tableau existe
}else{
// la case n'esiste pas, et si on utilise $Ligne[1] là dedans, on a le fameux "notice"
}
 
Si t'as eu ce notice, c'est par ce que le php.ini est réglé pour afficher aussi ce genre de notice et pas uniquement les erreurs.


 
Ce que je trouve pour ma part finalement très pratique une fois qu'on s'y est habitué.  


---------------
Expert en expertises
Reply

Marsh Posté le 26-02-2005 à 18:52:03    

Moi aussi, et ca réduit grandement les risques de production de code potentiellement peu sécurisé. Mais c'est sur que ca force à faire attention au code, par ce que le moindre écart et c'est un beau "notice" qui apparait. :lol:

Reply

Marsh Posté le 26-02-2005 à 18:54:30    

oui je suis au courant de ca, je veux justement etre en E_ALL...

Reply

Marsh Posté le 26-02-2005 à 18:54:30   

Reply

Marsh Posté le 26-02-2005 à 19:02:07    

Bonne résolution, comme ça, tu produiras du code bien plus propre que ce qu'on voit parfois. :)

Reply

Marsh Posté le 26-02-2005 à 19:10:06    

Je reviens sur mon pb, que g vraiment delaisse cet aprem a cause du rugby :) , mais g beau mettre des print_r de partout, il m affiche bien les infos de mes tableaux EN PARTICULIER APRES LE EXPLODE.
 
Pourtant des qu il y a le bloc suivant, g un notice undefined offset :'(
 
if (strcasecmp( $Ligne[1], 'Info')==0 and
    strcasecmp( $Ligne[2], 'Absolute_Time')==0)

Reply

Marsh Posté le 26-02-2005 à 19:16:06    

Cela pourrait il venir du fait que mon fichier est un fichier unicode ?
 
[Edit:] on dirait que oui, qqun connait il une procedure rapide et facile pour parser tout le fichier unicode histoire de remplacer les caracteres speciaux, ou de le transformer dans une sorte de fichier textes "standard" ?


Message édité par mkracing66 le 26-02-2005 à 19:17:55
Reply

Marsh Posté le 26-02-2005 à 19:17:18    

print_r $Ligne;
te retourne bien 1=>'Info' et 2=>'Absolute_Time'? (ou d'autres mots mais bien avec les index 1 et 2)

Reply

Marsh Posté le 26-02-2005 à 19:23:51    

a priori Oui (cf ma reponse precedente)


Message édité par mkracing66 le 26-02-2005 à 19:24:08
Reply

Marsh Posté le 26-02-2005 à 19:31:21    

Bizare. Et il y a aucune ligne du fichier pour lequel il manquerait une donnée dans la variable tableau? D'aprés le message, ca devrait mais tu dis le contraire alors c'est bizare comme truc.

Reply

Marsh Posté le 26-02-2005 à 20:00:05    

un strcasecmp ne fonctionne pas a priori entre ma chaine recupere du fichier unicode et ma chaine de comparaison qd je parse :(
 
Une idee ?

Reply

Marsh Posté le 26-02-2005 à 20:06:39    

essaye un

Code :
  1. if(trim(strtolower($Ligne[0]))=="info" and trim(strtolower($Ligne[1])) =="absolute_time" )


---------------
Nos estans firs di nosse pitite patreye...
Reply

Marsh Posté le 26-02-2005 à 20:26:40    

ne change rien, tjs notice undefined offset, et n arrive pas a entrer dans la condition
 
G donc un gros pb du a l unicode :/

Reply

Marsh Posté le 26-02-2005 à 20:36:13    

Mon probleme etait encore plus profond que cela...car en fait c etait de n unicode 16bt
 
G donc trouve cette petite fonction dans un des commentaires de php.net
Ca marche nickel chrome donc on ne sait jamais ca pourra tjs aider qqun
 

Code :
  1. function utf16_decode( $str ) {
  2.    if( strlen($str) < 2 ) return $str;
  3.    $bom_be = true;
  4.    $c0 = ord($str{0});
  5.    $c1 = ord($str{1});
  6.    if( $c0 == 0xfe && $c1 == 0xff ) { $str = substr($str,2); }
  7.    elseif( $c0 == 0xff && $c1 == 0xfe ) { $str = substr($str,2); $bom_be = false; }
  8.    $len = strlen($str);
  9.    $newstr = '';
  10.    for($i=0;$i<$len;$i+=2) {
  11.        if( $bom_be ) { $val = ord($str{$i})  << 4; $val += ord($str{$i+1}); }
  12.        else {        $val = ord($str{$i+1}) << 4; $val += ord($str{$i}); }
  13.        $newstr .= ($val == 0x228) ? "\n" : chr($val);
  14.    }
  15.    return $newstr;
  16. }


Message édité par mkracing66 le 26-02-2005 à 22:28:46
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed