try and cache

Eléphant du PHP | 65 Messages

08 déc. 2017, 13:23

Bonjour a tous,
j'ai une erreur étrange avec mon try and cache de formulaire et je ne voie pas ou sa peche:
 try {
if(!isset($_FILES,$_POST["upload"]))
{
         $tab = array("post "=> $_POST,"files" => $_FILES);
         $de=$_POST['email_de'];
         $a=$_POST['a'];
         $sujet=$_POST['sujet'];
         $msg=$_POST['msg'];
}
if(empty($_POST['email_de']))
   {
  throw new RuntimeException('votre email est  obligatoire.');

   }
if(empty($_POST['sujet']))
   {
  throw new RuntimeException('le sujet est obligatoire.');

   }
 if ( !isset($_FILES['file']['error']) || is_array($_FILES['file']['error']) ) 
{
           throw new RuntimeException('parametre invalide.');
           }
switch ($_FILES['file']['error']) 
{

 case UPLOAD_ERR_OK:
  break;
 case UPLOAD_ERR_NO_FILE:
       throw new RuntimeException('le fichier n as pas été envoyer');
break;
case UPLOAD_ERR_INI_SIZE:
break; 
case UPLOAD_ERR_FORM_SIZE:
   throw new RuntimeException('la taille est trop grande');
break;
default:
      throw new RuntimeException('Erruer inconnue');
}
 // Cheking file size.
 if ($_FILES['file']['size'] >  209715200  ) 
 { 
 throw new RuntimeException('La Taille du fichier est trop grosse 200MO maxi.');
 }
 // Check MIME Type
 $finfo = new finfo(FILEINFO_MIME_TYPE);
 if ( false === $ext = array_search(
 $finfo->file($_FILES['file']['tmp_name']),
 array(
 // ms office
 'docx' => 'application/vnd.openxmlformats-officedocument.wordprocessingml.document',
 'doc' => 'application/vnd.openxmlformats-officedocument.wordprocessingml.document',
 'xlsx' => 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet',
 'xls' => 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet',
 
 // adobe
 'pdf' => 'application/pdf',
 // archives
 'zip' => 'application/zip,application/x-zip,application/x-zip-compressed',
 'rar' => 'application/x-rar-compressed',
 ),
 true
 )) 
 {
 throw new RuntimeException('Le format du fichier est invalide.');
}
//ici j insert dans ma base et j envoie un mail
 catch (RuntimeException $e) {

    echo $e->getMessage();

}
mais j ai une erreur lors de l envoi de mon fichier les zip et rar sa me dit format invalide
pourtant je me suis baser sur sa pour la versification de files: http://php.net/manual/en/features.file-upload.php
je doit avoir une erreur de syntaxe mais je la vois pas
merci pour votre aide

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 9782 Messages

09 déc. 2017, 12:25

Bonjour,

Vérifie la condition de ton if() qui déclenche cette erreur
Par ailleurs, il serait préférable que tu sépare proprement tes affectations de variables pour rendre ton code + lisibles et limiter le risque de bug par la même occasion ;)
Quand tout le reste a échoué, lisez le mode d'emploi...

Eléphant du PHP | 65 Messages

10 déc. 2017, 14:49

salut @rthur,
comment tu vérifie la condition d'un if?
si je mais autre chose que zip est rar exemple un docx sa fonctionne, j'ai fait une erreur dans mon code?
tu préconise que je change le nom de mes variables pas de souci je viens de le faire mais je sèche sur ce if
merci de ton aide

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

20 déc. 2017, 12:36

Ce n'est pas une question de nom de variable, c'est surtout une question de séparer les instructions pour permettre à ceux qui devront lire et maintenir ton code de comprendre ce qui t'as traversé l'esprit au moment où tu l'as codé (et cette personne, ça peut très bien être toi dans 6 mois ;))
$mimes = array(
 // ms office
 'docx' => 'application/vnd.openxmlformats-officedocument.wordprocessingml.document',
 'doc' => 'application/vnd.openxmlformats-officedocument.wordprocessingml.document',
 'xlsx' => 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet',
 'xls' => 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet', 
 // adobe
 'pdf' => 'application/pdf',
 // archives
 'zip' => 'application/zip,application/x-zip,application/x-zip-compressed',
 'rar' => 'application/x-rar-compressed',
);

$fileInfo = $finfo->file($_FILES['file']['tmp_name']);

$ext = array_search( $fileInfo, $mimes,  true);

if ($ext === false) {
  ...
}
Et pour tester le if, tu peux ainsi facilement ajouter des echo pour afficher $fileInfo et constater des valeurs que tu reçois et compare :)
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 9782 Messages

20 déc. 2017, 12:42

salut @rthur,
comment tu vérifie la condition d'un if?
En faisant un var_dump() de la condition de ton if pour voir si ça te renvoie bien true/false comme souhaité
Quand tout le reste a échoué, lisez le mode d'emploi...