Naviguation dans :  Perl  JavaScript  Détail  - load.cgi?Appel=histoAdmin
 présentée :  par cas d'appel   par traitements 
Retour à l'accueil
  
     
 Requêtes 

 load – Admin 

 histoAdmin 

Requêtes de Ça-déménage.com
Accès professionnel
Historique des messages
  
 
 Bibliothèque CaD  Bibliothèque de Ça-déménage.com
 
  
  
 Bibliothèque 

 Parse 

 mpParser 

Bibliothèque standard
Fonctions de parse des données reçues du client
Recevoir des fichiers issus du client
  


 mpParser  Recevoir des fichiers issus du client

Exemple :
Sur le poste client :
<form name="F1" method="POST" enctype="multipart/form-data" action="depose.cgi">
  <input type="hidden" name="Appel" value="attach">
  <input type="file" name="Donnees" style="font-size:8pt; width:250">
  <input type="submit" value="Déposer">
</form>
Sur le serveur :
Fichier envoyé : "Répertoire/Temp/fichier envoyé.jpg" dans le champ : "Donnees"
Perl :
$$FORM{'Appel'} = "attach"
$$FORM{'Donnees'} = "fichier_envoye.jpg"
$$FILE{'Donnees'} = <le fichier envoyé>
JavaScript :
FORM[0]['Appel'] = "attach"
FORM[0]['Donnees'] = "fichier_envoye.jpg"
FILE[0]['Donnees'] = <le fichier envoyé>
Syntaxe Parser(FORM)
Paramètres 
nom  type  Description 
–  IN Données issues du client
FORM  OUT Hash des champs reçus
Perl : hash passé par référence – JavaScript : tableau à 1 élément
FILE  OUT Hash des fichiers reçus
Perl : hash passé par référence – JavaScript : tableau à 1 élément
retourne  OUT  0 : Traitement correct
1 : REQUEST_METHOD incorrecte (ni GET ni POST)
2 : Données trop grandes (maximum 1 Mo)
31,32,33,34 : Séparateurs incorrects
Fonctions util. 
 Parser Recevoir des données issues du client


Code Perl 

sub mpParser {local($FORM,$FILE) = @_; 
 local($In,$sep); 
 if ($ENV{'REQUEST_METHOD'} ne 'POST') {return &Parser($FORM)}
 if ($ENV{'CONTENT_TYPE'}!~/^multipart\/form-data/) {return &Parser($FORM)}
 if ($ENV{'CONTENT_TYPE'}!~/boundary=\"?([^\";,]+)\"?/) {return 1}; $sep = "--".$1;
 if ($ENV{"CONTENT_LENGTH"}>1000000) {return 2}
 read(STDIN,$In,$ENV{"CONTENT_LENGTH"});
 local(@T,$i,$k,$Head,$Body,$x1,$x2,$nom,$val,$fic); 
 if ($In=~/^$sep\-\-/) {return 0}
 if ($In!~/^$sep(\r\n|\n|\r)/) {return 31}; local $CRLF = $1; 
 if ($In!~/^($sep$CRLF)/) {return 32}; $In = substr($In,length($1));
 if ($In!~/($CRLF$sep\-\-$CRLF*)$/) {return 33}; $In = substr($In,0,length($In)-length($1));
 @T = split(/$CRLF$sep$CRLF/,$In);
for($i=0;$i<scalar(@T);$i++) {
 if (($k=index($T[$i],$CRLF.$CRLF))==-1) {return 34}; $Head = substr($T[$i],0,$k); $Body = substr($T[$i],$k+2*length($CRLF));
 $Head =~ s/$CRLF/\n/g;
 $Head =~ s/\n\s+/ /g;
 while($Head=~/([\-\w!\#\$\%\&\'\*\+\.\^\`\|\{\}~]+):\s+([^\n]*)/) {
  $x1 = $1; $x2 = $2;
  $Head =~ s/([\-\w!\#\$\%\&\'\*\+\.\^\`\|\{\}~]+):\s+([^\n]*)//;
 if (lc($x1) eq "content-disposition") {
  if ($x2=~/ name=\"?([^\";]*)\"?/) {$nom = $1} else {$nom = "ano"}
  if ($x2=~/ filename=\"?([^\"]*)\"?/) {$fic = $1} else {$fic = ""}
  if ($fic eq "") {$val = $Body} else {$$FILE{$nom} = $Body; $val = &fileParser($fic)}
  if (!(defined $$FORM{$nom})) {$$FORM{$nom} = $val} else {$$FORM{$nom} = $$FORM{$nom}.",".$val}
 }}
}
 return 0
}

sub fileParser {local($val) = @_; 
 local($x); 
 $val =~ s/.*[\\\/]//; $x = "";
 if ($val=~/(\.[^\.]*)$/) {$x = $1; $val = substr($val,0,length($val)-length($x))}
 return &ascParser($val).$x;
}

sub ascParser {local($val) = @_; 
 local $z="AAAAAAACEEEEIIIIDNOOOOO_OUUUUYbBaaaaaaaceeeeiiiidnooooo_ouuuuyBy"; 
 local($x,$i,$k); 
 $x = "";
for($i=0;$i<length($val);$i++) {
 if (substr($val,$i,1)=~/\w/) {$x .= substr($val,$i,1); next}
 $k = ord(substr($val,$i,1)); if ($k<0) {$k += 256}
 if ($k>=192) {$x .= substr($z,$k-192,1)} else {$x .= "_"}
}
 return $x
}
Code JavaScript 

function mpParser(FORM,FILE) { 
 return Parser(FORM)
}