phpAnonyme
Messages postés392Date d'inscriptionmercredi 28 octobre 2009StatutMembreDernière intervention23 mars 201255 8 nov. 2011 à 02:05
#rtrim()
Je connais, c'est surtout qu'il fallait y penser ! Il y a des tas de fonctions qui se ressemblent...
Après cela ne joue pas de manière significative sur les performances sur code. Donc bon à savoir pour certains peut-être, mais pas grand intérêt sur le fond du problème avec le code d'origine.
cs_emilia123
Messages postés122Date d'inscriptionmercredi 19 décembre 2001StatutMembreDernière intervention 5 janvier 2009 7 nov. 2011 à 07:08
Bonjour,
Voici un petit "tips" qui peut servir assez souvent surtout dans la concaténation comme ici.
Ici :
# //on enlève le dernier "&" des paramètres
# $param=preg_replace("#&$#", "", $param);
ou meme ici, dans le commentaire de "phpAnonyme":
$set_url .= >>>>(!empty($set_url) ? '&' : '')<<<<....;
On peut tout simplement utiliser l'une des 3 fonctions suivantes (en fonction de la situation):
- trim(...)
- ltrim(...)
- rtrim(...)
Peu de gens savent que l'on peut passer, à ces fonctions, un paramètres supplémentaires indiquant la liste des caractères à supprimer en fin et/ou début de chaine.
$param=preg_replace("#&$#", "", $param);
devient simplement :
$param=rtrim($param, '&');
Du coup on n'est pas obligé de faire des tests à chaque boucle. On ajoute à chaque boucle sans se poser de question, et on fait un trim à la fin pour supprimer les éléments aux extrémités.
EM
TychoBrahe
Messages postés1309Date d'inscriptionsamedi 31 janvier 2009StatutMembreDernière intervention 5 juin 201312 31 oct. 2011 à 15:52
Salut,
Et si par exemple on utilise du https ou du ftp on fais comment ? Ha tu vous retourne une fausse url...
Sinon je n'ai que survolé car la quantité de commentaires inutiles (et bourrés de fautes) ainsi que la grosse lourdeur du code m'a un peu découragé. Allez, avec juste quelques fonctions sur les tableaux tu économises un grand nombre de lignes et fais maigrir ton code de 70% minimum. Comme l'a dit phpAnonyme avant moi : tu te compliques la vie !
phpAnonyme
Messages postés392Date d'inscriptionmercredi 28 octobre 2009StatutMembreDernière intervention23 mars 201255 30 oct. 2011 à 23:37
phpAnonyme
Messages postés392Date d'inscriptionmercredi 28 octobre 2009StatutMembreDernière intervention23 mars 201255 30 oct. 2011 à 23:31
1- Adresse absolue ? donc faut pas utiliser GET en dure, mais bien ce qui semble avoir été passé en paramètres. GET peut être ajouter/modifier/supprimer en dure dans le script; tu peux te trouver avec des données non passé en URL => conséquence en autres boucles supplémentaires, etc, etc
2- Pas besoin de faire deux boucles pour ça
3- Pas assez de protection sur les superGlobal $_SERVER
4- Tu te compliques trop la vie notamment avec ton compteur de boucle...
/*
$displayVars = boolean, affichage ou non des valeurs passés en paramètres
$excludeVars = array or boolean false, valeurs à exclure
*/function parsor($displayVars true, $excludeVars false)
{
$Uri='http://'.htmlspecialchars($_SERVER['HTTP_HOST'], ENT_COMPAT, 'UTF-8').htmlentities($_SERVER['PHP_SELF']);
$parsed_url = parse_url( htmlentities($_SERVER['REQUEST_URI']) );
if(!$displayVars OR empty($parsed_url['query']))
return $Uri;
if(!$excludeVars Or !is_array($excludeVars))
return $Uri.'?'.$parsed_url['query'];
8 nov. 2011 à 02:05
Je connais, c'est surtout qu'il fallait y penser ! Il y a des tas de fonctions qui se ressemblent...
Après cela ne joue pas de manière significative sur les performances sur code. Donc bon à savoir pour certains peut-être, mais pas grand intérêt sur le fond du problème avec le code d'origine.
7 nov. 2011 à 07:08
Voici un petit "tips" qui peut servir assez souvent surtout dans la concaténation comme ici.
Ici :
# //on enlève le dernier "&" des paramètres
# $param=preg_replace("#&$#", "", $param);
ou meme ici, dans le commentaire de "phpAnonyme":
$set_url .= >>>>(!empty($set_url) ? '&' : '')<<<<....;
On peut tout simplement utiliser l'une des 3 fonctions suivantes (en fonction de la situation):
- trim(...)
- ltrim(...)
- rtrim(...)
Peu de gens savent que l'on peut passer, à ces fonctions, un paramètres supplémentaires indiquant la liste des caractères à supprimer en fin et/ou début de chaine.
$param=preg_replace("#&$#", "", $param);
devient simplement :
$param=rtrim($param, '&');
Du coup on n'est pas obligé de faire des tests à chaque boucle. On ajoute à chaque boucle sans se poser de question, et on fait un trim à la fin pour supprimer les éléments aux extrémités.
EM
31 oct. 2011 à 15:52
Et si par exemple on utilise du https ou du ftp on fais comment ? Ha tu vous retourne une fausse url...
Sinon je n'ai que survolé car la quantité de commentaires inutiles (et bourrés de fautes) ainsi que la grosse lourdeur du code m'a un peu découragé. Allez, avec juste quelques fonctions sur les tableaux tu économises un grand nombre de lignes et fais maigrir ton code de 70% minimum. Comme l'a dit phpAnonyme avant moi : tu te compliques la vie !
30 oct. 2011 à 23:37
$parsed_url = parse_url( htmlentities($_SERVER['REQUEST_URI']) );
#Par :
$parsed_url = parse_url( strip_tags($_SERVER['REQUEST_URI']) );
30 oct. 2011 à 23:31
2- Pas besoin de faire deux boucles pour ça
3- Pas assez de protection sur les superGlobal $_SERVER
4- Tu te compliques trop la vie notamment avec ton compteur de boucle...
/*
$displayVars = boolean, affichage ou non des valeurs passés en paramètres
$excludeVars = array or boolean false, valeurs à exclure
*/function parsor($displayVars true, $excludeVars false)
{
$Uri='http://'.htmlspecialchars($_SERVER['HTTP_HOST'], ENT_COMPAT, 'UTF-8').htmlentities($_SERVER['PHP_SELF']);
$parsed_url = parse_url( htmlentities($_SERVER['REQUEST_URI']) );
if(!$displayVars OR empty($parsed_url['query']))
return $Uri;
if(!$excludeVars Or !is_array($excludeVars))
return $Uri.'?'.$parsed_url['query'];
$set_url = '';
$tempA = explode('&', $parsed_url['query']);
if(sizeof($tempA))
{
foreach($tempA AS $keyA => $valA)
{
$tempB = explode('=', $valA);
if(!in_array($tempB[0], $excludeVars))
$set_url .= (!empty($set_url) ? '&' : '').$tempB[0].'='.$tempB[1];
}
}
return $Uri.'?'.(empty($set_url) ? $parsed_url['query'] : $set_url);
}