Bonjour,
Ma question a déjà été abordée dans plusieurs discussions.
J'ai un CGI A appelle un autre CGI B qui effectue des traitements en fonction des paramètres saisis dans le formulaire de A. Ce deuxième CGI met un temps énorme pour faire les traitements (+/- 30 min). Ce qui provoque une erreur au niveau du serveur (erreur 500).
J'essaie donc de lancer le script B qui met du temps à s'exécuter en tache de fond depuis A.
Voilà où j'en suis.
Dans le script A, via un formulaire, l'utilisateur fait un choix et valide celui-ci. Le paramètre saisi par l'utilisateur est récupéré dans le même script ce qui remplit la condition pour lancer la commande system() qui se charge de lancer le script B en tâche de fond.
Voici le script A accueil.pl :
Qui est chargé de lancé le script B traitement.pl :
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
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32 #!C:/wamp/apps/Perl/bin/perl.exe use strict; use warnings; use DBI; use CGI; use CGI::Carp qw(fatalsToBrowser); my $cgi = CGI->new; if ($cgi->param('tableau')) { my $param = $cgi->param('tableau'); my $commande = 'perl C:/wamp/www/traitement.pl '.$param.' &'; system($commande); # redirection my $url_redirection = "accueil.pl"; print $cgi->header(-Refresh=>"30; URL=$url_redirection"); } else { print $cgi->header(); print $cgi->start_html(); print ' <form method="post" action="accueil.pl"> <p><input type="radio" name="tableau" id="t2_1" value="79"/>tableau fruits</p> <p><input type="radio" name="tableau" id="t2_2" value="157"/>tableau légumes</p> <p><input type="submit" value="Lancer le traitement" /></p> </form> '; print $cgi->end_html(); }
Une fois, le commande system() exécutée, j'effectue une redirection du script A sur lui-même.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 #!/usr/bin/perl use strict; use warnings; use DBI; # Récupération du tableau à traiter my $tableau = $ARGV[0]; # traitement qui prend du temps avec pleins de requêtes dans MySQL...
Lorsque je fais des traitements moins longs dans B la redirection ne fonctionne pas avant que le script B aie terminé ses traitements.
Lorsque je fais le traitement complet dans B, j'ai l'erreur 500 qui s'affiche.
Si quelqu'un a une lecture, une méthode de travaille, voire une solution à me conseiller je suis preneur !
Partager