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

Web Perl Discussion :

Passage d'une page web à une autre TROP long


Sujet :

Web Perl

  1. #1
    Membre du Club
    Inscrit en
    Septembre 2005
    Messages
    71
    Détails du profil
    Informations forums :
    Inscription : Septembre 2005
    Messages : 71
    Points : 47
    Points
    47
    Par défaut Passage d'une page web à une autre TROP long
    Bonjour à tous !

    J'ai un petit souci sans avoir aucune idée de comment parer à ce problème...

    J'ai créé une page web (un formulaire) qui permet via un bouton submit de tranférer des données vers un autre script (page web également) qui lance une application sur un serveur de calcul (via un script sh).

    Le calcul peut être extrêment long (plusieurs minutes à plusieurs heures). Mon problème est que une fois qu'on a appuyé sur le bouton submit, il lance tout bien comme il faut, sauf qu'il attend d'avoir fini son calcul pour afficher la seconde page web !!!!!!!!!!

    C'est pas très cool pour savoir si la soumission a bien été effective ou non...

    Est-ce que quelqu'un a une idée pour le forcer à afficher la seconde page, alors que son calcul n'est pas terminé.

    J'ai fouillé les FAQ et le forum, mais j'ai rien trouvé répondant à mon problème...

    Merci de me faire partager vos idées !

  2. #2
    Jeh
    Jeh est déconnecté
    Membre actif Avatar de Jeh
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    203
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations forums :
    Inscription : Septembre 2003
    Messages : 203
    Points : 250
    Points
    250
    Par défaut
    Salut !

    Comment lances-tu ton sh ?
    "system" créé un process fils de ton process perl et attend que celui-ci se termine pour poursuivre l'exécution du perl.
    Si c'est "system" que tu utilises, essaie donc "exec".

    @+.
    Verre vide je te plains, verre plein, je te vide.

  3. #3
    Membre du Club
    Inscrit en
    Septembre 2005
    Messages
    71
    Détails du profil
    Informations forums :
    Inscription : Septembre 2005
    Messages : 71
    Points : 47
    Points
    47
    Par défaut ni system ni exec
    Re-hello !

    Je lance mon fichier sh (enfin csh pour être plus exacte) avec la commande :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    open (fic, blabla.csh);
    print <fic>;
    close (fic);
    J'avais essayé d'utiliser system et exec, mais ça me générait des erreurs, alors j'ai préférré open...

    Tu crois vraiment que ça peut venir de là ??? Si oui, ben je vais essayer avec exec...

    merci !!!

  4. #4
    Expert confirmé
    Avatar de GLDavid
    Homme Profil pro
    Service Delivery Manager
    Inscrit en
    Janvier 2003
    Messages
    2 859
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Service Delivery Manager
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Janvier 2003
    Messages : 2 859
    Points : 4 809
    Points
    4 809
    Par défaut Re: ni system ni exec
    Citation Envoyé par minusette
    Re-hello !

    Je lance mon fichier sh (enfin csh pour être plus exacte) avec la commande :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    open (fic, blabla.csh);
    print <fic>;
    close (fic);
    J'avais essayé d'utiliser system et exec, mais ça me générait des erreurs, alors j'ai préférré open...

    Tu crois vraiment que ça peut venir de là ??? Si oui, ben je vais essayer avec exec...

    merci !!!
    Pour exécuter ton fichier tu utilises open Mais c'est pour lire un fichier tout ça.
    Pour exécuter un script, il faut que tu utilises les 2 commandes que Jeh te recommande. La FAQ en parle d'ailleurs.

    @++
    GLDavid
    Consultez la FAQ Perl ainsi que mes cours de Perl.
    N'oubliez pas les balises code ni le tag

    Je ne répond à aucune question technique par MP.

  5. #5
    Membre du Club
    Inscrit en
    Septembre 2005
    Messages
    71
    Détails du profil
    Informations forums :
    Inscription : Septembre 2005
    Messages : 71
    Points : 47
    Points
    47
    Par défaut Open / system / exec
    Bonjour !!!
    Pour exécuter ton fichier tu utilises open Mais c'est pour lire un fichier tout ça.
    Ben non pas frocément !!! Tu exécutes sans problème un fichier avec open à condition de lui mettre une "|" à la fin de la commande
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    open (file2,"$a | "); 
    print <file2>;
    close (file2);
    avec $a le chemin de mon fichier.

    Ca marche très bien, SAUF qu'en effet, il ne passe pas à la page web de suite, mais après la fin d'execution du fichier csh.
    Vous êtes plusieurs à penser que ça vient de la fonction utilisée pour l'ouverture du fichier alors je vais tester un exec à la place du open et je vous tiens au courant !

    Merci et bonne journée !

  6. #6
    Membre du Club
    Inscrit en
    Septembre 2005
    Messages
    71
    Détails du profil
    Informations forums :
    Inscription : Septembre 2005
    Messages : 71
    Points : 47
    Points
    47
    Par défaut Problème avec exec.....................
    Bouh que je suis malheureuse !!!!

    En effet avec exec ça doit marcher aussi, il fait bien son execution (tous les fichiers qu'il doit me créer le sont) MAIS la page qui s'ouvre n'est pas celle escomptée mais un magnifique :
    Internal Server Error
    The server encountered an internal error or misconfiguration and was unable to complete your request.

    Please contact the server administrator, you@example.com and inform them of the time the error occurred, and anything you might have done that may have caused the error.

    More information about this error may be available in the server error log.
    Et en plus c'est toujours aussi long pour passer à la page suivante....

    Des idées :

  7. #7
    Expert confirmé
    Avatar de GLDavid
    Homme Profil pro
    Service Delivery Manager
    Inscrit en
    Janvier 2003
    Messages
    2 859
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Service Delivery Manager
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Janvier 2003
    Messages : 2 859
    Points : 4 809
    Points
    4 809
    Par défaut
    Tu es sous quel serveur ? Dans ce cas, il faut que tu consultes le log de ton serveur web.

    @++
    GLDavid
    Consultez la FAQ Perl ainsi que mes cours de Perl.
    N'oubliez pas les balises code ni le tag

    Je ne répond à aucune question technique par MP.

  8. #8
    Membre habitué
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    124
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 124
    Points : 145
    Points
    145
    Par défaut
    Moi je suis plus d'avis à utiliser 'System' ou '@tab=`$a` .

    Me semble que 'exec' coupe le programme pour effectuer la tache que tu lui demande.

    test :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    #!c:\perl\bin\perl.exe
     
    use Tk;
     
    $f = new MainWindow () ;
     
    $f -> Label (-text => "test la fenetre ne doit pas se fermer") -> pack () ;
    $f -> Button (-text => 'lancer exec' , -command => sub { exec("dir") ; } ) -> pack () ;
     
    MainLoop() ;

  9. #9
    Membre du Club
    Inscrit en
    Septembre 2005
    Messages
    71
    Détails du profil
    Informations forums :
    Inscription : Septembre 2005
    Messages : 71
    Points : 47
    Points
    47
    Par défaut
    Re-

    Pour répondre à GLDavid et à la question :
    Tu es sous quel serveur ? Dans ce cas, il faut que tu consultes le log de ton serveur web.
    Je suis sous apache /mod-perl.

    Et j'ai consulté le fichier error_log. La seule différence entre le lancement du script avec "open" et le lancement avec "system" ou "exec" (même résultat pour ces deux derniers !) est la première ligne du fichier error :
    [error] malformed header from script. Bad header=nom_de_ma_premiere_variable : nom_du_2°script_a_renvoyer.pl referer : http://cgi_bin/nom_de_mon_1°script.pl

    Ce qui confirme le problème avec exec ou system.
    Je ne sais pas trop ce que ça veut dire mais je vais creuser...
    Pour ce qui est de répondre à Hide :
    Moi je suis plus d'avis à utiliser 'System' ou '@tab=`$a` .
    Tu as la réponse plus haut et en effet, d'après ce que j'ai lu exec coupe le prog. J'ai pas testé ton script, mais il me semble que tu as raison.

    Merci de votre aide, je vais essayer de comprendre ce qui est mal fait dans l'entête de mon second script...
    MAIS ce qui me perturbe, c'est que même si j'emploie "system" à la place de "open", ça met quand même BEAUCOUP de temps à m'afficher la page d'erreur... J'ai bien peur qu'il ne l'affiche quand même qu'à la fin de l'exécution du csh...

  10. #10
    Membre habitué
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    124
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 124
    Points : 145
    Points
    145
    Par défaut
    La commande system créer un processus fils .

    Tant que le processus fils n'est pas fini le processus pere n'avance pas.

    La meilleur chose possible faire appel a un autre script perl avec la commande system/ ton 2eme script perl lancera ton calcul. se qui ne stopera pas ton processus, vu que se sont 2 processus différent.


    J'ai du mal à me comprendre moi même mais si tu comprend

  11. #11
    Membre du Club
    Inscrit en
    Septembre 2005
    Messages
    71
    Détails du profil
    Informations forums :
    Inscription : Septembre 2005
    Messages : 71
    Points : 47
    Points
    47
    Par défaut
    La meilleur chose possible faire appel a un autre script perl avec la commande system/ ton 2eme script perl lancera ton calcul. se qui ne stopera pas ton processus, vu que se sont 2 processus différent.
    Je pense en effet que c'est la solution ! Je ne voulais pas vraiment faire ça car ça impose de lancer plusieurs scripts en cascade, mais vu qu'apparemment y'a pas vraiment d'autres solutions....

    J'ai du mal à me comprendre moi même mais si tu comprend
    OUI j'ai bien compris, je pense

    Merci à tous !!!

  12. #12
    Membre du Club
    Inscrit en
    Septembre 2005
    Messages
    71
    Détails du profil
    Informations forums :
    Inscription : Septembre 2005
    Messages : 71
    Points : 47
    Points
    47
    Par défaut


    La meilleur chose possible faire appel a un autre script perl avec la commande system/ ton 2eme script perl lancera ton calcul. se qui ne stopera pas ton processus, vu que se sont 2 processus différent.
    En réfléchissant bien à ça, ça ne fait que reculer le problème...
    1) Je vais avoir ma première page = formulaire
    2) seconde page = confirmation des données en entrée
    3) lancement de mon calcul via le .csh = ATTENTE DE PLUSIEURS MINUTES A PLUSIEURES HEURES EN FONCTION...
    4) Page de résultats (si éventuellement le calcul n'a pas été trop long).

    Le truc est que je voudrais que la page 4 arrive plus tôt pour que l'utilisateur n'est pas la sensation que le calcul n'a pas démarré... Mais ça... : :

    Pour info, j'ai essayé
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $sortie = `fichier.pl`
    print $sortie
    Tout m'a donné le même résultat : tout fonctionne MAIS j'ai ma page qui s'affiche qu'à la fin du processus

    Z'avez pas une t'ite idée supplémentaire ???

  13. #13
    Membre habitué
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    124
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 124
    Points : 145
    Points
    145
    Par défaut
    Ahhh
    en faite tu dois récupérer les informations de ton calcul pour fournir la confirmation ???

    Hmm.

    Et donc tu veux qu'une page apparaise en attendant que le calcul se fasse ?

    Enfin si je comprend bien

  14. #14
    Membre du Club
    Inscrit en
    Septembre 2005
    Messages
    71
    Détails du profil
    Informations forums :
    Inscription : Septembre 2005
    Messages : 71
    Points : 47
    Points
    47
    Par défaut
    Bonjour !!!

    en faite tu dois récupérer les informations de ton calcul pour fournir la confirmation ???

    Hmm.

    Et donc tu veux qu'une page apparaise en attendant que le calcul se fasse ?

    Enfin si je comprend bien
    Tu as très bien compris !!!
    Et je me demande si c'est vraiment possible mon truc.... :

  15. #15
    Expert éminent
    Avatar de Jedai
    Homme Profil pro
    Enseignant
    Inscrit en
    Avril 2003
    Messages
    6 245
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Avril 2003
    Messages : 6 245
    Points : 8 586
    Points
    8 586
    Par défaut
    Je concevrai plutôt ça sous forme de fork détaché du processus de base avec un setsid (module POSIX), Ainsi le processus principal transmet le calcul à effectuer à ce fork et sans s'en préoccuper finit d'afficher la page Web. On peut ensuite envisager que le fork enregistre le résultat dans un fichier texte simple et qu'une autre page web permette de consulter ce résultat si le fichier est là (donc si le calcul est fini).

    --
    Jedaï

  16. #16
    Membre du Club
    Inscrit en
    Septembre 2005
    Messages
    71
    Détails du profil
    Informations forums :
    Inscription : Septembre 2005
    Messages : 71
    Points : 47
    Points
    47
    Par défaut Fork()
    Bonjour !

    Je me penche sur les problèmes de fork() suite à la réponse de Jedaï
    Je concevrai plutôt ça sous forme de fork détaché du processus de base avec un setsid (module POSIX), Ainsi le processus principal transmet le calcul à effectuer à ce fork et sans s'en préoccuper finit d'afficher la page Web.
    Seulement, ch'uis pas super douée ... J'ai reagrdé le forum et les FAQ sur la fonction fork(), mais j'ai pas tout compris... par exemple à quoi sert cette ligne ???
    Qu'est -ce que la commande "setsid" dont parle Jedaï ??

    Une fois que j'arriverai à faire tourner cette commande, j'ai en effet prévu de créer une nouvelle page web de récupération des résultats. mais je n'en suis pas encore là !!!

    Merci pour ces infos, parce que je ne trouve pas cette fonction facile à utiliser...

    Minusette

  17. #17
    Membre du Club
    Inscrit en
    Septembre 2005
    Messages
    71
    Détails du profil
    Informations forums :
    Inscription : Septembre 2005
    Messages : 71
    Points : 47
    Points
    47
    Par défaut [Résolu]
    Bonjour à tous !

    J'ai enfin résolu mon problème, grâce à Jédaï, un copain et la biblio sur internet !!!!
    D'ailleurs une petite adresse utile au passage : http://modperlbook.org/toc.html
    Pour info, pour ceux qui auraient le même problème que moi, je vous donne mon bout de code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    if (fork == 0)
    {
    ###  Récupération des données du formulaire  ###
         $a='toto.sh';
         $titi=param('titi');
         $tata=param('tata');
    ### Lancement du calcul CatSearch  ###
    $a="$a $titi $tata";
                    open (STDOUT,">/$titi.out");
                    open (STDERR,">/$titi.err");
     	system("$a &");
    	exit;
    }
    else
    {print redirect('http://cgi-bin/affichage.pl');
     
    }
    Pour l'explication : Ce bout de code permet de récupérer les données titi et tata d'un formulaire d'une page précédente, puis lance le fichier toto.sh en arrière plan et redirige le tout vers une page d'affichage pendant que le calcul de toto.sh s'exécute.
    Merci à tous de votre aide, car j'y serai jamais arrivé toute seule !!!

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

Discussions similaires

  1. probléme concernant le passage des variable d'une page web à une autre
    Par aefmaaradji dans le forum Développement Web avec .NET
    Réponses: 1
    Dernier message: 13/08/2010, 19h27
  2. Afficher une image d'une DB dans une page web
    Par akaii dans le forum VB.NET
    Réponses: 1
    Dernier message: 09/03/2009, 10h56
  3. passage d'un entier d'une page a une autre avec jsp
    Par MSM_007 dans le forum Servlets/JSP
    Réponses: 2
    Dernier message: 21/08/2006, 09h18
  4. Réponses: 7
    Dernier message: 26/07/2006, 14h48
  5. [debutant]passager une variable d'une page a une autre
    Par Eisy dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 17/03/2006, 11h18

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