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 :

Mettre une partie d'un programme en arrière plan ?


Sujet :

PHP & Base de données

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2015
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2015
    Messages : 17
    Par défaut Mettre une partie d'un programme en arrière plan ?
    Bonjour à tou(te)s,
    la fin d'un programme fait des mises à jour mySQL qui s'avèrent longues (50s).
    J'ai pensé mettre cette partie en arrière plan afin de libérer l'écran de l'utilisateur pour qu'il puisse passer à autre chose pendant que le prog termine ses mise à jour. Est-ce possible en PHP ?

    Merci de votre aide

  2. #2
    Modérateur
    Avatar de grunk
    Homme Profil pro
    Lead dév - Architecte
    Inscrit en
    Août 2003
    Messages
    6 693
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Lead dév - Architecte
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2003
    Messages : 6 693
    Par défaut
    Non,
    en revanche ce qui est possible c'est de créer une file d'attente des taches à réaliser qui prennent du temps et d'avoir un script dédié à cette tache (et non le script lancé par le client).
    Cette file peut être réalisée par des outils spécialisés comme redis , rabbitmq ou alors manuellement via des entrées dans une base de données ou dans un cronjob.
    Pry Framework php5 | N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2015
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2015
    Messages : 17
    Par défaut
    Merci de ta réponse. Dommage j'aurais aimé le faire dans le script du client.

  4. #4
    Membre confirmé
    Homme Profil pro
    Architecte réseau
    Inscrit en
    Août 2018
    Messages
    40
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Architecte réseau

    Informations forums :
    Inscription : Août 2018
    Messages : 40
    Par défaut
    je vais pinnailler un peu ;-)
    en fait la réponce est peu etre : mais seulement si ton serveur n'est pas un serveur mutualisé , dans ce cas il y as toute les chance que cela soit interdit.

    pour cela utilise

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    if ($type=="priv"){exec("nohup /usr/bin/php -f ../toto/mon_fichier_fils.php ".$start." > /dev/null 2>&1 &");}
    avec plusieurs subtilité
    - les parametres a passer a ta page n'est ni du $_GET ni du $_POST (ici mon $start); mais des caractères séparé par des espaces que tu récupères avec $argv.
    ( https://www.php.net/manual/en/reserv...ables.argv.php )

    de plus un minimum de controle est quasi obligatoire dans le cas ou un boso spam avec F5 10 fois/seconde la page
    - ca te lancera autant de fois le sript autonome derrière , avec le risque que ton serveur sature tres vite...
    - si ton script "fils" fait des update en base tu risque aussi très vite de rendre ta base non coherante...
    -etc etc etc...
    donc a toi de voir si tu veut prendre ce risque...

    enfin il n'existe pas a ma connaissance de framework "tout pret" capable de faire ca :
    il faut donc ce taper tout le code a la main et c'est long....

    pour ma part je passe par
    - depot de fichier de parametres dans un repertoire special
    -une cron qui toute les 3 secondes me check le repertoire pour compter ce qui est lancé et qui lance maximum 12 tache simultanée et pas plus
    - une interface de controle pour voir ce qui ce passe sur le serveur ,

    ca m'as pris 2 bon mois , (pas forcerment que du dev ) mais bcp de probleme pour trouver une fonctionnement viable , auquel s'ajoute des problemes de droits , de vitesse d'écriture pour pas mettre ton HDD au tas etc etc....
    perso j utilise cette methode car une page "mere" peu me lancer jusque a 800 taches filles
    a toi de voir si tu veut rentrer la dedans ou si il n'existe pas une autre maniere bien moins "casse gueule"de faire

    enfin pour rappel quand un internaute lance un page php sur le serveur via un navigateur , celle ci ne s'arrete que quand le script php est totalement fini , meme si l'internaute ferme son navigateur ou qu'il change de page...
    une solution plus judicieuse serrais avec par exemple :
    une <iframe> de 1x1 et planqué dans un coin ou et ton formulaire passe le parametrage a la page fille dans l'iframe
    ou avec une <div></div> et du jquery dans lequel tu appelle ta page fille avec le parametrage voulu.

  5. #5
    Modérateur
    Avatar de grunk
    Homme Profil pro
    Lead dév - Architecte
    Inscrit en
    Août 2003
    Messages
    6 693
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Lead dév - Architecte
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2003
    Messages : 6 693
    Par défaut
    si il n'existe pas une autre maniere bien moins "casse gueule"de faire
    Une file d'attente des taches à réaliser avec des process dédiés

    PHP n'étant pas multi thread , il faut gérer cela autrement. En général ca passe par le stockage des "chose à faire" puis un dépilage plus ou moins rapide en lançant 1 ou plusieurs script PHP simultanément via de la ligne de commande.
    Pry Framework php5 | N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  6. #6
    Membre confirmé
    Homme Profil pro
    Architecte réseau
    Inscrit en
    Août 2018
    Messages
    40
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Architecte réseau

    Informations forums :
    Inscription : Août 2018
    Messages : 40
    Par défaut
    PHP n'étant pas multi thread ...
    vu qu'il y'as un "nohup" devant "/usr/bin/php"
    https://fr.wikipedia.org/wiki/Nohup
    meme si j'arrete le serveur apache , ca n 'as aucune incidence sur les scripts php qui sont lancé de manière indépendente du php parent et de apache.
    Comme tout les scripts sont lancé de maniere autonome ils utilisent tout les CPU. au meme titre que le ferrais un ordonnanceur.
    et cela avec une commande déja présente de base, sans utiliser de logiciel tiers.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Mettre une pause dans un programme
    Par PNL dans le forum Général Java
    Réponses: 12
    Dernier message: 28/01/2016, 00h54
  2. [champ de saisie] Mettre une partie en gras
    Par popov2 dans le forum WinDev
    Réponses: 2
    Dernier message: 23/05/2007, 20h27
  3. [ListBox] Mettre une partie du texte d'un item en gras
    Par Sergio29 dans le forum Delphi
    Réponses: 2
    Dernier message: 28/01/2007, 19h55
  4. mettre une icone pour son programme
    Par warubi dans le forum Dev-C++
    Réponses: 2
    Dernier message: 06/01/2007, 18h38
  5. Excel : mettre une partie du contenu d'une cellule en gras
    Par cladsam dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 23/08/2006, 10h05

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