IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

PHP & Base de données Discussion :

Optimisation de scripts PHP/MySQL [Débat]


Sujet :

PHP & Base de données

  1. #341
    Rédacteur

    Avatar de Yogui
    Homme Profil pro
    Directeur technique
    Inscrit en
    Février 2004
    Messages
    13 721
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yonne (Bourgogne)

    Informations professionnelles :
    Activité : Directeur technique

    Informations forums :
    Inscription : Février 2004
    Messages : 13 721
    Points : 29 985
    Points
    29 985
    Par défaut
    Eh bien si, justement, si tu n'utilises pas pconnect, les connexions se ferment automatiquement à la fin du script

  2. #342
    Membre actif
    Inscrit en
    Février 2008
    Messages
    457
    Détails du profil
    Informations forums :
    Inscription : Février 2008
    Messages : 457
    Points : 215
    Points
    215
    Par défaut
    Vous me rendez fous !! lol

    okok merci beaucoup

  3. #343
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Février 2007
    Messages
    1
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Février 2007
    Messages : 1
    Points : 1
    Points
    1
    Par défaut
    Je suis plutôt de l'avis de fermer la connexion à la base de données dès la dernière requête effectuée, autrement dit dès qu'on en a terminé avec la couche Models de l'application.

    Ca ne sert à rien, et peut même devenir nuisible de la laisser ouverte pendant le traitement des données puis la génération de la vue, qui si elle est conséquente, peut durer de 1 à plusieurs secondes.

  4. #344
    Expert éminent
    Avatar de berceker united
    Profil pro
    SQL
    Inscrit en
    Février 2005
    Messages
    3 488
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : SQL
    Secteur : Finance

    Informations forums :
    Inscription : Février 2005
    Messages : 3 488
    Points : 6 037
    Points
    6 037
    Par défaut
    Citation Envoyé par gseverin Voir le message
    C'est sur si tu as un site qui accueillle 1 personne par jour la inutile de dimensionner .

    Au contraire si ton site a un certain succés , il est préférable de fermer les connexions.

    Une personne qui consulte ton site et qui ne referme pas son navigateur maintien la connexion.

    sans compter celles qui surfent , on peut arriver vite au nombre de connexions autorisées PAR UTILISATEUR ; 48 pour infomaniak Une vingtaine POUR OVH , il ne faut pas être très fute fute pour le comprendre , tout ça bien sur si le site a pas mal de visites.

    D'ailleurs OVH propose de redimensionner ce nombre à la hausse moyennant finance , tiens curieux !! n'est-ce pas !!!!

    De toutes les façons , dans les FAQ il est conseillé cette façon de faire.

    Pour info , pour ne pas te prendre la tête , tu fais un include d'une page en entete de ton script ou la tu as ton connect de ta base.

    et en bas de ta pas tu fais un close de ta connexion avec un include .

    tu inclus ces scripts a chaque fois que tu commences un script et la en effet tu te poses pas de question.....
    Faux. La connexion se ferme à la fin du parsage du script PHP. Il y a pas de liaison permanente entre le navigateur et le serveur. Ce dernier envois ça page au navigateur et il ne le connait plus du tout. Heureusement que c'est ainsi parce qu'il faudrait des bases de données ayant la possibilité d'ouvrir des milliers de connexion en même temps.
    Mon avatar ? Ce n'est rien, c'est juste la tête que je fais lorsque je vois un code complètement frappa dingue !...

  5. #345
    Rédacteur

    Avatar de Yogui
    Homme Profil pro
    Directeur technique
    Inscrit en
    Février 2004
    Messages
    13 721
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yonne (Bourgogne)

    Informations professionnelles :
    Activité : Directeur technique

    Informations forums :
    Inscription : Février 2004
    Messages : 13 721
    Points : 29 985
    Points
    29 985
    Par défaut
    Citation Envoyé par Delapouite Voir le message
    Ca ne sert à rien, et peut même devenir nuisible de la laisser ouverte pendant le traitement des données puis la génération de la vue, qui si elle est conséquente, peut durer de 1 à plusieurs secondes.
    C'est bien ce que je disais plus haut : Si tu as de tels temps de réponse, alors l'optimisation du nombre de requêtes ouvertes est bien le dernier de tes soucis... Si ta vue met effectivement plus d'une seconde à s'afficher, alors il faut que tu te renseignes de toute urgence sur les techniques de mise en cache, mais tu peux tout de suite laisser tomber les sujets aussi triviaux que ce dont il est question ici

  6. #346
    Membre actif
    Inscrit en
    Février 2008
    Messages
    457
    Détails du profil
    Informations forums :
    Inscription : Février 2008
    Messages : 457
    Points : 215
    Points
    215
    Par défaut
    Et bien tant que j'y suis , je vais vous introduire une nouvelle question qui me trotte si vous voulez bien..
    J'en profite vu qu'en même temps nous sommes dans un sujet qui traite l'optimisation ^^

    Alors voila , j'ai fais un site (de vente mais peu importe) où en faite je n'ai qu'une page "officielle" , c'est l'index.php..
    j'utilise des modules donc , ce qui me donne quelque chose comme :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    <head>
    ..
    </head>
    <body>
    header();
    if(isset($_GET['section']) && in_array($_GET['section'], $sections))
      include('mod/' . $_GET['section'] . '.inc.php');
    else
      code de la page d'accueil
    footer();
    </body>
    Et dans mes modules , j'ai parfois d'autres modules, des genres de sous modules en quelques sortes..

    Est-ce là un bon procédé?

    J'ai noté pas mal d'avantages , notamment dans la lisibilité et la structure, et par exemple un avantage : je ne dispose que d'une balise body , donc que d'une seul possibilité de "onload" pour le JS.

    J'aimerais avoir votre avis.. merci !

  7. #347
    Rédacteur

    Avatar de Yogui
    Homme Profil pro
    Directeur technique
    Inscrit en
    Février 2004
    Messages
    13 721
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yonne (Bourgogne)

    Informations professionnelles :
    Activité : Directeur technique

    Informations forums :
    Inscription : Février 2004
    Messages : 13 721
    Points : 29 985
    Points
    29 985
    Par défaut
    @libuma : Oui, c'est ce que l'on appelle un script de bootstrap, c'est une technique utilisée par tous les frameworks modernes.

    Les noms de fichiers viennent en effet d'une variable client $_GET['section'], mais tu supprimes le risque en utilisant une "liste blanche" avec un tableau local $sections. Ta méthode est donc correcte et sécurisée

  8. #348
    Candidat au Club
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 2
    Points : 2
    Points
    2
    Par défaut
    Dans le cas d'un magazine en ligne, où on aurait par exemple une quinzaine de requete SQL SELECT pour afficher différents éléments sur la home, ne serait-ce pas plus malin de :

    1/ Créer une table pour la home, où dynamiquement à chaque modification coté back office, ça update cette table qui contient uniquement les éléments à afficher sur la home

    2/ Appeler avec une seule requete SQL SELECT tout le contenu de cette table et afficher son contenu au fur et à mesure de la page.


    J'ai jamais lu ce genre de proposition qui en plus de faire des tables par type de données fait aussi des tables par page.

    Vous pensez que dans le cas de sql select c'est une solution pertinente ?

  9. #349
    Membre habitué
    Avatar de savageman86
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    105
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Octobre 2006
    Messages : 105
    Points : 199
    Points
    199
    Par défaut
    Bah si tu construits ta page avec 15 requêtes SQL ça commence à faire. Plutôt que de créer un autre table sous prétexte que c'est la page d'accueil et donc qu'elle est appelée plus souvent, il faut plutôt la mettre en cache. Si ta page est affichée 1 fois par seconde et que tu mets un cache d'une minute, les 15 requêtes ne seront exécutées que 1 fois sur 60, ce qui est largement acceptable.
    En plus c'est super facile à faire !

  10. #350
    Candidat au Club
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 2
    Points : 2
    Points
    2
    Par défaut
    Tout dépend de quel type de mise en cache tu parles. Si c'est avec un système de template, c'est lourd à mettre en place. Tu parles de quel type de mise en cache ?

  11. #351
    Membre actif
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Décembre 2003
    Messages
    217
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2003
    Messages : 217
    Points : 242
    Points
    242
    Par défaut
    Quelqu'un aurait-il récemment fait un bench foreach() vs array_map() vs array_map+create_function() ?
    Il me semble que les lenteurs de array_map() ont été fixées, non ?

  12. #352
    Membre du Club
    Profil pro
    Inscrit en
    Septembre 2009
    Messages
    188
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2009
    Messages : 188
    Points : 55
    Points
    55
    Par défaut
    j'ai aussi vus et entendu qu'il etait preferable d'utilisé directement les variable
    exemple :

    exemple:1
    mieu que :

    exemple2
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    $champ=$_POST['champ'];
    echo $cahmp;
    ;

    a confirmé car je ne sait pas dutout si il y a une grosse diference

  13. #353
    Expert éminent sénior

    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7 920
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7 920
    Points : 10 726
    Points
    10 726
    Par défaut
    Citation Envoyé par keusty78 Voir le message
    j'ai aussi vus et entendu qu'il etait preferable d'utilisé directement les variable
    exemple :

    exemple:1
    mieu que :

    exemple2
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    $champ=$_POST['champ'];
    echo $cahmp;
    ;

    a confirmé car je ne sait pas dutout si il y a une grosse diference
    ca depend de ca que tu veux faire, en tout inséré une valeur brute de POST est une faille (plus ou moins grave suivant les requêtes)

    et si tu veux afficher une valeur de POST dans le html il faut aussi faire un htmlspecialchars

  14. #354
    Membre du Club
    Profil pro
    Inscrit en
    Septembre 2009
    Messages
    188
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2009
    Messages : 188
    Points : 55
    Points
    55
    Par défaut
    oui c'est vrais stealth35 mai peut on pas proteger une variable directement meme si elle n'es pas defini? par exemple :

    mysql_real_escap_string($_POST['champ']);

    je dis sa comme sa mai en meme temp vous etes plus experimenter que moi dans le domaine

  15. #355
    Expert éminent sénior

    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7 920
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7 920
    Points : 10 726
    Points
    10 726
    Par défaut
    Citation Envoyé par keusty78 Voir le message
    oui c'est vrais stealth35 mai peut on pas proteger une variable directement meme si elle n'es pas defini? par exemple :

    mysql_real_escap_string($_POST['champ']);

    je dis sa comme sa mai en meme temp vous etes plus experimenter que moi dans le domaine
    si $_POST['champ'] n'existe pas oui tu vas avoir une erreur,
    mais je te conseil d'oublier le mysql_real_escap_string, et de vite passé sous mysqli ou PDO_MySQL

  16. #356
    Membre émérite
    Avatar de Seb33300
    Homme Profil pro
    Développeur Web
    Inscrit en
    Janvier 2007
    Messages
    1 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Thaïlande

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 563
    Points : 2 390
    Points
    2 390
    Par défaut
    mysql_real_escape_string() c'est pour protéger une chaîne de caractère qui va être utilisée dans une requête SQL via mysql_query() d'une injection SQL.

    Passer à mysqli ou à PDO ne résoudra pas le problème. Il y a des fonctions équivalentes à utiliser.
    Sinon il faut passer par des requêtes préparée, ce que les fonction mysql_ ne permettent pas.


    htmlentities() / htmlspecialchars() permettent de protéger le code HTML qui sera envoyé au navigateur. (failles XSS, etc..)


    Apres, le fait de passer par une variable intermédiaire plutôt que d'utiliser $_POST directement ne sert pas à grand chose à part consommer un peu plus de mémoire inutilement.
    Zend Certified PHP Engineer

    « Crois-tu comprendre le monde juste en matant le 20H Ou connaître l'histoire en ayant lu que l'angle des vainqueurs ? » Keny Arkana

  17. #357
    Expert éminent sénior

    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7 920
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7 920
    Points : 10 726
    Points
    10 726
    Par défaut
    Citation Envoyé par Seb33300 Voir le message
    Passer à mysqli ou à PDO ne résoudra pas le problème. Il y a des fonctions équivalentes à utiliser.
    Sinon il faut passer par des requêtes préparée, ce que les fonction mysql_ ne permettent pas.
    jamais dis l'inverse, regarde le lien (surtout le tableau du bas).

  18. #358
    Expert éminent
    Avatar de sekaijin
    Homme Profil pro
    Urbaniste
    Inscrit en
    Juillet 2004
    Messages
    4 205
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Urbaniste
    Secteur : Santé

    Informations forums :
    Inscription : Juillet 2004
    Messages : 4 205
    Points : 9 127
    Points
    9 127
    Par défaut
    Citation Envoyé par keusty78 Voir le message
    ...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $champ=$_POST['champ'];
    echo $cahmp;
    ;...
    ne faite JAMAIS ça
    Une des options de PHP pour faciliter la vie du développeur était de justement le faire de façon automatique.

    il existe donc des Hack pour tenter de corrompre les scripts.

    Donc si vous affectez un champs d'un POST à une variable
    évitez que cette variable ait pour nom la clef du champ
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $n_importe_quoi_d_autre_que_champ=$_POST['champ'];
    echo $n_importe_quoi_d_autre_que_champ;
    ;...[/QUOTE]
    A+JYT

  19. #359
    Nouveau Candidat au Club
    Inscrit en
    Juin 2009
    Messages
    1
    Détails du profil
    Informations forums :
    Inscription : Juin 2009
    Messages : 1
    Points : 1
    Points
    1
    Par défaut
    bonjour: svp mon français est trop faible mais j'essaye de m'exprimer pour mieux poser ma question .
    dans un forum ou chat on trouve généralement une zone de texte je veux copier coller
    dans cette zone une application visual basic et dans cette application un bouton si on clic sur ce bouton un texte apparait. b1 sur ce texte est préalablement programmer dans l'application par l'utilisateur de application et pas par l'utilisateur du chat ou du forum ,j'espère que c'est clair merci de votre compréhension .

  20. #360
    Membre confirmé
    Avatar de tse_jc
    Homme Profil pro
    Data Solutions
    Inscrit en
    Août 2010
    Messages
    287
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Data Solutions
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Août 2010
    Messages : 287
    Points : 597
    Points
    597
    Billets dans le blog
    4
    Par défaut
    Bonjour,

    Citation Envoyé par alekusu
    Dans le cas d'un magazine en ligne, où on aurait par exemple une quinzaine de requete SQL SELECT pour afficher différents éléments sur la home, ne serait-ce pas plus malin de :

    1/ Créer une table pour la home, où dynamiquement à chaque modification coté back office, ça update cette table qui contient uniquement les éléments à afficher sur la home

    2/ Appeler avec une seule requete SQL SELECT tout le contenu de cette table et afficher son contenu au fur et à mesure de la page.

    J'ai jamais lu ce genre de proposition qui en plus de faire des tables par type de données fait aussi des tables par page.

    Vous pensez que dans le cas de sql select c'est une solution pertinente ?
    Cette approche bien qu'elle soit juste dans l'intention n'est pas bonne du tout dans la forme, car c'est ainsi que fonctionnent la plupart des CMS et qui dans le cas présent constiste à utiliser la BD pour faire de la persistance de classe ce qui est à proscrire dans un contexte où les performances et la disponibilité en charge doivent être garantis.

    Dans le cas d'un site ecommerce il faut que la BD soit fortement normalisée et par conséquent qu'elle intègre les spécificités métier et fonctionnelles de l'applicatif Web.

    Pour ce qui est de l'affichage, appliquer votre vision est la bonne méthode à ceci près qu'il faille le faire avec des vues, bien qu'avec MySQL des requêtes dédiées soient le plus souvent les plus appropriées.

    ++

Discussions similaires

  1. [Débutant] Accélérer et optimiser ses scripts PHP
    Par Metallic-84s dans le forum Langage
    Réponses: 6
    Dernier message: 24/03/2006, 12h37
  2. [MySQL] [SGBD] Script PHP/MYSQL d'access FTP
    Par ChRom dans le forum PHP & Base de données
    Réponses: 1
    Dernier message: 09/01/2006, 01h52
  3. Réponses: 9
    Dernier message: 05/01/2006, 12h24
  4. Recherche Login Script PHP & MySQL
    Par whbh dans le forum SQL Procédural
    Réponses: 9
    Dernier message: 01/12/2005, 16h45
  5. [MySQL] [Script]Optimisation de scripts Php/MySQL (2)
    Par copy dans le forum PHP & Base de données
    Réponses: 8
    Dernier message: 27/08/2004, 08h33

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo