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

 load – User 

 submit 

Requêtes de Ça-déménage.com
Accès particulier
Appel de la requête
  
 
 Bibliothèque CaD 

 Serveur 

 wsRunVar 

Bibliothèque de Ça-déménage.com
Paramètres d'accès au serveur
Paramètres de gestion des valeurs
 
  
  
 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)
}