uploader DES fichierS en PHP

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : uploader DES fichierS en PHP

par Cyrano » 07 nov. 2005, 21:28

Voilà le code... qui va faire hurler Cyrano vu ma présentation (dont je suis conscient !).
J'ai pas hurlé, j'ai édité et remis en forme.

Note bien que c'est le cadet de mes soucis. Ce que j'essaye de te faire découvrir à travers mes petites manies, c'est qu'un code clair, aéré et correctement indenté, c'est la moitié du débuggage.

Là, je n'ai rien corrigé du tout, j'ai juste remis en forme. C'est plus facile à suivre pour tout le monde. Si tu prends cette discipline, tu as tout à y gagner.

À l'occasion, lis donc ma signature ;)

par Truc » 07 nov. 2005, 21:22

pour les cas ou tu ne mets pas de fichier tu peut ajouter un test dans la boucle listant les champs:
for($i=0;$i<$total;$i++)
{ 
	if(!empty($_FILES['fichier']['name'][$i]))
	{
		
	}
}

par Gakman » 07 nov. 2005, 20:24

Voilà le code... qui va faire hurler Cyrano vu ma présentation (dont je suis conscient !).
En fait le script marche parfaitement pour poster les fichiers mais quand il y a une erreur de type fichier trop gros ou extention incorrecte je tombe sur "page non trouvée" !
Si je ne mets pas de fichier (j'ai le cas normalement et ça doit générer un message d'erreur) et bien pas de message d'erreur, le script est validé et le dossier créé alors qu'il ne devrait pas.

Pour la page du formulaire il est inchangé (cf mon message du 06 Nov 2005, 19:20 page précédente).

Voilà le code :
<?php
$jeu_=$_GET['jeu'];
$lang_=$_GET['lang'];
$erreur="Validé !";

if(isset($_FILES['fichier']))
{
    $DeniedExtensions=array('.php', '.php3', '.php5', '.phtml', '.asp', '.aspx', '.ascx', '.jsp', '.cfm', '.cfc', '.pl', '.bat', '.exe', '.dll', '.reg', '.cgi', '.vbs', '.htm', '.html', '.shtml', '.js');
    $total2=count($DeniedExtensions);
    $taille_max=83886080;
    $total=count($_FILES['fichier']['name']);
    for($i=0;$i<$total;$i++)
    {
        $var_fich0=$_FILES['fichier']['name'][$i];
        $var_fich2=$_FILES['fichier']['tmp_name'][$i];
        for($a=0;$a<$total2;$a++)
        {
            $findit=strpos($var_fich0,$DeniedExtensions[$a]);
            if($findit!==false)
            {
                $erreur='Veuillez sélectionner un fichier de type différent de php, html, exe !';
            }
        }
        if(file_exists($var_fich2)&&filesize($var_fich2)>$taille_max)
        {
            $erreur='Votre fichier doit faire moins de 80Mo !';
        }
    }
}
else
{
    $erreur='Veuillez envoyer au moins un fichier !';
}

if($erreur=="Validé !")
{

    if($_GET['jeu']=="new")
    {
        $liste6=array();
        $handle6=opendir(".");
        while($file6=readdir($handle6))
        {
            $pt6=strrpos($file6,".");
            $folder_name=$file6;
            $fich6=$file6."/nom.php";
            if(@file_exists($fich6))
            {
                array_push($liste6,$file6);
            }
        }
        closedir($handle6);
        $num_new2=count($liste6);
        $num_new2++;
        $dossier_j="j_".$num_new2;
        mkdir($dossier_j,0700);
        copy("./images/index.htm",$dossier_j."/index.htm");
        $dossier_s_new="s_1";
        if(empty($_POST["nom"]))
        {
            $nom_jeu="-> Jeu non spécifié";
        }
        else
        {
            $nom_jeu=$_POST["nom"];
        }
        $Fnm3=$dossier_j."/nom.php";
        $inF3=fopen($Fnm3,"w");
        fwrite($inF3,$nom_jeu);
        fclose($inF3);
    }

    else
    {
        $dossier_j="j_".$_GET['jeu'];
        $fich_nom="./".$dossier_j."/nom.php";
        if (@file_exists($fich_nom) && filesize($fich_nom)>0)
        {
            $fd=fopen($fich_nom,"r");
            $nom_jeu=fread($fd,filesize($fich_nom));
            fclose($fd);
        }
        $liste5=array();
        $handle5=opendir($dossier_j);
        while($file5=readdir($handle5))
        {
            $pt5=strrpos($file5,".");
            $folder_name=$file5;
            $fich5=$dossier_j."/".$file5."/details.php";
            if(@file_exists($fich5))
            {
                array_push($liste5,$file5);
            }
        }
        closedir($handle5);
        $num_new=count($liste5);
        $num_new++;
        $dossier_s_new="s_".$num_new;
    }

    mkdir($dossier_j."/".$dossier_s_new,0700);
    copy("./images/index.htm",$dossier_j."/".$dossier_s_new."/index.htm");

    $Fnm=$dossier_j."/".$dossier_s_new."/details.php";
    $ouvre_w='<'.'?';
    $ferme_w='?'.'>';
    $auteur_w='$auteur="'.$_POST["auteur"].'";';
    $mail_w='$mail="'.$_POST["mail"].'";';
    $site_w='$site="'.$_POST["site"].'";';
    $titre_w='$titre="'.$_POST["titre"].'";';
    $note_w='$note="'.$_POST["note"].'";';
    $date_w='$date="'.date("d/m/Y").'";';

    $inF=fopen($Fnm,"w");
    fwrite($inF,$ouvre_w."\n".$auteur_w."\n".$mail_w."\n".$site_w."\n".$titre_w."\n".$date_w."\n".$note_w."\n".$ferme_w);
    fclose($inF);

    $commentaire_w=$_POST["commentaire"];
    $Fnm2=$dossier_j."/".$dossier_s_new."/commentaire.php";
    $inF2=fopen($Fnm2,"w");
    fwrite($inF2,$commentaire_w);
    fclose($inF2);

    for($i=0;$i<$total;$i++)
    {
        $var_fich0=$_FILES['fichier']['name'][$i];
        $var_fich2=$_FILES['fichier']['tmp_name'][$i];
        $dest_dossier=$dossier_j."/".$dossier_s_new."/";
        $dest_fichier=basename($var_fich0);
        $dest_fichier=strtr($dest_fichier,'ÀÁÂÃÄÅÇÈÉÊËÌÍÎÏÒÓÔÕÖÙÚÛÜÝàáâãäåçèéêëìíîïðòóôõöùúûüýÿ', 'AAAAAACEEEEIIIIOOOOOUUUUYaaaaaaceeeeiiiioooooouuuuyy');
        $dest_fichier=preg_replace('/([^.a-z0-9]+)/i', '_',$dest_fichier);
        move_uploaded_file($var_fich2,$dest_dossier.$dest_fichier);
    }

    $sujet="Ajout d'une sauvegarde sur S.O.S. Sauvegardes !";
    $corps=
    $auteur_w."\n".
    $mail_w."\n".
    $site_w."\n".
    $date_w."\n
  jeu : ".$_GET['jeu']."\n
  nom du jeu : ".$nom_jeu."\n".
    $titre_w."\n".
    $note_w."\n\n
  commentaire :\n".$commentaire_w;
    $entete="From:".$email2."\r\nReply-To:".$email2;
    mail ($email1,$sujet,$corps,$entete);

    $gdt="Merci !";
    if($jeu_=="new")
    {
        $jeu_=$num_new2;
    }
    $txt="Accès à la page du jeu.";
    $rbq="liste";

}
else
{
    $gdt="Attention !";
    $txt="Retour au formulaire.";
    $rbq="post";
}

echo'<p class="titre">'.$gdt.'</p><p>'.$erreur.'<br />';
echo'<a href="index.php?lang='.$lang_.'&rub='.$rbq.'&jeu='.$jeu_.'">'.$txt.'</a></p>';
include("m_retour.php"); include("m_stats.php");
?>
Ne voyez-vous pas les erreurs ?
Merci ! :cry: pas moyen de trouver la solution....

le problème viendrait du "if(isset($_FILES['fichier'])){ " ?

par Gakman » 07 nov. 2005, 03:08

Merci Truc, je testerai ça dès demain.
Merci de ton aide Cyrano mais le code tu l'as en entier juste avant... j'ai juste changé 2 lignes depuis et je les ai précisées.

par Truc » 07 nov. 2005, 01:14

reste sur la 1ere idée
fait un test avec ce code je l'ai testé et marche tres bien
$extensions_ok = array('avi', 'mpg', 'mpeg', 'divx', 'mp3', 'wma', 'png', 'gif', 'jpg', 'jpeg', 'zip', 'rar', '7z', 'tar', 'vmi', 'vms', 'ddc'); 
	$total=count($_FILES['fichier']['name']);
	
	for($i=0; $i <$total;$i++) 
	{
		$var_fich0=$_FILES['fichier']['name'][$i];
		
		$var_fich=substr(strrchr($var_fich0, '.'), 1);
		
		if( !in_array( $var_fich, $extensions_ok ))
		{
			$erreur = 'Veuillez sélectionner un fichier de type zip, rar, 7z, tar, png, gif, jp(e)g, mp3, wma, avi, mpg, mpeg, divx, vmi, vms ou ddc !';
		}	
	}

par Cyrano » 07 nov. 2005, 01:05

Il manque de toutes façon la suite du code où se passe probablement une redirection foireuse. On devine pas.

par Gakman » 07 nov. 2005, 01:03

si si mais ça marche pas mieux :wink:

par Cyrano » 07 nov. 2005, 00:49

S'il y a une erreur, elle est ailleurs. En revanche, ton code est illisible : aère donc, ça simplifie la relecture et les possibilités de trouver des bugs:
if(isset($_FILES['fichier']))
{
    unset($erreur);
    $DeniedExtensions = array('.php', '.php3', '.php5', '.phtml', '.asp', '.aspx', '.ascx', '.jsp', '.cfm', '.cfc', '.pl', '.bat', '.exe', '.dll', '.reg', '.cgi', '.vbs', '.htm', '.html', '.shtml', '.js');

    $taille_max = 83886080;

    $total = count($_FILES['fichier']['name']);

    for($i = 0; $i < $total; $i++)
    {
        $var_fich0 = $_FILES['fichier']['name'][$i];
        $var_fich2 = $_FILES['fichier']['tmp_name'][$i];

        for($a = 0; $a < count($DeniedExtensions); $a++)
        {
            $findit = strpos($var_fich0, $DeniedExtensions[$a]);
            if ($findit !== false)
            {
                $erreur = 'Veuillez sélectionner un fichier de type différent de php, html, exe !';
            }
        }

        if( file_exists($var_fich2) and filesize($var_fich2) > $taille_max)
        {
            $erreur = 'Votre fichier doit faire moins de 80Mo !';
        }
    }
}

if(!isset($erreur))
{
Tu trouves pas ça plus clair comme ça ?

par Truc » 07 nov. 2005, 00:41

eh bien je ne vois pas d'erreur :?

assure toi ce que retourne chaque variable, par exemple $var_fich

par Gakman » 07 nov. 2005, 00:32

Bon je continue à causer tout seul :
j'ai réussi à passer dans le mode "refuser certaines extentions" à la place d'accepter certaines, c'est moins contraignant.
ALors le script marche bien, sauf qu'en cas d'erreur de type d'extention j'ai une page d'erreur (page non trouvée) à la place du message d'allerte.

Voilà mon code :
if(isset($_FILES['fichier'])){
unset($erreur);
$DeniedExtensions = array('.php','.php3','.php5', '.phtml','.asp','.aspx','.ascx', '.jsp','.cfm','.cfc','.pl','.bat','.exe','.dll','.reg', '.cgi','.vbs','.htm','.html','.shtml','.js');

$taille_max = 83886080;

$total=count($_FILES['fichier']['name']);

for($i=0; $i <$total;$i++) {
$var_fich0=$_FILES['fichier']['name'][$i];
$var_fich2=$_FILES['fichier']['tmp_name'][$i];

for($a=0; $a<count($DeniedExtensions); $a++)
{
$findit = strpos($var_fich0, $DeniedExtensions[$a]);
if ($findit !== false)
{$erreur = 'Veuillez sélectionner un fichier de type différent de php, html, exe !';}
}

if( file_exists($var_fich2) and filesize($var_fich2) > $taille_max)
 {$erreur = 'Votre fichier doit faire moins de 80Mo !';}
}

if(!isset($erreur))  {
et après comme tout à l'heure.

Alors si quelqu'un voit mon erreur... aidez moi SVP !!!! :cry:

par Gakman » 06 nov. 2005, 23:24

en virant le test sur l'extention (les 2 lignes qui suivent) ça marche... je ne sais aps où est l'erreur dans ces lignes
$extensions_ok = array('avi', 'mpg', 'mpeg', 'divx', 'mp3', 'wma', 'png', 'gif', 'jpg', 'jpeg', 'zip', 'rar', '7z', 'tar', 'vmi', 'vms', 'ddc');
for($i=0; $i <$total;$i++) {
$var_fich0=$_FILES['fichier']['name'][$i];
$var_fich=substr(strrchr($var_fich0, '.'), 1); 
if( !in_array( $var_fich, $extensions_ok )) 
 {$erreur = 'Veuillez sélectionner un fichier de type zip, rar, 7z, tar, png, gif, jp(e)g, mp3, wma, avi, mpg, mpeg, divx, vmi, vms ou ddc !';}
}

par Gakman » 06 nov. 2005, 21:57

Voilà juste les points importants du code pour plus de facilité :
page de post :
<form action="index.php?lang=<?=$_GET['lang']?>&rub=post_rez&jeu=<?=$_GET['jeu']?>" method="post" enctype="multipart/form-data" id="post_script" name="post_script"> 
<input type="hidden" name="MAX_FILE_SIZE" value="83886080" /> 
<fieldset> 
<p class="base_Rouge">S&eacute;lectionnez le(s) fichier(s) que vous voulez envoyer :<br /> 
<? for($i=1;$i<=20;$i++){echo' 
Fichier '.$i.' : <input id="fichier[]" name="fichier[]" type="file" size="40" /><br />';} ?> 
</p> 
</fieldset> 

<p>Cliquez sur le bouton suivant ("Valider") pour valider et attendez le chargement complet de la page suivante qui peut prendre de nombreuses minutes suivant votre vitesse de connexion à Internet et la taille du fichier envoyé.<br /> 
<input name="post_submit" id="post_submit" type="submit" value="Valider" /></p> 
</form>
Page de traitement :
<?
if(isset($_FILES['fichier'])){ 
unset($erreur); 
$extensions_ok = array('avi', 'mpg', 'mpeg', 'divx', 'mp3', 'wma', 'png', 'gif', 'jpg', 'jpeg', 'zip', 'rar', '7z', 'tar', 'vmi', 'vms', 'ddc'); 

$taille_max = 83886080; 

$total=count($_FILES['fichier']['name']); 

for($i=0; $i <$total;$i++) { 
$var_fich0=$_FILES['fichier']['name'][$i]; 
$var_fich=substr(strrchr($var_fich0, '.'), 1); 
$var_fich2=$_FILES['fichier']['tmp_name'][$i]; 
if( !in_array( $var_fich, $extensions_ok )) 
{$erreur = 'Veuillez sélectionner un fichier de type zip, rar, 7z, tar, png, gif, jp(e)g, mp3, wma, avi, mpg, mpeg, divx, vmi, vms ou ddc !';} 
elseif( file_exists($var_fich2) and filesize($var_fich2) > $taille_max) 
{$erreur = 'Votre fichier doit faire moins de 80Mo !';} 
} 

if(!isset($erreur))  { 


for($i=0; $i <$total;$i++) { 
$var_fich0=$_FILES['fichier']['name'][$i]; 
$var_fich2=$_FILES['fichier']['tmp_name'][$i]; 
$dest_dossier = $dossier_j."/".$dossier_s_new."/"; 
$dest_fichier = basename($var_fich0); 
$dest_fichier = strtr($dest_fichier, 'ÀÁÂÃÄÅÇÈÉÊËÌÍÎÏÒÓÔÕÖÙÚÛÜÝàáâãäåçèéêëìíîïðòóôõöùúûüýÿ', 'AAAAAACEEEEIIIIOOOOOUUUUYaaaaaaceeeeiiiioooooouuuuyy'); 
$dest_fichier = preg_replace('/([^.a-z0-9]+)/i', '_', $dest_fichier); 
move_uploaded_file($var_fich2, $dest_dossier.$dest_fichier); 
} 
} ?>
Et donc j'ai toujours la même erreur : le message que mon ou mes fichiers n'ont pas la bonne extention (1er type d'erreur de mon script).

par Gakman » 06 nov. 2005, 20:20

Je n'arrive pas :( !
J'ai décomposé comme tu m'as dit. Le script avec 1 seul envoi de fichier fonctionnait parfaitement.
J'utilise des fichiers qui existent sur mon pc comme pourrait le faire tout lecteur du site.
Voilà les 2 pages.
<p align="center" class="gdtitre">Soumettre un fichier</p>
<hr />
<p>Vous pouvez ici m'envoyer vos sauvegardes.</p>
<p>&nbsp;</p>
<form action="index.php?lang=<?=$_GET['lang']?>&rub=post_rez&jeu=<?=$_GET['jeu']?>" method="post" enctype="multipart/form-data" id="post_script" name="post_script">
<p>Pseudo : <input name="auteur" id="auteur" /> (utilisez celui du forum SVP)</p>
<p>Adresse E-mail : <input id="mail" name="mail" /></p>
<p>Site perso : <input id="site" name="site" /></p>
<? if ($_GET['jeu']=="new") {echo '<p>Nom du jeu : <input id="nom" name="nom" /></p>';} ?>
<p>Support du jeu :  
<select id="support" name="support">
<option selected>Windows</option>
<option>DreamCast</option>
<option>MegaDrive / Genesis</option>
<option>MasterSystem</option>
<option>GameGear</option>
<option>XBox</option>
<option>PlayStation 2</option>
<option>PlayStation</option>
<option>PSP</option>
<option>GameCube</option>
<option>Nintendo64</option>
<option>SuperNintendo / SNES / SuperFamicom</option>
<option>Nintendo / NES / Famicom</option>
<option>DS</option>
<option>GameBoy Advance</option>
<option>GameBoy / GameBoy Color</option>
<option>NGage</option>
<option>arcade</option>
<option>Linux</option>
<option>MacOS</option>
<option>Amiga</option>
</select></p>
<p>Titre de la sauvegarde  : <input id="titre" name="titre" /></p>
<p>Note (en %) donnée à l'avancement de la sauvegarde :
<select id="note" name="note">
<option selected>Non notée</option>
<? for($i=1;$i<=100;$i++){echo'<option>'.$i.'</option>';} ?>
</select></p>
<p>Vos commentaires et d&eacute;tails sur cette sauvegarde :<br /><textarea id="commentaire" name="commentaire" rows="6" cols="75"></textarea></p>

<input type="hidden" name="MAX_FILE_SIZE" value="83886080" />
<fieldset>
<p class="base_Rouge">S&eacute;lectionnez le(s) fichier(s) que vous voulez envoyer :<br />
<? for($i=1;$i<=20;$i++){echo'
Fichier '.$i.' : <input id="fichier[]" name="fichier[]" type="file" size="40" /><br />';} ?>
</p>
</fieldset>

<p>Cliquez sur le bouton suivant ("Valider") pour valider et attendez le chargement complet de la page suivante qui peut prendre de nombreuses minutes suivant votre vitesse de connexion à Internet et la taille du fichier envoyé.<br />
<input name="post_submit" id="post_submit" type="submit" value="Valider" /></p>
</form>

<p>&nbsp;</p>
<p>&nbsp;</p>
<? include("m_retour.php"); include("m_stats.php");?>
<?
$jeu_=$_GET['jeu'];
$lang_=$_GET['lang'];

if(isset($_FILES['fichier'])){
unset($erreur);
$extensions_ok = array('avi', 'mpg', 'mpeg', 'divx', 'mp3', 'wma', 'png', 'gif', 'jpg', 'jpeg', 'zip', 'rar', '7z', 'tar', 'vmi', 'vms', 'ddc');
//faille sécu ici -> voir PHPfrance pour le "denied extensions" à la place
$taille_max = 83886080;

$total=count($_FILES['fichier']['name']);

for($i=0; $i <$total;$i++) {
$var_fich0=$_FILES['fichier']['name'][$i];
$var_fich=substr(strrchr($var_fich0, '.'), 1); 
$var_fich2=$_FILES['fichier']['tmp_name'][$i];
if( !in_array( $var_fich, $extensions_ok )) 
 {$erreur = 'Veuillez sélectionner un fichier de type zip, rar, 7z, tar, png, gif, jp(e)g, mp3, wma, avi, mpg, mpeg, divx, vmi, vms ou ddc !';}
elseif( file_exists($var_fich2) and filesize($var_fich2) > $taille_max)
 {$erreur = 'Votre fichier doit faire moins de 80Mo !';}
}

if(!isset($erreur))  {
echo '<p class="titre">Merci !</p>';

if ($_GET['jeu']=="new"){
 $liste6=array();
 $handle6=opendir(".");
  while($file6=readdir($handle6)){
   $pt6=strrpos($file6,".");
   $folder_name=$file6;
   $fich6=$file6."/nom.php";
   if (@file_exists($fich6)){
    array_push($liste6,$file6);}}
 closedir($handle6);
 $num_new2=count($liste6);
 $num_new2++;
 $dossier_j="j_".$num_new2;
 mkdir ($dossier_j,0700);
 copy("./images/index.htm",$dossier_j."/index.htm");

 $dossier_s_new="s_1";

 if (empty($_POST["nom"])){$nom_jeu="-> Jeu non spécifié";}
 else {$nom_jeu=$_POST["nom"];}
 
 $Fnm3=$dossier_j."/nom.php";
 $inF3=fopen($Fnm3,"w");
  fwrite($inF3,$nom_jeu);
 fclose($inF3);
}
else {
 $dossier_j="j_".$_GET['jeu'];
 
 $fich_nom="./".$dossier_j."/nom.php";
 if (@file_exists($fich_nom) && filesize($fich_nom)>0){
 $fd=fopen($fich_nom,"r");
 $nom_jeu=fread($fd,filesize($fich_nom));
 fclose($fd);}
 
 $liste5=array();
 $handle5=opendir($dossier_j);
  while($file5=readdir($handle5)){
   $pt5=strrpos($file5,".");
   $folder_name=$file5;
   $fich5=$dossier_j."/".$file5."/details.php";
   if (@file_exists($fich5)){
    array_push($liste5,$file5);}}
 closedir($handle5);
 $num_new=count($liste5);
 $num_new++;
 $dossier_s_new="s_".$num_new;
}

mkdir ($dossier_j."/".$dossier_s_new,0700);
copy("./images/index.htm",$dossier_j."/".$dossier_s_new."/index.htm");

$Fnm=$dossier_j."/".$dossier_s_new."/details.php";
$ouvre_w = '<'.'?';
$ferme_w = '?'.'>';
$auteur_w = '$auteur="'.$_POST["auteur"].'";';
$mail_w = '$mail="'.$_POST["mail"].'";';
$site_w = '$site="'.$_POST["site"].'";';
$titre_w = '$titre="'.$_POST["titre"].'";';
$note_w = '$note="'.$_POST["note"].'";';
$date_w = '$date="'.date("d/m/Y").'";';

$inF=fopen($Fnm,"w");
 fwrite($inF,$ouvre_w."\n".$auteur_w."\n".$mail_w."\n".$site_w."\n".$titre_w."\n".$date_w."\n".$note_w."\n".$ferme_w);
fclose($inF);

$commentaire_w=$_POST["commentaire"];
$Fnm2=$dossier_j."/".$dossier_s_new."/commentaire.php";
$inF2=fopen($Fnm2,"w");
 fwrite($inF2,$commentaire_w);
fclose($inF2);

for($i=0; $i <$total;$i++) {
 $var_fich0=$_FILES['fichier']['name'][$i];
 $var_fich2=$_FILES['fichier']['tmp_name'][$i];
 $dest_dossier = $dossier_j."/".$dossier_s_new."/";
 $dest_fichier = basename($var_fich0);
 $dest_fichier = strtr($dest_fichier, 'ÀÁÂÃÄÅÇÈÉÊËÌÍÎÏÒÓÔÕÖÙÚÛÜÝàáâãäåçèéêëìíîïðòóôõöùúûüýÿ', 'AAAAAACEEEEIIIIOOOOOUUUUYaaaaaaceeeeiiiioooooouuuuyy');
 $dest_fichier = preg_replace('/([^.a-z0-9]+)/i', '_', $dest_fichier);
 move_uploaded_file($var_fich2, $dest_dossier.$dest_fichier);
}

$sujet="Ajout d'une sauvegarde sur S.O.S. Sauvegardes !";
$corps=
 $auteur_w." \n".
 $mail_w." \n".
 $site_w." \n".
 $date_w." \n
 jeu : ".$_GET['jeu']." \n
 nom du jeu : ".$nom_jeu." \n".
 $titre_w." \n".
 $note_w." \n \n
 commentaire : \n".$commentaire_w;
$entete="From:".$email2."\r\nReply-To:".$email2;
mail ($email1,$sujet,$corps,$entete);

if($jeu_=="new"){echo '<p>&nbsp;</p><p><a href="index.php?lang='.$_GET['lang'].'&rub=liste&jeu='.$num_new2.'">Accès à la page du jeu.</a></p><p>&nbsp;</p>';}
else{echo '<p>&nbsp;</p><p><a href="index.php?lang='.$_GET['lang'].'&rub=liste&jeu='.$_GET['jeu'].'">Retour à la page du jeu.</a></p><p>&nbsp;</p>';}

}

else {echo '<p class="titre">Attention !</p><br />'.$erreur.'<p><a href="index.php?lang='.$_GET['lang'].'&rub=post&jeu='.$jeu.'">Retour au formulaire.</a></p>';}

}



include("m_retour.php"); include("m_stats.php");
?>
J'obtiens toujours le même message, le premier : celui d'erreur d'extention ('Veuillez sélectionner un fichier de type zip, rar, 7z, tar, png, gif, jp(e)g, mp3, wma, avi, mpg, mpeg, divx, vmi, vms ou ddc !).

par Truc » 06 nov. 2005, 20:03

si tu fait la manip avec des fichiers valides tu ne devrai pas avoir ce message d'erreur.

Pour tester affiche le nom du fichier avant le test d'extension
echo $_FILES['fichier']['name'][$i];
sinon décompose:
$var=substr(strrchr($_FILES['fichier']['name'][$i], '.'), 1);
echo $var

if( !in_array( $var, $extensions_ok ))

par Gakman » 06 nov. 2005, 19:51

je reçois systématiquement que mon fichier n'est pas dans le bon format (le message d'erreur : "veuillez sélectionner...") :(
<form action="index.php?lang=<?=$_GET['lang']?>&rub=post_rez&jeu=<?=$_GET['jeu']?>" method="post" enctype="multipart/form-data" id="post_script" name="post_script">

<input type="hidden" name="MAX_FILE_SIZE" value="83886080" />
<fieldset>
<p class="base_Rouge">S&eacute;lectionnez le(s) fichier(s) que vous voulez envoyer :<br />
<? for($i=1;$i<=20;$i++){echo'
Fichier '.$i.' : <input id="fichier[]" name="fichier[]" type="file" size="40" /><br />';} ?>
</p>
</fieldset>

<p>Cliquez sur le bouton suivant ("Valider") pour valider et attendez le chargement complet de la page suivante qui peut prendre de nombreuses minutes suivant votre vitesse de connexion à Internet et la taille du fichier envoyé.<br />
<input name="post_submit" id="post_submit" type="submit" value="Valider" /></p>
</form>
et le fichier de traitement :
if(isset($_FILES['fichier'])){
unset($erreur);
$extensions_ok = array('avi', 'mpg', 'mpeg', 'divx', 'mp3', 'wma', 'png', 'gif', 'jpg', 'jpeg', 'zip', 'rar', '7z', 'tar', 'vmi', 'vms', 'ddc');
//faille sécu ici -> voir PHPfrance pour le "denied extensions" à la place
$taille_max = 83886080;

$total=count($_FILES['fichier']['name']);

for($i=0; $i <$total;$i++) { 
if( !in_array( substr(strrchr($_FILES['fichier']['name'][$i], '.'), 1), $extensions_ok ) )
 {$erreur = 'Veuillez sélectionner un fichier de type zip, rar, 7z, tar, png, gif, jp(e)g, mp3, wma, avi, mpg, mpeg, divx, vmi, vms ou ddc !';}
elseif( file_exists($_FILES['fichier']['tmp_name'][$i]) and filesize($_FILES['fichier']['tmp_name'][$i]) > $taille_max)
 {$erreur = 'Votre fichier doit faire moins de 80Mo !';}
}

if(!isset($erreur))  {

// ici je traite d'autres champs du formulaire

for($i=0; $i <$total;$i++) { 
 $dest_dossier = $dossier_j."/".$dossier_s_new."/";
 $dest_fichier = basename($_FILES['fichier']['name'][$i]);
 $dest_fichier = strtr($dest_fichier, 'ÀÁÂÃÄÅÇÈÉÊËÌÍÎÏÒÓÔÕÖÙÚÛÜÝàáâãäåçèéêëìíîïðòóôõöùúûüýÿ', 'AAAAAACEEEEIIIIOOOOOUUUUYaaaaaaceeeeiiiioooooouuuuyy');
 $dest_fichier = preg_replace('/([^.a-z0-9]+)/i', '_', $dest_fichier);
 move_uploaded_file($_FILES['fichier']['tmp_name'][$i], $dest_dossier.$dest_fichier);
}
Mais où est donc mon erreur ???
:cry: