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 :

[Système] Intéragir avec un programme exécuté en tâche de fond


Sujet :

Langage PHP

  1. #1
    Membre averti
    Inscrit en
    Juin 2007
    Messages
    33
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 33
    Par défaut [Système] Intéragir avec un programme exécuté en tâche de fond
    Bonjour,

    J'ignore si ce que je souhaite faire est possible ou non. Je compte sur vous pour m'éclairer.

    J'ai un script php qui appelle un script perl à l'aide d'exec() et tout fonctionne à merveille:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    exec("mon_prog.pl $fichier", $output, $rc);
    if (!$rc=='0') echo "Erreur lors de l'exécution, code erreur : $rc";
     
        else
        {
          for($i=0;$i<sizeOf($output);$i++)
          {
            echo "$output[$i]<br/><br/>";
          }      
        }
    Mon résultat s'affiche et c'est super.

    Seulement voilà, mon programme perl met un certain temps à se lancer. Rien de bien dramatique, mais tout de même, j'aimerais bien qu'un même utilisateur puisse faire différentes requêtes sans avoir à redémarrer le script perl à chaque fois. Côté Perl aucun soucis, j'ai un peu d'objet et un

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $process=new Process();
    que je lance une fois et je peux faire 1 ou 1 milliard de requête(s) sans avoir à recharger toutes mes librairies.

    Côté gestion de session avec PHP, jusqu'à présent je pense avoir tout bien compris, pas de problème non plus.

    Alors quel problème? Ce que j'aimerais, c'est pouvoir lancer l'exécution de mon programme en début de session PUIS, à chaque fois que mon utilisateur lance une requête, envoyer mes variables et récupérer le résultat, sans éteindre le script perl avant la fin de la session.

    Est-ce qu'on peut faire une chose pareille? Est-ce qu'il faut regarder du côté de popen() [si oui existe-t-il un totu sur la question?] ? Est-ce que je dois retourner vers CGI?

    Merci pour votre attention

  2. #2
    Membre Expert

    Homme Profil pro
    Expert PHP
    Inscrit en
    Novembre 2004
    Messages
    2 127
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Expert PHP
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Novembre 2004
    Messages : 2 127
    Par défaut
    Je pense avoir pigé ce que tu veux faire, mais ma question est la suivante : que fais ton script perl ?

    Parce que tu veux lui envoyer plusieurs fois des données et qu'il te les traite ... mais logiquement c'est un script qui a besoin de se lancer à chaque fois pour traiter des fichiers ...

  3. #3
    Membre averti
    Inscrit en
    Juin 2007
    Messages
    33
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 33
    Par défaut
    Merci pour l'intérêt que tu portes à mon problème.

    Je vais essayer d'être précise.

    Mon script Perl interagit avec un programme complexe sur lequel je n'ai pas la main, qui sera modifié à plusieurs reprises à l'avenir (pas dans son mode d'interrogation, mode d'interrogation que je peux éventuellement me permettre de modifier). C'est un programme de traitement de chaînes de caractères.

    On peut découper mon script Perl en trois étapes:

    1) il crée une instance d'objet
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $process=new Process();
    . Ce qui a pour conséquence de charger tout un tas de lexiques

    2) si l'utilisateur a entré une chaîne de caractères, le script envoie cette forme au programme complexe qui lui retourne son analyse => je renvoie à l'utilisateur cette analyse (les lexiques sont chargés une fois)

    3) si l'utilisateur a entré un nom de fichier, le fichier est ouvert et chaque ligne du fichier (= une chaîne de caractères) est envoyée tour à tour au programme complexe, qui retourne son analyse, que j'enregistre dans un fichier => je renvoie à l'utilisateur ce fichier (les lexiques sont chargés une fois, quelque soit le nombre de formes à analyser)

    Ce que j'aimerai en somme, c'est pouvoir:

    1) lors de la première interrogation, créer l'instance d'objet et charger tous les lexiques

    2) garder cet objet "vivant" tant que la session de l'utilisateur dure.

    3) lorsque l'utilisateur envoie un nouveau fichier ou une nouvelle forme, réutiliser l'instance déjà créée => ne pas recharger tous les lexiques

    Mon problème est peut-être "juste" un problème d'algorithmique et peut-être que les fonctions PHP disponibles ne permettent pas d'y apporter une réponse toute faite. Je voudrais juste m'en assurer, afin de ne pas réinventer la roue.

  4. #4
    Membre Expert

    Homme Profil pro
    Expert PHP
    Inscrit en
    Novembre 2004
    Messages
    2 127
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Expert PHP
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Novembre 2004
    Messages : 2 127
    Par défaut
    Est-ce que tu y arrive en console ?

    C'est à dire : pour moi on lance un fichier perl genre :
    ou
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ./script.pl mon_fichier
    Et on a un retour.

    Après ce retour, le fichier .pl est arrêté, et si tu relances la commande, tu recharges les bibliothèques.

    Avec l'exec de PHP, ça va faire pareil.

    Je ne vois pas de solutions à ton problème à moins que tu puisses déjà le faire en mode console.

    Tu vois ce que je veux dire ?

  5. #5
    Membre averti
    Inscrit en
    Juin 2007
    Messages
    33
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 33
    Par défaut
    Bien entendu en ligne de commande ça ne marche pas non plus.

    Le fait est que je n'ai pas bien compris le fonctionnement de proc_open() et que j'avais espoir que cette fonction permette ce genre de chose.

    Je vais relire une dernière fois la doc sur cette fonction, à tête reposée et je viendrai fermer ce post si ça n'est définitivement pas la solution.

    Encore merci

  6. #6
    Membre averti
    Inscrit en
    Juin 2007
    Messages
    33
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 33
    Par défaut Fermeture du post
    Merci pour ton aide.

    Je ferme le post.

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

Discussions similaires

  1. Réponses: 17
    Dernier message: 16/05/2016, 17h25
  2. Souci avec un programme exécutable
    Par billouDu92 dans le forum Débuter
    Réponses: 6
    Dernier message: 21/01/2011, 09h58
  3. Programme invisible en tâche de fond
    Par probo dans le forum Delphi
    Réponses: 3
    Dernier message: 08/02/2007, 11h23
  4. [Système] problème avec l'exécution
    Par musmus dans le forum Langage
    Réponses: 2
    Dernier message: 05/01/2007, 13h58
  5. Réponses: 1
    Dernier message: 04/01/2007, 22h52

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