uploader DES fichierS en PHP

Mammouth du PHP | 19672 Messages

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.
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Modérateur PHPfrance
Modérateur PHPfrance | 7636 Messages

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 !';
		}	
	}

/!\ Avant de poster se documenter et rechercher.
Qui ne sait pas rendre un service n'a pas le droit d'en demander.
MaBrute

Eléphant du PHP | 76 Messages

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.
@++
Gakman
-> http://gakman.free.fr

Eléphant du PHP | 76 Messages

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'])){ " ?
@++
Gakman
-> http://gakman.free.fr

Modérateur PHPfrance
Modérateur PHPfrance | 7636 Messages

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]))
	{
		
	}
}

/!\ Avant de poster se documenter et rechercher.
Qui ne sait pas rendre un service n'a pas le droit d'en demander.
MaBrute

Mammouth du PHP | 19672 Messages

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 ;)
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe: