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

Langage PHP Discussion :

Process en background


Sujet :

Langage PHP

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2011
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Juin 2011
    Messages : 11
    Points : 6
    Points
    6
    Par défaut Process en background
    Hello World
    Je dois réaliser une interface d'utilisation web d'un logiciel assez long à s'exécuter et le problème c'est que la page php freeze quand je le lance en clair et ne lance rien quand j'essaye de le lancer en background (cmd &).
    Pas la peine de RTFM ni GIYF, j'ai déjà tenté
    Je suis sous Apache 2.2.16 et php5 et pour l'OS, je tourne sous Gnu/Linux, distrib Ubuntu.
    Quelqu'un peut-il m'aider?

  2. #2
    Expert éminent
    Avatar de Benjamin Delespierre
    Profil pro
    Développeur Web
    Inscrit en
    Février 2010
    Messages
    3 929
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Février 2010
    Messages : 3 929
    Points : 7 762
    Points
    7 762
    Par défaut
    utilise Ajax

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2011
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Juin 2011
    Messages : 11
    Points : 6
    Points
    6
    Par défaut
    Sauf erreur de ma part, AJAX n'est-il pas basé sur du javascript donc sur la machine client?

  4. #4
    Expert éminent
    Avatar de Benjamin Delespierre
    Profil pro
    Développeur Web
    Inscrit en
    Février 2010
    Messages
    3 929
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Février 2010
    Messages : 3 929
    Points : 7 762
    Points
    7 762
    Par défaut
    Citation Envoyé par dhuyp Voir le message
    Sauf erreur de ma part, AJAX n'est-il pas basé sur du javascript donc sur la machine client?
    Oui, et donc ?

  5. #5
    Expert éminent
    Avatar de transgohan
    Homme Profil pro
    Développeur Temps réel Embarqué
    Inscrit en
    Janvier 2011
    Messages
    3 146
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Temps réel Embarqué

    Informations forums :
    Inscription : Janvier 2011
    Messages : 3 146
    Points : 9 386
    Points
    9 386
    Par défaut
    Le fait d'utiliser de l'Ajax pour appeler les traitements serveur empêchera ton navigateur de freezer.
    Par contre Javascript freeze assez facilement si tu manipules beaucoup de données lors des réponses des requêtes.
    Pour te donner une idée, mon Firefox commence à freezer sur mon appli qui génère un tableau de 3000 entrées en 7 colonnes. Cependant c'est très dépendant de la configuration de ton PC bien évidemment.

    « Toujours se souvenir que la majorité des ennuis viennent de l'espace occupé entre la chaise et l'écran de l'ordinateur. »
    « Le watchdog aboie, les tests passent »

  6. #6
    Futur Membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2011
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Juin 2011
    Messages : 11
    Points : 6
    Points
    6
    Par défaut
    Citation Envoyé par Benjamin Delespierre Voir le message
    Oui, et donc ?
    Mon logiciel tourne sur serveur et les données sont sur le serveur.

  7. #7
    Futur Membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2011
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Juin 2011
    Messages : 11
    Points : 6
    Points
    6
    Par défaut
    Citation Envoyé par transgohan Voir le message
    Le fait d'utiliser de l'Ajax pour appeler les traitements serveur empêchera ton navigateur de freezer.
    Par contre Javascript freeze assez facilement si tu manipules beaucoup de données lors des réponses des requêtes.
    Pour te donner une idée, mon Firefox commence à freezer sur mon appli qui génère un tableau de 3000 entrées en 7 colonnes. Cependant c'est très dépendant de la configuration de ton PC bien évidemment.
    Les traitements serveurs?

  8. #8
    Expert éminent
    Avatar de Benjamin Delespierre
    Profil pro
    Développeur Web
    Inscrit en
    Février 2010
    Messages
    3 929
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Février 2010
    Messages : 3 929
    Points : 7 762
    Points
    7 762
    Par défaut
    C'est pas bien compliqué. Le traitement lourd coté serveur doit être piloté par Ajax afin que le navigateur ne freeze par pendant le processus. Tu peux afficher un gif de loading voire une barre de progression pour que l'utilisateur ait une idée de l'avancement.

  9. #9
    Futur Membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2011
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Juin 2011
    Messages : 11
    Points : 6
    Points
    6
    Par défaut
    Le problème est que cette durée peut être de l'ordre d'une semaine voire plus!
    L'utilisateur ne peut pas rester sur la page pendant cette durée.

  10. #10
    Expert éminent
    Avatar de Benjamin Delespierre
    Profil pro
    Développeur Web
    Inscrit en
    Février 2010
    Messages
    3 929
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Février 2010
    Messages : 3 929
    Points : 7 762
    Points
    7 762
    Par défaut
    Voyez vous ça

    Tu aurais dû le dire dès le départ parce que là on est partis sur la mauvaise piste. La seule solution que je verrai pour faire ça est un daemon en PHP.
    Voici un article qui traite de la question: http://devlog.info/2010/03/07/creating-daemons-in-php/

    Le principe serait de mettre sur tes pages un trigger qui dit au daemon de démarrer. Ensuite, le daemon pourrait mettre à jour le status de son travail quelque part (soit s'il est interrogé par webservice, soit en DB).

    Pour piloter le daemon, je te recommande l'utilisation des signaux et des threads que tu ne peux obtenir qu'avec l'extension PCNTL (à installer).

    Au passage, créer un daemon en PHP requiert PHP 5.3 car les version antérieures n'ont pas de garbage collector et les memory leaks viendront perturber le processus.

    Par curiosité, quel genre de traitement prends 1 semaine chez toi ??

  11. #11
    Futur Membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2011
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Juin 2011
    Messages : 11
    Points : 6
    Points
    6
    Par défaut
    Parcours de Rainbow Tables.
    Je sais que je suis casse-c*****e mais le problème c'est qu'en environnement de production ça va être dur de les convaincre de passer sous 5 déjà...

  12. #12
    Expert éminent
    Avatar de Benjamin Delespierre
    Profil pro
    Développeur Web
    Inscrit en
    Février 2010
    Messages
    3 929
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Février 2010
    Messages : 3 929
    Points : 7 762
    Points
    7 762
    Par défaut
    Dans ce cas, PHP n'est pas la solution technique qu'il te faut. C'est tout.

    On peut (presque) tout faire avec n'importe quel langage, mais il faut pas aller miner du charbon avec des assiettes, c'est pas fait pour.

  13. #13
    Futur Membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2011
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Juin 2011
    Messages : 11
    Points : 6
    Points
    6
    Par défaut
    Et tu me recommanderais quoi? Je pensais faire un programme qui appelle l'autre programme... etc. Mais sans trop alourdir le serveur =)

  14. #14
    Futur Membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2011
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Juin 2011
    Messages : 11
    Points : 6
    Points
    6
    Par défaut
    Hallelujah!

    L'astuce est en fait de passer la commande de cette manière:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    $fp=fopen("exec.sh",'w+');
    fwrite($fp,'('.$cmd.') &');
    fclose($fp);
    chmod("exec.sh",0777);
     
    system("./exec.sh");
    Puisque l'interprétation system('('.$cmd.') &'); ne semble pas fonctionner.

    Thx de votre réactivité

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

Discussions similaires

  1. error 18 detected in background process
    Par fanah dans le forum Oracle
    Réponses: 1
    Dernier message: 18/01/2011, 11h28
  2. ORA-00445: background process PMON did not start after 120 seconds
    Par wasser dans le forum Connexions aux bases de données
    Réponses: 2
    Dernier message: 10/09/2009, 13h57
  3. lancement de deux ( ou n) process en background par la fonction system()
    Par Mokhtar BEN MESSAOUD dans le forum Bibliothèque standard
    Réponses: 8
    Dernier message: 04/01/2008, 18h34
  4. Child Process en background
    Par cotede2 dans le forum Windows
    Réponses: 1
    Dernier message: 08/05/2007, 22h18
  5. lancer un process en background
    Par yoda1410 dans le forum C++Builder
    Réponses: 1
    Dernier message: 28/04/2006, 20h32

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