Bonjour je suis en train de faire une petite interface mais je ne
connais pas encore bien le cgi.
Expliquons d'abord ou j'en suis: j'ai fait une 1ere page en HTML:
<HTML>
<TITLE>Y X Interface</TITLE>
<BODY BGCOLOR="#FFFFFF" LINK="#0000FF" VLINK="#660099"
ALINK="#660099">
<map name=img_map>
<area shape=rect coords=2,1,250,21 href="http://www.X.com">
Donc ceci envoie le fichier(j'espere) et les options dans une seconde
application.
Cette seconde application est x.cgi en voici le script pour l'instant
(loin d'estre final car j'ai qques lacunes en CGI):
#!/usr/bin/perl -w
use strict;
use CGI;
my $q;
my $query;
my $adress;
#start of html page
print "Content-type: text/html\r\n\r\n";
print "<head>\n";
print "<title>Interpro : Intermediary page</title>\n";
print "</head>\n";
print "<!-- Background white, links blue (unvisited), navy (visited),
red (active) -->\n";
print "<body bgcolor=#FFFFFF text=#000000 link=#0000FF vlink=#000080
alink=#FF0000>\n";
print "<b><font size =6>Y <font color=#FF0000 size=6>X</font>
Interface</b></font>\n<P>";
#use of transfered datas
$query=new CGI;
my $value1 = $query->param('SEQFILE');<= Est ce juste le nom du
fichier comme il apparait ou le fichier entier que je rappelle la?
my $value2 = $query->param('IPR');
my $value3 = $query->param('GO');
my $value4 = $query->param('SCR');
my $value5 = $query->param('CSC');
my $value6 = $query->param('TR_T');
my $value7 = $query->param('TR_L');
my $value8 = $query->param('DATALIB');
my $value0 = $query->content('SEQFILE');<-PAS SUR
print "<b>Let see characteristics of your query </b>: $value0,
$value2, $value3, $value4, $value5, $value6, $value7, $value8,<P>\n ";
print "<P><font color=#33CC99>y is working...Step 1 </font><P>\n";
#ici je pensais recuperer les données pour les metre sur mon disque et
ainsi pouvoir les re-utiliser quand je voulais?? .... Apparemment ce
n'ai pas ca!!
while (<$value0>) {
my $line=$_;
open (INTERM, ">tmp.txt");
print INTERM "$line\n";
close INTERM
}
#execution of the y perl script; ici je veux executer le script
yscan.pl avec les options recuperees de la premiere page et reprendre
les donnees qui en découlent dans out.txt...
system ("perl", "/Users/X/Yy/yscan.pl", "tmp.txt", $value2, $value3,
$value4, $value5, $value6, $value7, $value8) || die "There is a
problem of system!";
open (IN,"<out.txt");
print "<P><font color=#333399>y is working...Step 2 </font><P> \n";
while (<IN>) {
my $line=$_;
#use of the particular adress of this work
foreach ($line){
if (/^cd\s+tmp+(.+)/) {
$1= $adress;
}
#execution of shell commands
system ($line) || die "There is a problem with the other system";
}
}
print "<P><font color=#330066>y Work is finished, click here to see
result (do not forget to register it on your disk; for other format
-excel,...- contact <a
href=mailto:opal7313@yahoo.fr>HelpDesk</a>):</font><P>\n";
#redirect people through the result page
print "<a href= /Library/WebServer/Documents/TEST/tmp/$adress>RESULTS
</a>";
system ("rm", out.txt)
close IN;
Donc comme vous pouvez le constater je suis un peu perdu car je
voulais recuperer le fichier pour l'utiliser dans ce sript et je ne
l'ai pas! Que me manque t il?!
Que dois je faire pour que ceci soit "un plan sans accroc"!!!
Merci de me repondre si vous voyer mon probleme ou s'il a besoin
d'eclaicissement!
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
root
On Fri, 09 Jan 2004 06:11:45 -0800, lynn wrote:
Bonjour je suis en train de faire une petite interface mais je ne connais pas encore bien le cgi. Expliquons d'abord ou j'en suis: j'ai fait une 1ere page en HTML: <HTML> [...] </HTML>
Donc ceci envoie le fichier(j'espere) et les options dans une seconde application. Cette seconde application est x.cgi en voici le script pour l'instant (loin d'estre final car j'ai qques lacunes en CGI):
#!/usr/bin/perl -w
use strict; use CGI;
my $q; my $query; my $adress;
#start of html page print "Content-type: text/htmlrnrn"; print "<head>n"; print "<title>Interpro : Intermediary page</title>n"; print "</head>n"; print "<!-- Background white, links blue (unvisited), navy (visited), red (active) -->n"; print "<body bgcolor=#FFFFFF text=#000000 link=#0000FF vlink=#000080 alink=#FF0000>n"; print "<b><font size =6>Y <font color=#FF0000 size=6>X</font> Interface</b></font>n<P>";
#use of transfered datas $query=new CGI;
my $value1 = $query->param('SEQFILE');<= Est ce juste le nom du fichier comme il apparait ou le fichier entier que je rappelle la?
Normalement c'est le nom du fichier mais aussi un descripteur de fichier ouvert sur ce fichier... Mais il me semble qu'il y a eu du changement à ce sujet suivant la version de CGI.pm que tu utilises. Perso j'utilise la methode upload() voir ci-dessous.
my $value2 = $query->param('IPR'); my $value3 = $query->param('GO'); my $value4 = $query->param('SCR'); my $value5 = $query->param('CSC'); my $value6 = $query->param('TR_T'); my $value7 = $query->param('TR_L'); my $value8 = $query->param('DATALIB'); my $value0 = $query->content('SEQFILE');<-PAS SUR
print "<b>Let see characteristics of your query </b>: $value0, $value2, $value3, $value4, $value5, $value6, $value7, $value8,<P>n "; print "<P><font color=#33CC99>y is working...Step 1 </font><P>n";
#ici je pensais recuperer les données pour les metre sur mon disque et ainsi pouvoir les re-utiliser quand je voulais?? .... Apparemment ce n'ai pas ca!! while (<$value0>) { my $line=$_; open (INTERM, ">tmp.txt"); print INTERM "$linen"; close INTERM }
tu peux utiliser la methode upload() pour récuperer un descripteur de fichier ouvert sur le fichier SEQFILE :
my $fh = $query->upload( "SEQFILE" ) or die "Erreur SEQFILE : $!n"; open( INTERM, ">", "tmp.txt" ) or die "Erreur INTERM : $!n"; print INTERM $_ while( <$fh> ); close INTERM;
#execution of the y perl script; ici je veux executer le script yscan.pl avec les options recuperees de la premiere page et reprendre les donnees qui en découlent dans out.txt... system ("perl", "/Users/X/Yy/yscan.pl", "tmp.txt", $value2, $value3, $value4, $value5, $value6, $value7, $value8) || die "There is a problem of system!"; open (IN,"<out.txt"); print "<P><font color=#333399>y is working...Step 2 </font><P> n"; while (<IN>) { my $line=$_;
Tu peux directement faire :
while( my $line = <IN> ) {
#use of the particular adress of this work foreach ($line){
Ton foreach est inutile ici. Foreach sert a parcourir les elements d'une liste, dans ton cas tu as une liste avec un seul element qui est le scalaire $line. Ça reviens donc à faire "$_ = $line" alors que tu viens de faire "$line = $_" dans la ligne au dessus...
if (/^cds+tmp+(.+)/) { $1= $adress;
C'est pas plutôt $adress = $1 que tu veux faire ? capturer le (.+) et le mettre dans $adress ?
} #execution of shell commands system ($line) || die "There is a problem with the other system"; } } print "<P><font color=#330066>y Work is finished, click here to see result (do not forget to register it on your disk; for other format -excel,...- contact <a href=mailto:HelpDesk</a>):</font><P>n"; #redirect people through the result page print "<a href= /Library/WebServer/Documents/TEST/tmp/$adress>RESULTS </a>"; system ("rm", out.txt) close IN;
On Fri, 09 Jan 2004 06:11:45 -0800, lynn wrote:
Bonjour je suis en train de faire une petite interface mais je ne
connais pas encore bien le cgi.
Expliquons d'abord ou j'en suis: j'ai fait une 1ere page en HTML:
<HTML>
[...]
</HTML>
Donc ceci envoie le fichier(j'espere) et les options dans une seconde
application.
Cette seconde application est x.cgi en voici le script pour l'instant
(loin d'estre final car j'ai qques lacunes en CGI):
#!/usr/bin/perl -w
use strict;
use CGI;
my $q;
my $query;
my $adress;
#start of html page
print "Content-type: text/htmlrnrn";
print "<head>n";
print "<title>Interpro : Intermediary page</title>n";
print "</head>n";
print "<!-- Background white, links blue (unvisited), navy (visited),
red (active) -->n";
print "<body bgcolor=#FFFFFF text=#000000 link=#0000FF vlink=#000080
alink=#FF0000>n";
print "<b><font size =6>Y <font color=#FF0000 size=6>X</font>
Interface</b></font>n<P>";
#use of transfered datas
$query=new CGI;
my $value1 = $query->param('SEQFILE');<= Est ce juste le nom du
fichier comme il apparait ou le fichier entier que je rappelle la?
Normalement c'est le nom du fichier mais aussi un descripteur de fichier
ouvert sur ce fichier... Mais il me semble qu'il y a eu du changement à
ce sujet suivant la version de CGI.pm que tu utilises. Perso j'utilise la
methode upload() voir ci-dessous.
my $value2 = $query->param('IPR');
my $value3 = $query->param('GO');
my $value4 = $query->param('SCR');
my $value5 = $query->param('CSC');
my $value6 = $query->param('TR_T');
my $value7 = $query->param('TR_L');
my $value8 = $query->param('DATALIB');
my $value0 = $query->content('SEQFILE');<-PAS SUR
print "<b>Let see characteristics of your query </b>: $value0,
$value2, $value3, $value4, $value5, $value6, $value7, $value8,<P>n ";
print "<P><font color=#33CC99>y is working...Step 1 </font><P>n";
#ici je pensais recuperer les données pour les metre sur mon disque et
ainsi pouvoir les re-utiliser quand je voulais?? .... Apparemment ce
n'ai pas ca!!
while (<$value0>) {
my $line=$_;
open (INTERM, ">tmp.txt");
print INTERM "$linen";
close INTERM
}
tu peux utiliser la methode upload() pour récuperer un descripteur de
fichier ouvert sur le fichier SEQFILE :
my $fh = $query->upload( "SEQFILE" ) or die "Erreur SEQFILE : $!n";
open( INTERM, ">", "tmp.txt" ) or die "Erreur INTERM : $!n";
print INTERM $_ while( <$fh> );
close INTERM;
#execution of the y perl script; ici je veux executer le script
yscan.pl avec les options recuperees de la premiere page et reprendre
les donnees qui en découlent dans out.txt...
system ("perl", "/Users/X/Yy/yscan.pl", "tmp.txt", $value2, $value3,
$value4, $value5, $value6, $value7, $value8) || die "There is a
problem of system!";
open (IN,"<out.txt");
print "<P><font color=#333399>y is working...Step 2 </font><P> n";
while (<IN>) {
my $line=$_;
Tu peux directement faire :
while( my $line = <IN> ) {
#use of the particular adress of this work
foreach ($line){
Ton foreach est inutile ici.
Foreach sert a parcourir les elements d'une liste, dans ton cas tu as
une liste avec un seul element qui est le scalaire $line. Ça reviens
donc à faire "$_ = $line" alors que tu viens de faire "$line = $_" dans
la ligne au dessus...
if (/^cds+tmp+(.+)/) {
$1= $adress;
C'est pas plutôt $adress = $1 que tu veux faire ? capturer le (.+) et le
mettre dans $adress ?
}
#execution of shell commands
system ($line) || die "There is a problem with the other system";
}
}
print "<P><font color=#330066>y Work is finished, click here to see
result (do not forget to register it on your disk; for other format
-excel,...- contact <a
href=mailto:opal7313@yahoo.fr>HelpDesk</a>):</font><P>n";
#redirect people through the result page
print "<a href= /Library/WebServer/Documents/TEST/tmp/$adress>RESULTS
</a>";
system ("rm", out.txt)
close IN;
Bonjour je suis en train de faire une petite interface mais je ne connais pas encore bien le cgi. Expliquons d'abord ou j'en suis: j'ai fait une 1ere page en HTML: <HTML> [...] </HTML>
Donc ceci envoie le fichier(j'espere) et les options dans une seconde application. Cette seconde application est x.cgi en voici le script pour l'instant (loin d'estre final car j'ai qques lacunes en CGI):
#!/usr/bin/perl -w
use strict; use CGI;
my $q; my $query; my $adress;
#start of html page print "Content-type: text/htmlrnrn"; print "<head>n"; print "<title>Interpro : Intermediary page</title>n"; print "</head>n"; print "<!-- Background white, links blue (unvisited), navy (visited), red (active) -->n"; print "<body bgcolor=#FFFFFF text=#000000 link=#0000FF vlink=#000080 alink=#FF0000>n"; print "<b><font size =6>Y <font color=#FF0000 size=6>X</font> Interface</b></font>n<P>";
#use of transfered datas $query=new CGI;
my $value1 = $query->param('SEQFILE');<= Est ce juste le nom du fichier comme il apparait ou le fichier entier que je rappelle la?
Normalement c'est le nom du fichier mais aussi un descripteur de fichier ouvert sur ce fichier... Mais il me semble qu'il y a eu du changement à ce sujet suivant la version de CGI.pm que tu utilises. Perso j'utilise la methode upload() voir ci-dessous.
my $value2 = $query->param('IPR'); my $value3 = $query->param('GO'); my $value4 = $query->param('SCR'); my $value5 = $query->param('CSC'); my $value6 = $query->param('TR_T'); my $value7 = $query->param('TR_L'); my $value8 = $query->param('DATALIB'); my $value0 = $query->content('SEQFILE');<-PAS SUR
print "<b>Let see characteristics of your query </b>: $value0, $value2, $value3, $value4, $value5, $value6, $value7, $value8,<P>n "; print "<P><font color=#33CC99>y is working...Step 1 </font><P>n";
#ici je pensais recuperer les données pour les metre sur mon disque et ainsi pouvoir les re-utiliser quand je voulais?? .... Apparemment ce n'ai pas ca!! while (<$value0>) { my $line=$_; open (INTERM, ">tmp.txt"); print INTERM "$linen"; close INTERM }
tu peux utiliser la methode upload() pour récuperer un descripteur de fichier ouvert sur le fichier SEQFILE :
my $fh = $query->upload( "SEQFILE" ) or die "Erreur SEQFILE : $!n"; open( INTERM, ">", "tmp.txt" ) or die "Erreur INTERM : $!n"; print INTERM $_ while( <$fh> ); close INTERM;
#execution of the y perl script; ici je veux executer le script yscan.pl avec les options recuperees de la premiere page et reprendre les donnees qui en découlent dans out.txt... system ("perl", "/Users/X/Yy/yscan.pl", "tmp.txt", $value2, $value3, $value4, $value5, $value6, $value7, $value8) || die "There is a problem of system!"; open (IN,"<out.txt"); print "<P><font color=#333399>y is working...Step 2 </font><P> n"; while (<IN>) { my $line=$_;
Tu peux directement faire :
while( my $line = <IN> ) {
#use of the particular adress of this work foreach ($line){
Ton foreach est inutile ici. Foreach sert a parcourir les elements d'une liste, dans ton cas tu as une liste avec un seul element qui est le scalaire $line. Ça reviens donc à faire "$_ = $line" alors que tu viens de faire "$line = $_" dans la ligne au dessus...
if (/^cds+tmp+(.+)/) { $1= $adress;
C'est pas plutôt $adress = $1 que tu veux faire ? capturer le (.+) et le mettre dans $adress ?
} #execution of shell commands system ($line) || die "There is a problem with the other system"; } } print "<P><font color=#330066>y Work is finished, click here to see result (do not forget to register it on your disk; for other format -excel,...- contact <a href=mailto:HelpDesk</a>):</font><P>n"; #redirect people through the result page print "<a href= /Library/WebServer/Documents/TEST/tmp/$adress>RESULTS </a>"; system ("rm", out.txt) close IN;
opal7313
Meci pour ces precisions!!
Mais j'ai encore un probleme surement stupide mais qui ne me saute pas aux yeux: en effet quand j'execute Y.html avec un ficher sur mon Y.cgi nouveau (voir suite) je n'obtient pas ce que je souhaite: je n'ai pas la copie escompte sur mon disque mais il est bien la lorsque je l'edite sur cette fenetre html intermediaire.
#!/usr/bin/perl -w
use strict; use CGI;
my $q; my $query; my $adress;
#start of html page print "Content-type: text/htmlrnrn"; print "<head>n"; print "<title>Y : Intermediary page</title>n"; print "</head>n"; print "<!-- Background white, links blue (unvisited), navy (visited), red (active) -->n"; print "<body bgcolor=#FFFFFF text=#000000 link=#0000FF vlink=#000080 alink=#FF0000>n"; print "<b><font size =6>Y Interface</b></font>n<P>";
#use of transfered datas $query=new CGI;
my $value1 = $query->param('SEQFILE'); my $value2 = $query->param('IPR'); my $value3 = $query->param('GO'); my $value4 = $query->param('SCR'); my $value5 = $query->param('CSC'); my $value6 = $query->param('TR_T'); my $value7 = $query->param('TR_L'); my $value8 = $query->param('DATALIB'); print "<b>Let see characteristics of your query </b>: $value1, $value2, $value3, $value4, $value5, $value6, $value7, $value8,<P>n "; print "<P><font color=#33CC99>Y is working...Step 1 </font><P>n";
#copy of the transfered file
open (INTERM,">","/Users/X/Desktop/$value1");<= N'ouvre apparemment pas le fichier souhaite while (<$value1>) { #my $line=$_; print INTERM "$_n";<= n'edite pas le texte dans ce fichier par consequence print "$_n";<íite parfaitement les ligne du fichier transfere sur la page cgi } #my $fh = $query->upload( "SEQFILE" ) or die "Erreur SEQFILE : $!n"; # open( INTERM, ">", "/Users/X/Desktop/$value1" ) or die "Erreur INTERM : $!n"; # print INTERM $_ while( <$fh> ); # print "$_n"; # close INTERM; Malheuresement le reste du script depend du bon fonctionnement de cette premiere partie ce qui n'es pas le cas!!!
#execution of the interpro perl script system ("/usr/bin/perl", "/Library/WebServer/Documents/TEST/y.pl", "/Users/X/Desktop/$value1", $value2, $value3, $value4, $value5, $value6, $value7, $value8) || die "There is a problem of system!"; open (IN,">out.txt"); print "<P><font color=#333399>Interpro is working...Step 2 </font><P> n";
#use of the particular adress of this work while (<IN>) { my $line=$_; if (/^cds+tmp+(.+)/) { $adress = $1; print "$adressn"; } #execution of shell commands system ($line) || die "There is a problem with the second shell commends"; }
print "<P><font color=#330066>Y Work is finished, click here to see result (do not forget to register it on your disk; for other format -excel,...- contact <a href=mailto:HelpDesk</a>):</font><P>n";
#redirect people through the result page print "<a href= /Library/WebServer/Documents/TEST/tmp/$adress>RESULTS </a>"; close INTERM; close IN;
Encore merci d'avance Je boue de ne pas voir pourquoi!!!
Lynn
Meci pour ces precisions!!
Mais j'ai encore un probleme surement stupide mais qui ne me saute pas
aux yeux: en effet quand j'execute Y.html avec un ficher sur mon Y.cgi
nouveau (voir suite) je n'obtient pas ce que je souhaite: je n'ai pas
la copie escompte sur mon disque mais il est bien la lorsque je
l'edite sur cette fenetre html intermediaire.
#!/usr/bin/perl -w
use strict;
use CGI;
my $q;
my $query;
my $adress;
#start of html page
print "Content-type: text/htmlrnrn";
print "<head>n";
print "<title>Y : Intermediary page</title>n";
print "</head>n";
print "<!-- Background white, links blue (unvisited), navy (visited),
red (active) -->n";
print "<body bgcolor=#FFFFFF text=#000000 link=#0000FF vlink=#000080
alink=#FF0000>n";
print "<b><font size =6>Y Interface</b></font>n<P>";
#use of transfered datas
$query=new CGI;
my $value1 = $query->param('SEQFILE');
my $value2 = $query->param('IPR');
my $value3 = $query->param('GO');
my $value4 = $query->param('SCR');
my $value5 = $query->param('CSC');
my $value6 = $query->param('TR_T');
my $value7 = $query->param('TR_L');
my $value8 = $query->param('DATALIB');
print "<b>Let see characteristics of your query </b>: $value1,
$value2, $value3, $value4, $value5, $value6, $value7, $value8,<P>n ";
print "<P><font color=#33CC99>Y is working...Step 1 </font><P>n";
#copy of the transfered file
open (INTERM,">","/Users/X/Desktop/$value1");<= N'ouvre apparemment
pas le fichier souhaite
while (<$value1>) {
#my $line=$_;
print INTERM "$_n";<= n'edite pas le texte dans ce fichier par
consequence
print "$_n";<íite parfaitement les ligne du fichier transfere sur
la page cgi
}
#my $fh = $query->upload( "SEQFILE" ) or die "Erreur SEQFILE : $!n";
# open( INTERM, ">", "/Users/X/Desktop/$value1" ) or die "Erreur
INTERM : $!n";
# print INTERM $_ while( <$fh> );
# print "$_n";
# close INTERM;
Malheuresement le reste du script depend du bon fonctionnement de
cette premiere partie ce qui n'es pas le cas!!!
#execution of the interpro perl script
system ("/usr/bin/perl", "/Library/WebServer/Documents/TEST/y.pl",
"/Users/X/Desktop/$value1", $value2, $value3, $value4, $value5,
$value6, $value7, $value8) || die "There is a problem of system!";
open (IN,">out.txt");
print "<P><font color=#333399>Interpro is working...Step 2 </font><P>
n";
#use of the particular adress of this work
while (<IN>) {
my $line=$_;
if (/^cds+tmp+(.+)/) {
$adress = $1;
print "$adressn";
}
#execution of shell commands
system ($line) || die "There is a problem with the second shell
commends";
}
print "<P><font color=#330066>Y Work is finished, click here to see
result (do not forget to register it on your disk; for other format
-excel,...- contact <a
href=mailto:opal7313@yahoo.fr>HelpDesk</a>):</font><P>n";
#redirect people through the result page
print "<a href= /Library/WebServer/Documents/TEST/tmp/$adress>RESULTS
</a>";
close INTERM;
close IN;
Encore merci d'avance
Je boue de ne pas voir pourquoi!!!
Mais j'ai encore un probleme surement stupide mais qui ne me saute pas aux yeux: en effet quand j'execute Y.html avec un ficher sur mon Y.cgi nouveau (voir suite) je n'obtient pas ce que je souhaite: je n'ai pas la copie escompte sur mon disque mais il est bien la lorsque je l'edite sur cette fenetre html intermediaire.
#!/usr/bin/perl -w
use strict; use CGI;
my $q; my $query; my $adress;
#start of html page print "Content-type: text/htmlrnrn"; print "<head>n"; print "<title>Y : Intermediary page</title>n"; print "</head>n"; print "<!-- Background white, links blue (unvisited), navy (visited), red (active) -->n"; print "<body bgcolor=#FFFFFF text=#000000 link=#0000FF vlink=#000080 alink=#FF0000>n"; print "<b><font size =6>Y Interface</b></font>n<P>";
#use of transfered datas $query=new CGI;
my $value1 = $query->param('SEQFILE'); my $value2 = $query->param('IPR'); my $value3 = $query->param('GO'); my $value4 = $query->param('SCR'); my $value5 = $query->param('CSC'); my $value6 = $query->param('TR_T'); my $value7 = $query->param('TR_L'); my $value8 = $query->param('DATALIB'); print "<b>Let see characteristics of your query </b>: $value1, $value2, $value3, $value4, $value5, $value6, $value7, $value8,<P>n "; print "<P><font color=#33CC99>Y is working...Step 1 </font><P>n";
#copy of the transfered file
open (INTERM,">","/Users/X/Desktop/$value1");<= N'ouvre apparemment pas le fichier souhaite while (<$value1>) { #my $line=$_; print INTERM "$_n";<= n'edite pas le texte dans ce fichier par consequence print "$_n";<íite parfaitement les ligne du fichier transfere sur la page cgi } #my $fh = $query->upload( "SEQFILE" ) or die "Erreur SEQFILE : $!n"; # open( INTERM, ">", "/Users/X/Desktop/$value1" ) or die "Erreur INTERM : $!n"; # print INTERM $_ while( <$fh> ); # print "$_n"; # close INTERM; Malheuresement le reste du script depend du bon fonctionnement de cette premiere partie ce qui n'es pas le cas!!!
#execution of the interpro perl script system ("/usr/bin/perl", "/Library/WebServer/Documents/TEST/y.pl", "/Users/X/Desktop/$value1", $value2, $value3, $value4, $value5, $value6, $value7, $value8) || die "There is a problem of system!"; open (IN,">out.txt"); print "<P><font color=#333399>Interpro is working...Step 2 </font><P> n";
#use of the particular adress of this work while (<IN>) { my $line=$_; if (/^cds+tmp+(.+)/) { $adress = $1; print "$adressn"; } #execution of shell commands system ($line) || die "There is a problem with the second shell commends"; }
print "<P><font color=#330066>Y Work is finished, click here to see result (do not forget to register it on your disk; for other format -excel,...- contact <a href=mailto:HelpDesk</a>):</font><P>n";
#redirect people through the result page print "<a href= /Library/WebServer/Documents/TEST/tmp/$adress>RESULTS </a>"; close INTERM; close IN;
Encore merci d'avance Je boue de ne pas voir pourquoi!!!
Lynn
root
On Mon, 12 Jan 2004 04:33:34 -0800, lynn wrote:
Meci pour ces precisions!!
Mais j'ai encore un probleme surement stupide mais qui ne me saute pas aux yeux: en effet quand j'execute Y.html avec un ficher sur mon Y.cgi nouveau (voir suite) je n'obtient pas ce que je souhaite: je n'ai pas la copie escompte sur mon disque mais il est bien la lorsque je l'edite sur cette fenetre html intermediaire.
#!/usr/bin/perl -w
use strict; use CGI;
my $q; my $query; my $adress;
#start of html page print "Content-type: text/htmlrnrn"; print "<head>n"; print "<title>Y : Intermediary page</title>n"; print "</head>n"; print "<!-- Background white, links blue (unvisited), navy (visited), red (active) -->n"; print "<body bgcolor=#FFFFFF text=#000000 link=#0000FF vlink=#000080 alink=#FF0000>n"; print "<b><font size =6>Y Interface</b></font>n<P>";
#use of transfered datas $query=new CGI;
my $value1 = $query->param('SEQFILE'); my $value2 = $query->param('IPR'); my $value3 = $query->param('GO'); my $value4 = $query->param('SCR'); my $value5 = $query->param('CSC'); my $value6 = $query->param('TR_T'); my $value7 = $query->param('TR_L'); my $value8 = $query->param('DATALIB'); print "<b>Let see characteristics of your query </b>: $value1, $value2, $value3, $value4, $value5, $value6, $value7, $value8,<P>n "; print "<P><font color=#33CC99>Y is working...Step 1 </font><P>n";
#copy of the transfered file
open (INTERM,">","/Users/X/Desktop/$value1");<= N'ouvre apparemment pas le fichier souhaite
Le serveur Web a t'il bien les droits d'écriture dans ce repertoire /Users/X/Desktop ?
Tu peux aussi regarder dans les fichiers de logs (`error_log' pour Apache) du serveur web, si tu y a accès, pour voir d'eventuels messages d'erreurs...
Sinon, une remarque question « sécurité » : Il ne faut jamais utiliser le nom de fichier reçu par upload !!!
Ce nom de fichier peut être n'importe quoi, comme par exemple : ../../../etc/password
qui donnerait donc dans ton open() : /Users/X/Desktop/../../../etc/password
et au final ouvrirait l'accès au fichier : /etc/password
Une personne pourrait ainsi écrire dans n'importe quel fichier accessible en écriture par le serveur web en uploadant simplement un fichier avec un nom forgé de cette sorte.
Pour éviter cela, tu peux utiliser le module File::Temp pour créer tes fichiers temporaires ("perldoc File::Temp") plutôt que d'utiliser cette concatenation.
while (<$value1>) { #my $line=$_; print INTERM "$_n";<= n'edite pas le texte dans ce fichier par consequence print "$_n";<íite parfaitement les ligne du fichier transfere sur la page cgi } #my $fh = $query->upload( "SEQFILE" ) or die "Erreur SEQFILE : $!n"; # open( INTERM, ">", "/Users/X/Desktop/$value1" ) or die "Erreur INTERM : $!n"; # print INTERM $_ while( <$fh> ); # print "$_n"; # close INTERM; Malheuresement le reste du script depend du bon fonctionnement de cette premiere partie ce qui n'es pas le cas!!!
#execution of the interpro perl script system ("/usr/bin/perl", "/Library/WebServer/Documents/TEST/y.pl", "/Users/X/Desktop/$value1", $value2, $value3, $value4, $value5, $value6, $value7, $value8) || die "There is a problem of system!"; open (IN,">out.txt"); print "<P><font color=#333399>Interpro is working...Step 2 </font><P> n";
#use of the particular adress of this work while (<IN>) { my $line=$_; if (/^cds+tmp+(.+)/) { $adress = $1; print "$adressn"; } #execution of shell commands system ($line) || die "There is a problem with the second shell commends"; }
print "<P><font color=#330066>Y Work is finished, click here to see result (do not forget to register it on your disk; for other format -excel,...- contact <a href=mailto:HelpDesk</a>):</font><P>n";
#redirect people through the result page print "<a href= /Library/WebServer/Documents/TEST/tmp/$adress>RESULTS </a>"; close INTERM; close IN;
Encore merci d'avance Je boue de ne pas voir pourquoi!!!
Lynn
On Mon, 12 Jan 2004 04:33:34 -0800, lynn wrote:
Meci pour ces precisions!!
Mais j'ai encore un probleme surement stupide mais qui ne me saute pas
aux yeux: en effet quand j'execute Y.html avec un ficher sur mon Y.cgi
nouveau (voir suite) je n'obtient pas ce que je souhaite: je n'ai pas
la copie escompte sur mon disque mais il est bien la lorsque je
l'edite sur cette fenetre html intermediaire.
#!/usr/bin/perl -w
use strict;
use CGI;
my $q;
my $query;
my $adress;
#start of html page
print "Content-type: text/htmlrnrn";
print "<head>n";
print "<title>Y : Intermediary page</title>n";
print "</head>n";
print "<!-- Background white, links blue (unvisited), navy (visited),
red (active) -->n";
print "<body bgcolor=#FFFFFF text=#000000 link=#0000FF vlink=#000080
alink=#FF0000>n";
print "<b><font size =6>Y Interface</b></font>n<P>";
#use of transfered datas
$query=new CGI;
my $value1 = $query->param('SEQFILE');
my $value2 = $query->param('IPR');
my $value3 = $query->param('GO');
my $value4 = $query->param('SCR');
my $value5 = $query->param('CSC');
my $value6 = $query->param('TR_T');
my $value7 = $query->param('TR_L');
my $value8 = $query->param('DATALIB');
print "<b>Let see characteristics of your query </b>: $value1,
$value2, $value3, $value4, $value5, $value6, $value7, $value8,<P>n ";
print "<P><font color=#33CC99>Y is working...Step 1 </font><P>n";
#copy of the transfered file
open (INTERM,">","/Users/X/Desktop/$value1");<= N'ouvre apparemment
pas le fichier souhaite
Le serveur Web a t'il bien les droits d'écriture dans ce repertoire
/Users/X/Desktop ?
Tu peux aussi regarder dans les fichiers de logs (`error_log' pour Apache)
du serveur web, si tu y a accès, pour voir d'eventuels messages d'erreurs...
Sinon, une remarque question « sécurité » :
Il ne faut jamais utiliser le nom de fichier reçu par upload !!!
Ce nom de fichier peut être n'importe quoi, comme par exemple :
../../../etc/password
qui donnerait donc dans ton open() :
/Users/X/Desktop/../../../etc/password
et au final ouvrirait l'accès au fichier :
/etc/password
Une personne pourrait ainsi écrire dans n'importe quel fichier
accessible en écriture par le serveur web en uploadant simplement un
fichier avec un nom forgé de cette sorte.
Pour éviter cela, tu peux utiliser le module File::Temp pour créer tes
fichiers temporaires ("perldoc File::Temp") plutôt que d'utiliser cette
concatenation.
while (<$value1>) {
#my $line=$_;
print INTERM "$_n";<= n'edite pas le texte dans ce fichier par
consequence
print "$_n";<íite parfaitement les ligne du fichier transfere sur
la page cgi
}
#my $fh = $query->upload( "SEQFILE" ) or die "Erreur SEQFILE : $!n";
# open( INTERM, ">", "/Users/X/Desktop/$value1" ) or die "Erreur
INTERM : $!n";
# print INTERM $_ while( <$fh> );
# print "$_n";
# close INTERM;
Malheuresement le reste du script depend du bon fonctionnement de
cette premiere partie ce qui n'es pas le cas!!!
#execution of the interpro perl script
system ("/usr/bin/perl", "/Library/WebServer/Documents/TEST/y.pl",
"/Users/X/Desktop/$value1", $value2, $value3, $value4, $value5,
$value6, $value7, $value8) || die "There is a problem of system!";
open (IN,">out.txt");
print "<P><font color=#333399>Interpro is working...Step 2 </font><P>
n";
#use of the particular adress of this work
while (<IN>) {
my $line=$_;
if (/^cds+tmp+(.+)/) {
$adress = $1;
print "$adressn";
}
#execution of shell commands
system ($line) || die "There is a problem with the second shell
commends";
}
print "<P><font color=#330066>Y Work is finished, click here to see
result (do not forget to register it on your disk; for other format
-excel,...- contact <a
href=mailto:opal7313@yahoo.fr>HelpDesk</a>):</font><P>n";
#redirect people through the result page
print "<a href= /Library/WebServer/Documents/TEST/tmp/$adress>RESULTS
</a>";
close INTERM;
close IN;
Encore merci d'avance
Je boue de ne pas voir pourquoi!!!
Mais j'ai encore un probleme surement stupide mais qui ne me saute pas aux yeux: en effet quand j'execute Y.html avec un ficher sur mon Y.cgi nouveau (voir suite) je n'obtient pas ce que je souhaite: je n'ai pas la copie escompte sur mon disque mais il est bien la lorsque je l'edite sur cette fenetre html intermediaire.
#!/usr/bin/perl -w
use strict; use CGI;
my $q; my $query; my $adress;
#start of html page print "Content-type: text/htmlrnrn"; print "<head>n"; print "<title>Y : Intermediary page</title>n"; print "</head>n"; print "<!-- Background white, links blue (unvisited), navy (visited), red (active) -->n"; print "<body bgcolor=#FFFFFF text=#000000 link=#0000FF vlink=#000080 alink=#FF0000>n"; print "<b><font size =6>Y Interface</b></font>n<P>";
#use of transfered datas $query=new CGI;
my $value1 = $query->param('SEQFILE'); my $value2 = $query->param('IPR'); my $value3 = $query->param('GO'); my $value4 = $query->param('SCR'); my $value5 = $query->param('CSC'); my $value6 = $query->param('TR_T'); my $value7 = $query->param('TR_L'); my $value8 = $query->param('DATALIB'); print "<b>Let see characteristics of your query </b>: $value1, $value2, $value3, $value4, $value5, $value6, $value7, $value8,<P>n "; print "<P><font color=#33CC99>Y is working...Step 1 </font><P>n";
#copy of the transfered file
open (INTERM,">","/Users/X/Desktop/$value1");<= N'ouvre apparemment pas le fichier souhaite
Le serveur Web a t'il bien les droits d'écriture dans ce repertoire /Users/X/Desktop ?
Tu peux aussi regarder dans les fichiers de logs (`error_log' pour Apache) du serveur web, si tu y a accès, pour voir d'eventuels messages d'erreurs...
Sinon, une remarque question « sécurité » : Il ne faut jamais utiliser le nom de fichier reçu par upload !!!
Ce nom de fichier peut être n'importe quoi, comme par exemple : ../../../etc/password
qui donnerait donc dans ton open() : /Users/X/Desktop/../../../etc/password
et au final ouvrirait l'accès au fichier : /etc/password
Une personne pourrait ainsi écrire dans n'importe quel fichier accessible en écriture par le serveur web en uploadant simplement un fichier avec un nom forgé de cette sorte.
Pour éviter cela, tu peux utiliser le module File::Temp pour créer tes fichiers temporaires ("perldoc File::Temp") plutôt que d'utiliser cette concatenation.
while (<$value1>) { #my $line=$_; print INTERM "$_n";<= n'edite pas le texte dans ce fichier par consequence print "$_n";<íite parfaitement les ligne du fichier transfere sur la page cgi } #my $fh = $query->upload( "SEQFILE" ) or die "Erreur SEQFILE : $!n"; # open( INTERM, ">", "/Users/X/Desktop/$value1" ) or die "Erreur INTERM : $!n"; # print INTERM $_ while( <$fh> ); # print "$_n"; # close INTERM; Malheuresement le reste du script depend du bon fonctionnement de cette premiere partie ce qui n'es pas le cas!!!
#execution of the interpro perl script system ("/usr/bin/perl", "/Library/WebServer/Documents/TEST/y.pl", "/Users/X/Desktop/$value1", $value2, $value3, $value4, $value5, $value6, $value7, $value8) || die "There is a problem of system!"; open (IN,">out.txt"); print "<P><font color=#333399>Interpro is working...Step 2 </font><P> n";
#use of the particular adress of this work while (<IN>) { my $line=$_; if (/^cds+tmp+(.+)/) { $adress = $1; print "$adressn"; } #execution of shell commands system ($line) || die "There is a problem with the second shell commends"; }
print "<P><font color=#330066>Y Work is finished, click here to see result (do not forget to register it on your disk; for other format -excel,...- contact <a href=mailto:HelpDesk</a>):</font><P>n";
#redirect people through the result page print "<a href= /Library/WebServer/Documents/TEST/tmp/$adress>RESULTS </a>"; close INTERM; close IN;
Encore merci d'avance Je boue de ne pas voir pourquoi!!!
Lynn
opal7313
Bonjour,
En effet après examen du error_log, il s'agit bien de defaut de permission pour INTERM je vais donc rechercher comment changer ceci tout en concervant un certaine sécurité à l'ensemble; merci pour les petites remarques en plus, je me suis empressee de les suivre!
Si vous avez des solutions simples a ce probleme je suis preneuse!!
Lynn
Bonjour,
En effet après examen du error_log, il s'agit bien de defaut de
permission pour INTERM je vais donc rechercher comment changer ceci
tout en concervant un certaine sécurité à l'ensemble; merci pour les
petites remarques en plus, je me suis empressee de les suivre!
Si vous avez des solutions simples a ce probleme je suis preneuse!!
En effet après examen du error_log, il s'agit bien de defaut de permission pour INTERM je vais donc rechercher comment changer ceci tout en concervant un certaine sécurité à l'ensemble; merci pour les petites remarques en plus, je me suis empressee de les suivre!
Si vous avez des solutions simples a ce probleme je suis preneuse!!