Un script PHP pour uploader des fichiers sur le serveur

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 : Un script PHP pour uploader des fichiers sur le serveur

par iclo » 22 nov. 2005, 19:31

Franchement non, avant de vouloir se lancer dans un upload tu dois apprendre les bases de l'algorithmique et les instructions élémentaire en php, sans ça, comme d'autres personnes te l'ont déja dis sur ce forum, tu vas directement dans le mur. Donc ça ne servirait à rien de te dépanner en corrigeant ton script.
Prends le temps de lire les tutoriaux ou achète un bouquin.
Bonne continuation

par phpdog » 22 nov. 2005, 15:36

Bonjour iclo et merci beaucoup :wink:

Pouriez vous m'aider à mieux comprendre ce code ?

par iclo » 22 nov. 2005, 13:40

Sois logique, tu as une portion de code qui est exécutée si l'upload fonctionne correctement, si ton upload ne fonctionne pas, la portion de code n'est pas exécutée, et le code provoquant la redirection, n'étant pas appelée, tu n'es pas redirigé.
Avant de vouloir inclure des raffinements de redirection, il serait judicieux de réaliser un upload qui fonctionne et de comprendre pourquoi il fonctionne.
Repiquer des codes c'est une chose, les comprendre pour pouvoir les integrer et les adapter en est une autre.

par phpdog » 22 nov. 2005, 13:35

J'ai essayer ceci:
// On redirige si l'enregistrement s'est déroulé avec succès : 
    $redirect .= "<script>"; 
    $redirect .= "function redirect(){"; 
    $redirect .= "window.location.replace(\"index.php\");"; 
    $redirect .= "}"; 
    $redirect .= "setTimeout(\"redirect();\", 5000);"; 
    $redirect .= "</script>"; 
    $redirect .= "<font face=\"verdana\" size=\"2\">Ajout effectué avec succès, redirection en cours."; 

    echo ($redirect); 
Mias cela ne fonctionne toujours pas.
Vous dite que la redirection eura lieu si le scritp avent a bien fonctioner, mais je n'arrive pas à uploder l'image, peut être que cela vien de la ?

par s3b54sk8 » 22 nov. 2005, 08:03

Mais s'est pas le code qui marche pas s'est qu'il est mal placer, en plus le votre ne passera pas, par que je dois le mettre entre les balise php.
Il marche très bien dans mon code en php, il suffit juste de l'adapter comme je vous ai dit.

Genre :
	// On redirige si l'enregistrement s'est déroulé avec succès :
	$redirect .= "<script>";
	$redirect .= "function redirect(){";
    $redirect .= "window.location.replace("mod_basses.php");";
	$redirect .= "}";
	$redirect .= "setTimeout("redirect();", 5000);";
	$redirect .= "</script>";
	$redirect .= "<font face="verdana" size="2">Ajout effectué avec succès, redirection en cours.";

	echo ($redirect);

par phpdog » 22 nov. 2005, 01:03

J'ai déja esayer avec header cela ne change rien.

Le fichier index.php et dans le même répertoire que celui ou se trouve la redirection.

par Truc » 22 nov. 2005, 00:54

autant pour moi, la rediretion était bien a sa place

remplace le javascript par:
header("location: ./index.php");
a savoir aussi que le chemin ne doit pas etre bon si ca ne marche pas, le chemin dépend de la profondeur dans l'arborescence du fichier d'upload par rapport a l'index.php .

par phpdog » 22 nov. 2005, 00:45

Bonjour s3b54sk8 et merci :wink:

Mais s'est pas le code qui marche pas s'est qu'il est mal placer, en plus le votre ne passera pas, par que je dois le mettre entre les balise php.

par s3b54sk8 » 22 nov. 2005, 00:41

J'utilise ca sur mon site de temps en temps :

Code : Tout sélectionner

<script> function redirect(){ window.location.replace("mod_basses.php"); } setTimeout("redirect();", 5000); </script>
A adapater dans ton cas.

par phpdog » 22 nov. 2005, 00:32

J'ai fait come vous m'avez dit:
<?php 
if(isset($_FILES['photo'])){ 
    // 
    // Paramètres globaux 
    // 
    unset($erreur); 
    $extensions_ok = array('png', 'gif', 'jpg', 'jpeg'); 
    $taille_max_photo = 500000; 
    $taille_max_logo = 100000; 
    $dest_dossier = '*'; 
    // 
    // Vérifications pour le logo 
    // 
    // Extension : 
    if( !in_array( strtolower(substr(strrchr($_FILES['logo']['name'], '.'), 1), $extensions_ok )) ) 
    { 
        $erreur = 'Veuillez sélectionner un fichier de type png, gif ou jpg !';    
    } 
    // Taille max : 
    elseif( file_exists($_FILES['logo']['tmp_name']) 
          and filesize($_FILES['logo']['tmp_name']) > $taille_max_logo) 
    { 
        $erreur = 'Votre fichier doit faire moins de '.$taille_max_logo.' octets !'; 
    } 
    elseif(file_exists($_FILES['logo']['tmp_name'])){ 
      
        // Définition de la longueur et de la largeur max 
        $longueur_logo_max = "80"; 
        $largeur_logo_max = "80"; 

        $size_logo = getimagesize($_FILES['logo']['tmp_name']); 

        if(($size_logo[0] > $largeur_logo_max) || ($size_logo[1] > $longueur_logo_max)){ 
            $erreur .= 'Les dimensions du logo sont trop grandes !'; 
            $erreur .= 'Taille de votre photo : '.$size_logo[1].'x'.$size_logo[0].'<br />'; 
            $erreur .= 'Taille maximale autorisée :'.$longueur_logo_max.'x'.$largeur_logo_max.'<br />'; 
        } 

    } 
    // 
    // Fin des vérifications 
    // 
    // 
    // Copie des fichiers 
    // 
    if(!isset($erreur))     
    { 
        // 
        // Copie de la photo. 
        // 
        $dest_fichier = basename($_FILES['photo']['name']); 
        // formatage nom fichier 
        // enlever les accents 
        $dest_fichier = strtr($dest_fichier, 'ÀÁÂÃÄÅÇÈÉÊËÌÍÎÏÒÓÔÕÖÙÚÛÜÝàáâãäåçèéêëìíîïðòóôõöùúûüýÿ', 'AAAAAACEEEEIIIIOOOOOUUUUYaaaaaaceeeeiiiioooooouuuuyy'); 
        // remplacer les caracteres autres que lettres, chiffres et point par _ 
        $dest_fichier = preg_replace('/([^.a-z0-1]+)/i', '_', $dest_fichier); 
        // copie du fichier 
        move_uploaded_file($_FILES['photo']['tmp_name'], $dest_dossier . $dest_fichier); 
         
        // 
        // Copie du logo. 
        // 
        $dest_fichier = basename($_FILES['logo']['name']); 
        // formatage nom fichier 
        // enlever les accents 
        $dest_fichier = strtr($dest_fichier, 'ÀÁÂÃÄÅÇÈÉÊËÌÍÎÏÒÓÔÕÖÙÚÛÜÝàáâãäåçèéêëìíîïðòóôõöùúûüýÿ', 'AAAAAACEEEEIIIIOOOOOUUUUYaaaaaaceeeeiiiioooooouuuuyy'); 
        // remplacer les caracteres autres que lettres, chiffres et point par _ 
        $dest_fichier = preg_replace('/([^.a-z0-1]+)/i', '_', $dest_fichier); 
        // copie du fichier 
        move_uploaded_file($_FILES['logo']['tmp_name'], $dest_dossier . $dest_fichier); 
     	
    } 
	// On redirige vers le fichier suivant:	 
    echo "<script type='text/javascript'>window.location.replace('index.php');</script>";
	//header("Location: index.php");
} 

?> 
<html> 
<body> 
<!-- Erreur ? --> 
<?php 
if(isset($erreur)){ 
  echo '<p>', $erreur ,'</p>'; 
} 
?> 

<!-- Formulaire --> 
<!-- Attention, ne de ne pas oublier le  enctype="multipart/form-data" --> 
<form method="POST" action="upload.php" enctype="multipart/form-data"> 
<!-- Limiter la taille des fichiers à 500Ko --> 
<input type="hidden" name="MAX_FILE_SIZE" value="500000" /> 
<fieldset> 
<legend>Uploader vos images</legend> 
<!-- champs d'envoi de fichier, de type file --> 
<p><label for="logo">Uploader votre logo : </label><input type="file" name="logo" /></p> 
<!-- bouton d'envoi --> 
<p><input type="submit" name="envoi" value="Envoyer les fichiers" /></p> 
</legend> 
</fieldset> 
</form>
Mais cela ne change rien :cry:

par Truc » 22 nov. 2005, 00:28

la redirection est placée dans le cas d'une erreur !!

déplace le code apres l'accolade qui suit :wink:

par phpdog » 22 nov. 2005, 00:16

Merci beaucoup Truc :wink:

Je connais le header j'ai essayer mais cela ne change rien, s'est le code qui doit êtr mal placer.

par Truc » 22 nov. 2005, 00:05

tu peut utilioser un header() a la place du javascript. Regarde l'exemple 3 de la doc

par phpdog » 21 nov. 2005, 23:44

Bonjour à tous :wink:

Je voudrai ajouter une redirection a la fin de l'upload mais je n'arrive pas a la placer correctement:
<?php 
if(isset($_FILES['photo'])){ 
    // 
    // Paramètres globaux 
    // 
    unset($erreur); 
    $extensions_ok = array('png', 'gif', 'jpg', 'jpeg'); 
    $taille_max_photo = 500000; 
    $taille_max_logo = 100000; 
    $dest_dossier = '*'; 
    // 
    // Vérifications pour le logo 
    // 
    // Extension : 
    if( !in_array( strtolower(substr(strrchr($_FILES['logo']['name'], '.'), 1), $extensions_ok )) ) 
    { 
        $erreur = 'Veuillez sélectionner un fichier de type png, gif ou jpg !';    
    } 
    // Taille max : 
    elseif( file_exists($_FILES['logo']['tmp_name']) 
          and filesize($_FILES['logo']['tmp_name']) > $taille_max_logo) 
    { 
        $erreur = 'Votre fichier doit faire moins de '.$taille_max_logo.' octets !'; 
    } 
    elseif(file_exists($_FILES['logo']['tmp_name'])){ 
      
        // Définition de la longueur et de la largeur max 
        $longueur_logo_max = "80"; 
        $largeur_logo_max = "80"; 

        $size_logo = getimagesize($_FILES['logo']['tmp_name']); 

        if(($size_logo[0] > $largeur_logo_max) || ($size_logo[1] > $longueur_logo_max)){ 
            $erreur .= 'Les dimensions du logo sont trop grandes !'; 
            $erreur .= 'Taille de votre photo : '.$size_logo[1].'x'.$size_logo[0].'<br />'; 
            $erreur .= 'Taille maximale autorisée :'.$longueur_logo_max.'x'.$largeur_logo_max.'<br />'; 
        } 

    } 
    // 
    // Fin des vérifications 
    // 
    // 
    // Copie des fichiers 
    // 
    if(!isset($erreur))     
    { 
        // 
        // Copie de la photo. 
        // 
        $dest_fichier = basename($_FILES['photo']['name']); 
        // formatage nom fichier 
        // enlever les accents 
        $dest_fichier = strtr($dest_fichier, 'ÀÁÂÃÄÅÇÈÉÊËÌÍÎÏÒÓÔÕÖÙÚÛÜÝàáâãäåçèéêëìíîïðòóôõöùúûüýÿ', 'AAAAAACEEEEIIIIOOOOOUUUUYaaaaaaceeeeiiiioooooouuuuyy'); 
        // remplacer les caracteres autres que lettres, chiffres et point par _ 
        $dest_fichier = preg_replace('/([^.a-z0-1]+)/i', '_', $dest_fichier); 
        // copie du fichier 
        move_uploaded_file($_FILES['photo']['tmp_name'], $dest_dossier . $dest_fichier); 
         
        // 
        // Copie du logo. 
        // 
        $dest_fichier = basename($_FILES['logo']['name']); 
        // formatage nom fichier 
        // enlever les accents 
        $dest_fichier = strtr($dest_fichier, 'ÀÁÂÃÄÅÇÈÉÊËÌÍÎÏÒÓÔÕÖÙÚÛÜÝàáâãäåçèéêëìíîïðòóôõöùúûüýÿ', 'AAAAAACEEEEIIIIOOOOOUUUUYaaaaaaceeeeiiiioooooouuuuyy'); 
        // remplacer les caracteres autres que lettres, chiffres et point par _ 
        $dest_fichier = preg_replace('/([^.a-z0-1]+)/i', '_', $dest_fichier); 
        // copie du fichier 
        move_uploaded_file($_FILES['logo']['tmp_name'], $dest_dossier . $dest_fichier); 
     	
	// On redirige vers le fichier suivant:	 
    echo "<script type='text/javascript'>window.location.replace('index.php');</script>";
    } 
} 

?> 
<html> 
<body> 
<!-- Erreur ? --> 
<?php 
if(isset($erreur)){ 
  echo '<p>', $erreur ,'</p>'; 
} 
?> 

<!-- Formulaire --> 
<!-- Attention, ne de ne pas oublier le  enctype="multipart/form-data" --> 
<form method="POST" action="upload.php" enctype="multipart/form-data"> 
<!-- Limiter la taille des fichiers à 500Ko --> 
<input type="hidden" name="MAX_FILE_SIZE" value="500000" /> 
<fieldset> 
<legend>Uploader vos images</legend> 
<!-- champs d'envoi de fichier, de type file --> 
<p><label for="logo">Uploader votre logo : </label><input type="file" name="logo" /></p> 
<!-- bouton d'envoi --> 
<p><input type="submit" name="envoi" value="Envoyer les fichiers" /></p> 
</legend> 
</fieldset> 
</form>
Quelqu'un pourait m'aider ?

par Cyrano » 20 nov. 2005, 15:21

Nicolas, voudrais-tu éditer ton message et mettre ton code entre balises [php] et [/php] :non: