Page 1 sur 4

Un script PHP pour uploader des fichiers sur le serveur

Posté : 19 nov. 2005, 11:07
par phpdog
Bonjour à tous :wink:

Je voudrai créer un script en PHP qui permette d’uploader des fichiers sur le serveur, quelqu’un saurait-il m’aider ?

Posté : 19 nov. 2005, 13:09
par s3b54sk8

Posté : 19 nov. 2005, 17:14
par phpdog
Bonjour s3b54sk8 et merci :wink:

J’ai donc récupéré ceci sur le lien que vous m’avez donné:
<!-- Formulaire --><!-- Attention, ne de ne pas oublier le  enctype="multipart/form-data" --><form method="POST" action="notre_script.php" enctype="multipart/form-data"><!-- Limiter la taille des fichiers à 500Ko --><input type="hidden" name="MAX_FILE_SIZE" value="500000" /> <fieldset><legend>Envoi de fichiers</legend><!-- champs d'envoi de fichier, de type file --><p><label for="Fichier">Fichier :</label><input type="file" name="photo" /></p><!-- bouton d'envoi --><p><input type="submit" name="envoi" value="Envoyer le fichier" /></p></legend></fieldset></form>
J’ai vu sur le lien qu’il faut d’abord uploader le fichier qui sera placer dans un répertoire temporaire puis ensuite il faut le copier au bonne endroit, mais je n’en suis pas la car j’ai un petit souci avec se premier script pour uploader le fichier, j’ai donc placer mon script php dans le répertoire www de EasyPHP, puis je l’ai lancer dans mon navigateur, la page affiche 1 bouton pour aller chercher le fichier sur le disque dur puis 1 autre bouton pour l’envoyer sur le serveur, donc je vais chercher un fichier puis je clique sur envoyer et la apparaît une page introuvable, voyer vous se qui ne va pas ?

Posté : 19 nov. 2005, 17:17
par phpdog
Et au faite s'est possible aussi d'envoyer un dossier ?

Ou bien alors un zip puis de le déziper une fois sur le serveur ?

Posté : 19 nov. 2005, 17:27
par agilis
Tu ne peux pas uploader de dossiers.
Par contre, il y a effectivement moyen d'uploader un zip et de l'extraire sur le serveur. Pour l'extraire, fais uen recherche google, tu devrais trouver assez facilement.

a+

Posté : 19 nov. 2005, 21:33
par phpdog
Bonjour agilis et merci :wink:

Bon OK pas de dossier, je vais faire une petite recherche pour les .zip.

Je revien a mon script :
<!-- Formulaire -->
<!-- Attention, ne de ne pas oublier le  enctype="multipart/form-data" -->
<form method="POST" action="notre_script.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">Logo :</label><input type="file" name="logo" /></p>
<p><label for="photo">Photo :</label><input type="file" name="photo" /></p>
<!-- bouton d'envoi -->
<p><input type="submit" name="envoi" value="Envoyer les fichiers" /></p>
</legend>
</fieldset>
</form>
J’aimerai pouvoir ajouter à mon script une limite de taille pour le logo à 80 px sur 80 px, et pour la photo à 700 px sur 500 px, quelqu’un pourrait-il m’aider je bloque complètement ?

Posté : 19 nov. 2005, 21:39
par s3b54sk8
La fonction getimagesize() pourra t'être utile je pense.

Edit : je te fais le code des vérifications de suite :wink:

Posté : 19 nov. 2005, 21:58
par phpdog
Merci pour le lien :wink:

J'ai regarder mais je n'arrive vraiment pas a comprendre comentje peut intégrer cette fonction à mon script, pouriez vous m'aider ?

Posté : 19 nov. 2005, 22:02
par s3b54sk8
Exemple pour les photos :
<?php

if(isset($_FILES['photo'])){

	// params
	unset($erreur);
	$extensions_ok = array('png', 'gif', 'jpg', 'jpeg');
	$taille_max = 100000;
	$dest_dossier = '/home/monsite/photos/';
	
	// vérifications
	if( !in_array( substr(strrchr($_FILES['photo']['name'], '.'), 1), $extensions_ok ) )
	{
		$erreur = 'Veuillez sélectionner un fichier de type png, gif ou jpg !';  
	}
	elseif( file_exists($_FILES['photo']['tmp_name']) 
          and filesize($_FILES['photo']['tmp_name']) > $taille_max)
	{
		$erreur = 'Votre fichier doit faire moins de 500Ko !';
	}

	//
	// Vérification de la taille de la photo
	//
	
	// Définition de la longueur et de la largeur max
	$longueur_photo_max = "700"; 
	$largeur_photo_max = "500"; 

	elseif(file_exists($_FILES['photo']['tmp_name'])){

		$size = getimagesize($_FILES['photo']['tmp_name']);

		if(($size[0] > $largeur_photo_max) || ($size[1] > $longueur_photo_max)){
			$erreur = 'Les dimensions de la photo sont trop grandes !';
		}

	}
	//
	// Fin de la vérification
	//


  // copie du fichier
  if(!isset($erreur))
  {
    $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);
  }
}

?>

Posté : 19 nov. 2005, 22:06
par phpdog
Merci pour votre patience :wink:

J'ai essayer comme ceci:
<!-- Formulaire -->
<!-- Attention, ne de ne pas oublier le  enctype="multipart/form-data" -->
<form method="POST" action="notre_script.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>
<p><label for="photo">Uploader votre photo : </label><input type="file" name="photo" /></p>
$longueur_photo_max = "700"; 
    $largeur_photo_max = "500"; 

    elseif(file_exists($_FILES['photo']['tmp_name'])){ 

        $size = getimagesize($_FILES['photo']['tmp_name']); 

        if(($size[0] > $largeur_photo_max) || ($size[1] > $longueur_photo_max)){ 
            $erreur = 'Les dimensions de la photo sont trop grandes !'; 
        } 

    } 
<!-- bouton d'envoi -->
<p><input type="submit" name="envoi" value="Envoyer les fichiers" /></p>
</legend>
</fieldset>
</form> 
Mais je bloque encore :oops:

Posté : 19 nov. 2005, 22:07
par s3b54sk8
Oui désolé, j'ai édité mon message, je m'étais trompé dans le copier/collé, j'avais pris que la partie du code que j'ai faite sans préciser ou la mettre :oops:

Posté : 19 nov. 2005, 22:10
par phpdog
OK merci encore :wink:

Mais se script me renvoi l'erreur:

Code : Tout sélectionner

Parse error: parse error in C:\easyPHP\www\upload\upload_2a.php on line 30

Posté : 19 nov. 2005, 22:13
par rami
C'est parce qu'il y a du code entre 2 else if.

Voici la correction du code donné par s3b54sk8
<?php

if(isset($_FILES['photo'])){

    // params
    unset($erreur);
    $extensions_ok = array('png', 'gif', 'jpg', 'jpeg');
    $taille_max = 100000;
    $dest_dossier = '/home/monsite/photos/';
    
    // vérifications
    if( !in_array( substr(strrchr($_FILES['photo']['name'], '.'), 1), $extensions_ok ) )
    {
        $erreur = 'Veuillez sélectionner un fichier de type png, gif ou jpg !';  
    }
    elseif( file_exists($_FILES['photo']['tmp_name'])
          and filesize($_FILES['photo']['tmp_name']) > $taille_max)
    {
        $erreur = 'Votre fichier doit faire moins de 500Ko !';
    }

    //
    // Vérification de la taille de la photo
    //
    
   

    elseif(file_exists($_FILES['photo']['tmp_name'])){
		 // Définition de la longueur et de la largeur max
    	$longueur_photo_max = "700";
    	$largeur_photo_max = "500";
        $size = getimagesize($_FILES['photo']['tmp_name']);

        if(($size[0] > $largeur_photo_max) || ($size[1] > $longueur_photo_max)){
            $erreur = 'Les dimensions de la photo sont trop grandes !';
        }

    }
    //
    // Fin de la vérification
    //


  // copie du fichier
  if(!isset($erreur))
  {
    $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);
  }
}

?>

Posté : 19 nov. 2005, 22:13
par s3b54sk8
Arg je suis même plus capable d'aider sans faire de super boulettes :cry:

Posté : 19 nov. 2005, 22:24
par phpdog
Bonjour rami et merci :wink:

Avec votre code la page et completement vide.