Précédent   Forum du club des développeurs et IT Pro > PHP > PHP & SGBD > PHP & MySQL
PHP & MySQL Forum d'entraide sur les fonctions MySQL avec PHP. Avant de poster -> FAQ MySQL, Cours MySQL et Sources MySQL. Pour les questions concernant le moteur MySQL plutôt que les fonctions PHP, merci d'utiliser le forum MySQL.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse
 
Outils de la discussion
Publicité
'
Vieux 12/01/2004, 13h37   #41
Tuxxy
Nouveau Membre du Club
 
Inscription : janvier 2003
Messages : 44
Détails du profil
Informations forums :
Inscription : janvier 2003
Messages : 44
Points : 38
Points : 38
Ok j'avais pas vu ca comme ca mais ca peut etre intéressant
Tuxxy est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/01/2004, 17h56   #42
Tuxxy
Nouveau Membre du Club
 
Inscription : janvier 2003
Messages : 44
Détails du profil
Informations forums :
Inscription : janvier 2003
Messages : 44
Points : 38
Points : 38
Par défaut Re: Another

Citation:
Envoyé par Dozer
On peut ainsi utiliser directement les variables, en plus on utilise un mysql_fetch_row au lieu d'un
mysql_fetch_array
Oui mais il n'y a quasiment aucune différence. Le manuel le rapelle bien, la fonction mysql_fetch_array est aussi rapide que mysql_fetch_row (mtsql_fetch_row est un cas particulier de mysql_fetch_array avec result_type à MYSQL_NUM).
Tuxxy est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/01/2004, 20h33   #43
iubito
Membre éclairé
 
Avatar de iubito
 
Homme Sylvain Machefert
Développeur Java
Inscription : janvier 2003
Messages : 380
Détails du profil
Informations personnelles :
Nom : Homme Sylvain Machefert
Âge : 30
Localisation : France, Haute Loire (Auvergne)

Informations professionnelles :
Activité : Développeur Java
Secteur : Finance

Informations forums :
Inscription : janvier 2003
Messages : 380
Points : 321
Points : 321
Pendant mes longues heures sans internet, j'ai créé un bench

http://iubito.developpez.com/php/bench.php

Au programme :
- Guillemets et apostrophes dans les chaînes
- while (list($key,$value) = each($array)) ou foreach ?
- $array['key'] - $array[key]
- str_replace : plusieurs appels ou avec des tableaux ?
- Application 1 : enlever les accents
- file_exists ou is_file ?

et possibilité de voir la source du bench.php, faites un copier/coller et testez sur votre ordi pour voir si les résultats correspondent aux miens. Vous aurez pas forcément la même vitesse de calcul, mais vous devez normalement arriver aux même conclusions que moi ("untel + rapide que l'autre"...)

Perso ma config est un AMD XP2400+ avec 1Go de RAM donc ça trace pas trop mal
__________________
Lé SMS cé kom lé ognon, sa pike lé yeu
iubito est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/01/2004, 21h05   #44
Tuxxy
Nouveau Membre du Club
 
Inscription : janvier 2003
Messages : 44
Détails du profil
Informations forums :
Inscription : janvier 2003
Messages : 44
Points : 38
Points : 38
Youpi! C'est vraiment génial ^^
Beaucoup de choses étaient prévisibles mais ton bench permet de voir dans quelle mesure cela influence sur les performances.
Je me posais aussi des questions sur le foreach ou while et bien la j'ai la réponse

merci!
Tuxxy est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/01/2004, 21h42   #45
iubito
Membre éclairé
 
Avatar de iubito
 
Homme Sylvain Machefert
Développeur Java
Inscription : janvier 2003
Messages : 380
Détails du profil
Informations personnelles :
Nom : Homme Sylvain Machefert
Âge : 30
Localisation : France, Haute Loire (Auvergne)

Informations professionnelles :
Activité : Développeur Java
Secteur : Finance

Informations forums :
Inscription : janvier 2003
Messages : 380
Points : 321
Points : 321
Si vous avez d'autres choses à tester dites-le moi, j'ai construit ce bench en relisant mes fonctions de mon projet, pour optimiser le bazar...
__________________
Lé SMS cé kom lé ognon, sa pike lé yeu
iubito est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/01/2004, 22h13   #46
Tuxxy
Nouveau Membre du Club
 
Inscription : janvier 2003
Messages : 44
Détails du profil
Informations forums :
Inscription : janvier 2003
Messages : 44
Points : 38
Points : 38
Au fait une question. Quand on utilise while avec un mysql_fetch_* :

while( $row = mysql_fetch_array($result_BDD) )

c'est pas la peine de mettre de each? Le mysql_fetch_array s'occupe du pointage?
Tuxxy est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/01/2004, 22h18   #47
iubito
Membre éclairé
 
Avatar de iubito
 
Homme Sylvain Machefert
Développeur Java
Inscription : janvier 2003
Messages : 380
Détails du profil
Informations personnelles :
Nom : Homme Sylvain Machefert
Âge : 30
Localisation : France, Haute Loire (Auvergne)

Informations professionnelles :
Activité : Développeur Java
Secteur : Finance

Informations forums :
Inscription : janvier 2003
Messages : 380
Points : 321
Points : 321
en fait il faut bien différencier le while et le foreach.
Tu peux faire un foreach sur un tableau ou sur quelque chose dont tu connais la longueur.

L'algo est :
Code :
1
2
3
POUR CHAQUE ELEMENT du tableau
   ...instructions...
FIN POUR CHAQUE
Le while execute tant qu'une condition est remplie.
while(true) boucle à l'infini puisque true (vrai) est toujours vrai.
Donc un while(mysql_fetch_*), il faut regarder que mysql_fetch_* renvoie quelque chose, ou renvoie null quand il n'a plus rien à renvoyer.
L'algo est :
Code :
1
2
3
TANT QUE mysql_fetch_ renvoie quelque chose (!= null)
   ...instructions...
FIN TANT QUE
Le fetch renvoie les lignes une à une donc tu ne sais pas au début combien il y a de lignes.
Tu peux faire un mysql_numrows pour avoir le nombre de résultat, mais un foreach ne marche pas puisque tu connais uniquement le nombre, tu n'a pas récupéré les infos.
__________________
Lé SMS cé kom lé ognon, sa pike lé yeu
iubito est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/03/2004, 23h31   #48
ermelir
Membre régulier
 
Homme Matthieu
Consultant informatique
Inscription : janvier 2003
Messages : 134
Détails du profil
Informations personnelles :
Nom : Homme Matthieu
Localisation : France, Nord (Nord Pas de Calais)

Informations professionnelles :
Activité : Consultant informatique
Secteur : High Tech - Multimédia et Internet

Informations forums :
Inscription : janvier 2003
Messages : 134
Points : 82
Points : 82
voila je fais un peu de pub mais j'ai realisé quelques tests sur certaines fonctions, notamment la lecture de fichier en local et a distance et le parcours de tableaux.
d'autres tests sont en cours de realisation, mais si deja il y en a que cela peut interesser ...
http://www.phplibrairies.com/index.p...1&tutorial=147
ermelir est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/03/2004, 20h31   #49
davidc2
Invité de passage
 
Inscription : février 2004
Messages : 3
Détails du profil
Informations forums :
Inscription : février 2004
Messages : 3
Points : 3
Points : 3
Citation:
Envoyé par iubito
Citation:
Envoyé par _Gabriel_
salut,

- les calculs répétés dans les boucles du style

Code :
for($i=0;$i<sizeof($arr);$i++)
ca c'est pas bon!!!
peux-tu préciser un peu, je capte pas là...
simplement, à chaque itération de la boucle, il doit tester la condition, donc re-calculer à chaque fois la taille du tableau. La suggestion est de ne le calculer qu'une seule fois et stoquer le résultat dans une variable. Ainsi on sait à quoi comparer à chaque fois, sans recompter le nombre d'éléments par sizeof
davidc2 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/03/2004, 17h28   #50
DgG
Invité régulier
 
Inscription : novembre 2003
Messages : 22
Détails du profil
Informations forums :
Inscription : novembre 2003
Messages : 22
Points : 7
Points : 7
Envoyer un message via ICQ à DgG Envoyer un message via AIM à DgG Envoyer un message via MSN à DgG
Un truck aussi, faut essayer de rapprocher le plus possible le mysql_connect du mysql_close.

Moi par exemple, ca se connecte au debut puis ca se ferme avant d'envoyer du html (dans h_page.php)
DgG est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/03/2004, 11h40   #51
melmel
Invité régulier
 
Inscription : décembre 2003
Messages : 17
Détails du profil
Informations forums :
Inscription : décembre 2003
Messages : 17
Points : 9
Points : 9
Est-ce que la fonction mysql_close() est vraiment utile ?
Ca a un INpact sur la vitesse d'execution ? Sur la sécurité ?

melmel
melmel est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/03/2004, 14h29   #52
iubito
Membre éclairé
 
Avatar de iubito
 
Homme Sylvain Machefert
Développeur Java
Inscription : janvier 2003
Messages : 380
Détails du profil
Informations personnelles :
Nom : Homme Sylvain Machefert
Âge : 30
Localisation : France, Haute Loire (Auvergne)

Informations professionnelles :
Activité : Développeur Java
Secteur : Finance

Informations forums :
Inscription : janvier 2003
Messages : 380
Points : 321
Points : 321
De toute façon dès que ta page php est exécutée entièrement, les connexion sont fermées (équivalent à mysql_close).
donc vitesse ça change rien
sécurité je pense pas...
par contre une connexion à mysql (c'est une ressource) prend de la place en mémoire. Faire un mysql_close libère donc de la mémoire.
A noter que PHP dispose d'un garbage collector.
+ d'infos sur les ressources ici : http://fr.php.net/manual/fr/language.types.resource.php

C'est du même ordre que le mysql_free_result après un mysql_query (voir ici).
__________________
Lé SMS cé kom lé ognon, sa pike lé yeu
iubito est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/04/2004, 19h42   #53
iubito
Membre éclairé
 
Avatar de iubito
 
Homme Sylvain Machefert
Développeur Java
Inscription : janvier 2003
Messages : 380
Détails du profil
Informations personnelles :
Nom : Homme Sylvain Machefert
Âge : 30
Localisation : France, Haute Loire (Auvergne)

Informations professionnelles :
Activité : Développeur Java
Secteur : Finance

Informations forums :
Inscription : janvier 2003
Messages : 380
Points : 321
Points : 321
Pour écrire en plus propre encore le
Code :
for($i=0;$i<sizeof($arr);$i++)
on peut faire
Code :
for($i=0,$j=sizeof($arr); $i<$j; $i++)
tout en une ligne ! optimisé niveau vitesse
__________________
Lé SMS cé kom lé ognon, sa pike lé yeu
iubito est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/05/2004, 21h10   #54
DgG
Invité régulier
 
Inscription : novembre 2003
Messages : 22
Détails du profil
Informations forums :
Inscription : novembre 2003
Messages : 22
Points : 7
Points : 7
Envoyer un message via ICQ à DgG Envoyer un message via AIM à DgG Envoyer un message via MSN à DgG
Sinon, ya la mise en cache qui peut etre interresante :
http://www.idfr.net/etude_apache/fr/caching_opcodes.php

Enfin, pour MySQL ça change rien...
DgG est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/06/2004, 13h48   #55
emrys
Invité régulier
 
Inscription : juin 2004
Messages : 5
Détails du profil
Informations forums :
Inscription : juin 2004
Messages : 5
Points : 5
Points : 5
Je crois qu'on s'est un peu egarer par rapport a la question posé de depart
Pour te repondre j'ai mis dans un while un msql_fetch_row($sql) et ca marche tres bien j'ai fait un menu deroulant un tableau plein d'autres encore vraiment ca marche pas de souci
Code :
1
2
3
4
while( $row = mysql_fetch_row($sql))
{
  echo"<tr><td>$row[0]</td></tr>\n<tr><td>$row[1]</td></tr>";
}
Ce code fonctionne a merveille si bien sur tu a plusieur champs dans ta base
Pense que le premier champs de ta base est toujours 0
voila n'hesite pas a me contacter pour de futures questions
emrys est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/06/2004, 03h28   #56
Celelibi
Membre émérite
 
Avatar de Celelibi
 
Inscription : janvier 2004
Messages : 1 060
Détails du profil
Informations forums :
Inscription : janvier 2004
Messages : 1 060
Points : 910
Points : 910
emrys, il a déjà été dit que mysql_fetch_array n'est pas plus lent que mysql_fetch_row et ajoute un confort d'utilisation.
__________________
Les vaches ne peuvent PAS voler, quoi qu'elles aient pu vous raconter.
Celelibi est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/06/2004, 07h41   #57
iubito
Membre éclairé
 
Avatar de iubito
 
Homme Sylvain Machefert
Développeur Java
Inscription : janvier 2003
Messages : 380
Détails du profil
Informations personnelles :
Nom : Homme Sylvain Machefert
Âge : 30
Localisation : France, Haute Loire (Auvergne)

Informations professionnelles :
Activité : Développeur Java
Secteur : Finance

Informations forums :
Inscription : janvier 2003
Messages : 380
Points : 321
Points : 321
Aller, un petit coup d'optimisation comme on en a parlé dans ce topic :
Code :
1
2
3
4
while( $row = mysql_fetch_row($sql))
{
  echo"<tr><td>$row[0]</td></tr>\n<tr><td>$row[1]</td></tr>";
}
=>

Code :
1
2
3
4
5
while( $row = mysql_fetch_row($sql))
{
  echo '<tr><td>'. $row[0] .'</td></tr>
        <tr><td>'. $row[1] .'</td></tr>';
}
Au quel cas, faire un tableau avec une cellule par ligne, c'est pas terrible, vaut mieux faire des listes <ol> ou <ul>, avec du style
__________________
Lé SMS cé kom lé ognon, sa pike lé yeu
iubito est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/07/2004, 18h15   #58
erzebet
Invité régulier
 
Inscription : juillet 2004
Messages : 7
Détails du profil
Informations forums :
Inscription : juillet 2004
Messages : 7
Points : 7
Points : 7
Par défaut Optimisation

Bonjour,

Voilà, depuis très longtemps je me pose de grosses questions sur l'optimisation du php mais j'ai souvent du mal à trouver des réponses.
Alors déjà, question générale : comment faire pour tester efficacement un script ou carrément l'éxécution d'une fonction, j'ai bien un script qui calcule le nombre de milisecondes entre le début et la fin mais ca donne des chose assez différentes à chaque fois (forcément vu l'unité de temps) : est-ce qu'il faut multiplier l'éxécution et faire une moyenne, ou y-a-t-il des outils ?

En attendant de savoir faire, est-ce que quelqu'un aurait des réponses aux questions suivantes :
1- le fait de faire des fonctions imbriquées les unes dans les autres et de les appeler est-il beaucoup plus long que d'exécuter le script en bloc tel quel (parce que c'est quand même bien pratique pour la lisibilité) ?
2- lorsqu'on appelle dans une page php un grand nombre de fonctions mais de façon variable, vaut-il mieux les mettre toutes dans un seul fichier B, faire l'include une seule fois quite à ne pas servir de la moitié des fonctions ou vaut-il mieux mettre les fonctions dans des fichiers différents et ne charger chaque fichier que si on en a besoin mais donc faire plus d'includes et même beaucoup ?
Bon je crois que c'est tout pour commencer
Merci d'avance !
erzebet est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/07/2004, 18h56   #59
iubito
Membre éclairé
 
Avatar de iubito
 
Homme Sylvain Machefert
Développeur Java
Inscription : janvier 2003
Messages : 380
Détails du profil
Informations personnelles :
Nom : Homme Sylvain Machefert
Âge : 30
Localisation : France, Haute Loire (Auvergne)

Informations professionnelles :
Activité : Développeur Java
Secteur : Finance

Informations forums :
Inscription : janvier 2003
Messages : 380
Points : 321
Points : 321
Par défaut Re: Optimisation

Citation:
Envoyé par erzebet
Bonjour,

Voilà, depuis très longtemps je me pose de grosses questions sur l'optimisation du php mais j'ai souvent du mal à trouver des réponses.
Alors déjà, question générale : comment faire pour tester efficacement un script ou carrément l'éxécution d'une fonction, j'ai bien un script qui calcule le nombre de milisecondes entre le début et la fin mais ca donne des chose assez différentes à chaque fois (forcément vu l'unité de temps) : est-ce qu'il faut multiplier l'éxécution et faire une moyenne, ou y-a-t-il des outils ?
Oui, multiplie, par 100, 1000, 10000, 1 million si il faut, y'a toujours des petites variations, mais ça donne une idée. Si tu as 2 possibilités d'implémentation d'un algo, ça te permet de comparer.

Citation:
En attendant de savoir faire, est-ce que quelqu'un aurait des réponses aux questions suivantes :
1- le fait de faire des fonctions imbriquées les unes dans les autres et de les appeler est-il beaucoup plus long que d'exécuter le script en bloc tel quel (parce que c'est quand même bien pratique pour la lisibilité) ?
fonctions = + lisible, + souple (tu modifie un truc ça le modifie pour toutes les utilisations que tu vas faire.
Au niveau mémoire, la fonction va prendre l'espace mémoire nécessaire juste le moment de son exécution, puis le libère en sortant.
ça ne fait pas ralentir de créer des fonctions.

Citation:
2- lorsqu'on appelle dans une page php un grand nombre de fonctions mais de façon variable, vaut-il mieux les mettre toutes dans un seul fichier B, faire l'include une seule fois quite à ne pas servir de la moitié des fonctions ou vaut-il mieux mettre les fonctions dans des fichiers différents et ne charger chaque fichier que si on en a besoin mais donc faire plus d'includes et même beaucoup ?
Tout dépend, c plus une question de lisibilité je pense.
Si tu as une série de fonctions pour faire le café, et une autre grosse série pour servir une bière fraîche, c + propre de séparer dans 2 fichiers.
D'un autre côté, un seul fichier pour les fonctions c + facile à inclure.
A moins que je me trompe, avoir un include avec beaucoup de fonctions dont pleins qui ne vont pas servir, ça va pas bouffer de la mémoire pour rien.
A confirmer quand même, doit y avoir un 'tit chouilla de mémoire utiliser pour "déclarer" toutes les fonctions, y compris les non-utilisées, mais ça doit pas être énorme.
__________________
Lé SMS cé kom lé ognon, sa pike lé yeu
iubito est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/07/2004, 19h55   #60
m@
Membre confirmé
 
Avatar de m@
 
Inscription : janvier 2004
Messages : 143
Détails du profil
Informations forums :
Inscription : janvier 2004
Messages : 143
Points : 244
Points : 244
Envoyer un message via MSN à m@
au niveau de l'appel des fonctions de façon générale, appeler une fonction prend quand même un peu de proc, mais rien de comparable aux gains de lisibilité

(appel d'une fonction =
+ empilement de l'adresse de retour
+ saut au début de la fonction
<exécution de la fonction>
+ récup de l'adresse de retour sur la pile
+ saut à cette adresse
soit 4 instructions en plus : négligeable)
__________________
Si vous fermez la porte à toutes les erreurs, la vérité restera dehors. (Tagore)

Mandrake 10.1 up to date
OpenBSD 3.5
Win XP SP 2
m@ est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse
Outils de la discussion

Navigation rapide


Fuseau horaire GMT +2. Il est actuellement 14h02.


 
 
 
 
Partenaires

Hébergement Web