J'aimerais savoir coment je peux capturer une exception comme celle
là:
Warning: stristr(): Empty delimiter in C:\Users\Jean Pierre\Desktop
\doublons.php on line 37
Elle proviendrait du fait que à un moment , y = rien
--------------------------
$max = count($inLibrairies);
$premier = $inLibrairies[$clefs];
$x = strripos ($premier, "\\") + 1;
$y = strripos ($premier, ".");
$librairie = trim(substr($premier, $x, $y));
Attention, tu as potentiellement le problème ici aussi : si ta chaîne ne contient aucun « », FALSE+1 donnera 1, ce qui supprimera le premier caractère. Note au passage qu'il est inutile de demander une recherche insensible à la casse de caractères qui ne sont pas des lettres.
Mais ceci peut cacher d'autres problèmes. Par exemple, si le dernier « » se trouve *après* le dernier « . », tu vas te retrouver avec un $x plus grand que $y !
Attention, tu as potentiellement le problème ici aussi : si ta chaîne ne
contient aucun « », FALSE+1 donnera 1, ce qui supprimera le premier
caractère. Note au passage qu'il est inutile de demander une recherche
insensible à la casse de caractères qui ne sont pas des lettres.
Mais ceci peut cacher d'autres problèmes. Par exemple, si le dernier
« » se trouve *après* le dernier « . », tu vas te retrouver avec un
$x plus grand que $y !
Attention, tu as potentiellement le problème ici aussi : si ta chaîne ne contient aucun « », FALSE+1 donnera 1, ce qui supprimera le premier caractère. Note au passage qu'il est inutile de demander une recherche insensible à la casse de caractères qui ne sont pas des lettres.
Mais ceci peut cacher d'autres problèmes. Par exemple, si le dernier « » se trouve *après* le dernier « . », tu vas te retrouver avec un $x plus grand que $y !
// S'il y a au moins un '' on supprime tout jusqu'au dernier '' $librairie = preg_replace('/.*/', '', $premier);
// S'il y a au moins un '.', on supprime tout à partir du dernier '.' $librairie = preg_replace('/.[^.]*/', '', $librairie);
// Supprime d'éventuels espaces résiduels au début et à la fin $librairie = trim($librairie); ...
Cordialement, -- Olivier Miakinen
Pascal PONCET
j4e8a16n a écrit :
J'aimerais savoir coment je peux capturer une exception comme celle là: Warning: stristr(): Empty delimiter in C:UsersJean PierreDesktop doublons.php on line 37
Bonsoir,
Comme toutes les anciennes fonctions de PHP, stristr() ne supporte pas le mécanisme d'exception mais seulement la gestion d'erreur.
Si besoin est, on peut malgré tout déclencher des exceptions à partir des erreurs par l'intermédiaire de la classe ErrorException. Voir : http://fr.php.net/manual/en/class.errorexception.php
Cordialement, Pascal
j4e8a16n a écrit :
J'aimerais savoir coment je peux capturer une exception comme celle
là:
Warning: stristr(): Empty delimiter in C:UsersJean PierreDesktop
doublons.php on line 37
Bonsoir,
Comme toutes les anciennes fonctions de PHP, stristr() ne supporte pas
le mécanisme d'exception mais seulement la gestion d'erreur.
Si besoin est, on peut malgré tout déclencher des exceptions à partir
des erreurs par l'intermédiaire de la classe ErrorException.
Voir : http://fr.php.net/manual/en/class.errorexception.php
J'aimerais savoir coment je peux capturer une exception comme celle là: Warning: stristr(): Empty delimiter in C:UsersJean PierreDesktop doublons.php on line 37
Bonsoir,
Comme toutes les anciennes fonctions de PHP, stristr() ne supporte pas le mécanisme d'exception mais seulement la gestion d'erreur.
Si besoin est, on peut malgré tout déclencher des exceptions à partir des erreurs par l'intermédiaire de la classe ErrorException. Voir : http://fr.php.net/manual/en/class.errorexception.php
// S'il y a au moins un '' on supprime tout jusqu'au dernier '' $librairie = preg_replace('/.*/', '', $premier);
// S'il y a au moins un '.', on supprime tout à partir du dernier '.' $librairie = preg_replace('/.[^.]*/', '', $librairie);
// Supprime d'éventuels espaces résiduels au début et à la fin $librairie = trim($librairie); ...
Voici un code un peu plus compact répondant à la même problématique. Les deux ne sont pas strictement équivalents, mais je parierais que les résultats seront les mêmes dans tous les cas « réels », c'est-à_dire : - s'il n'y a jamais de caractères nuls ou de tabulations verticales ; - s'il n'y a jamais de blancs (espaces et autres) juste après le dernier antislash ou juste avant le dernier point.
Pour le cas où il y aurait besoin de fournir des explications concernant ces expressions rationnelles, je propose un suivi vers le groupe fr.comp.lang.regexp.
// S'il y a au moins un '' on supprime tout jusqu'au dernier ''
$librairie = preg_replace('/.*\/', '', $premier);
// S'il y a au moins un '.', on supprime tout à partir du dernier '.'
$librairie = preg_replace('/.[^.]*/', '', $librairie);
// Supprime d'éventuels espaces résiduels au début et à la fin
$librairie = trim($librairie);
...
Voici un code un peu plus compact répondant à la même problématique.
Les deux ne sont pas strictement équivalents, mais je parierais que les
résultats seront les mêmes dans tous les cas « réels », c'est-à_dire :
- s'il n'y a jamais de caractères nuls ou de tabulations verticales ;
- s'il n'y a jamais de blancs (espaces et autres) juste après le dernier
antislash ou juste avant le dernier point.
Pour le cas où il y aurait besoin de fournir des explications concernant
ces expressions rationnelles, je propose un suivi vers le groupe
fr.comp.lang.regexp.
// S'il y a au moins un '' on supprime tout jusqu'au dernier '' $librairie = preg_replace('/.*/', '', $premier);
// S'il y a au moins un '.', on supprime tout à partir du dernier '.' $librairie = preg_replace('/.[^.]*/', '', $librairie);
// Supprime d'éventuels espaces résiduels au début et à la fin $librairie = trim($librairie); ...
Voici un code un peu plus compact répondant à la même problématique. Les deux ne sont pas strictement équivalents, mais je parierais que les résultats seront les mêmes dans tous les cas « réels », c'est-à_dire : - s'il n'y a jamais de caractères nuls ou de tabulations verticales ; - s'il n'y a jamais de blancs (espaces et autres) juste après le dernier antislash ou juste avant le dernier point.
Pour le cas où il y aurait besoin de fournir des explications concernant ces expressions rationnelles, je propose un suivi vers le groupe fr.comp.lang.regexp.
Cordialement, -- Olivier Miakinen
Olivier Miakinen
Le 12/03/2009 18:50, je m'étais trompé :
// S'il y a au moins un '.', on supprime tout à partir du dernier '.' $librairie = preg_replace('/.[^.]*/', '', $librairie);
Ici, il faut « ancrer » l'expression rationnelle sur la fin de la chaîne (alors que ce n'était pas nécessaire pour la précédente) :