Un script PHP pour uploader des fichiers sur le serveur

Eléphant du PHP | 82 Messages

19 nov. 2005, 22:30

Tu as laissé ca à la fin ? :
<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="30.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="photo">Photo :</label><input type="file" name="photo" /></p>
<p><label for="photo_2">Photo 2 :</label><input type="file" name="photo_2" /></p>
<!-- bouton d'envoi -->
<p><input type="submit" name="envoi" value="Envoyer les fichiers" /></p>
</legend>
</fieldset>
</form>
</body>
</html>

Parce que je t'ai donné juste la partie entre <? et ?>, fallait laisser ca à la fin.
Sébastien.

Mammouth du PHP | 983 Messages

19 nov. 2005, 22:31

Et le fichier est bien uploadé ou pas?

Dans le code donné, aucun n'affichage n'est prévu si tout se passe bien. Donc peut etre que tout s'est bien passé.

phpdog, je crois qu'il faut essayer de comprendre le code qu'on te donne. Car là, tu passes la journée à demander un code à chaque nouvelle chose que tu veux faire. Je ne suis pas certain que ce soit la meilleure façon d'apprendre à programmer.

Essaies de comprendre ce qu'on te donne, d'aller lire la doc php, et pose des questions quand tu ne comprends vraiment pas ;)

Eléphant du PHP | 80 Messages

19 nov. 2005, 22:32

Bonjour rami et merci :wink:

Avec votre code la page et completement vide.
C'est tout à fait normal si l'upload c'est bien passé je pense. Rajoute
echo "Upload réussi";
après le move_uploaded_file(....);

a+
Merci à tous!

Eléphant du PHP | 355 Messages

19 nov. 2005, 22:39

Merci encore s3b54sk8 :wink:

Vous voulez die comme ceci :
<?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); 
  } 
} 

?> 
<!-- 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>
<!-- bouton d'envoi -->
<p><input type="submit" name="envoi" value="Envoyer les fichiers" /></p>
</legend>
</fieldset>
</form>

rami merci encore :wink:

Non le fichier na pas été Uploader.
Merci pour le lien :wink:


Bonjour agilis et merci :wink:

Eléphant du PHP | 82 Messages

19 nov. 2005, 22:40

Bon voilà ce que ca doit donner avec les 2 vérifications, et le code est complet cette fois :
<?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 !';
		}

	}

	//
	// Vérification de la taille du logo
	//

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

	}
	//
	// 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);
  }
}

?>
<html>
<body>
<!-- Erreur ? -->
<?php 
if(isset($erreur)){
  echo '<p>', $erreur ,'</p>';
}
?>
<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="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>
<!-- bouton d'envoi -->
<p><input type="submit" name="envoi" value="Envoyer les fichiers" /></p>
</legend>
</fieldset>
</form>

Mais je suis de l'avis de Rami, essaye de compendre en même temps :wink:
Sébastien.

Eléphant du PHP | 355 Messages

19 nov. 2005, 22:55

Merci beaucoup :wink:

Sa va déjà mieux, la page s’affiche correctement, il reste tout de même se bug qui m’enpèche de vérifier si le script fonctionne bien, je parle du bug que j’ai depuis le premier script, donc j’ouvre mon script dans le navigateur, je vais chercher une image puis je clique sur Envoyer et la une page d’erreur apparaît, quelqu’un pourrait-il tester le code chez lui pour voir s’il fonctionne bien ?
Modifié en dernier par phpdog le 19 nov. 2005, 22:57, modifié 1 fois.

Eléphant du PHP | 355 Messages

19 nov. 2005, 22:56

Autre chose, les image seront uploader dans le dosier courant, cette ligne est elle vraiment utile ?
    $dest_dossier = '/home/monsite/photos/'; 

Eléphant du PHP | 82 Messages

19 nov. 2005, 23:21

Merci beaucoup :wink:
De rien.


Sa va déjà mieux, la page s’affiche correctement, il reste tout de même se bug qui m’enpèche de vérifier si le script fonctionne bien, je parle du bug que j’ai depuis le premier script, donc j’ouvre mon script dans le navigateur, je vais chercher une image puis je clique sur Envoyer et la une page d’erreur apparaît, quelqu’un pourrait-il tester le code chez lui pour voir s’il fonctionne bien ?
C'est quoi le nom de ton fichier *.php ?
Sébastien.

Eléphant du PHP | 355 Messages

19 nov. 2005, 23:39

Mon fichier s'apple: Upload.php

Eléphant du PHP | 82 Messages

19 nov. 2005, 23:52

Alors c'est normal que ca marche pas ! Dans le code, tu as pas remplacer le nom du fichier qui executera l'action du formulaire, ce qui fait que ton formulaire va appeler un fichier qui n'existe pas dans ton dossier, d'où l'erreur.


Trouve dans le code :

Code : Tout sélectionner

<form method="POST" action="notre_script.php" enctype="multipart/form-data">
Remplace par :

Code : Tout sélectionner

<form method="POST" action="Upload.php" enctype="multipart/form-data">
Normalement, ca devrait déjà mieux fonctionner.
Sébastien.

Eléphant du PHP | 355 Messages

20 nov. 2005, 00:12

Ok s'est beaucoup mieux, merci encore pour votre patience :wink:

Il reste cepandant un bug, je tente d'uploader une image JPG de 50 px sur 50 px et voila se qui viens:

Code : Tout sélectionner

Veuillez sélectionner un fichier de type png, gif ou jpg ! Veuillez sélectionner un fichier de type png, gif ou jpg !
Si j'uploade deux image JPG de 50 px sur 50 px, voila se qui viens:

Code : Tout sélectionner

Warning: move_uploaded_file(/home/monsite/photos/lune_.jpg): failed to open stream: No such file or directory in C:\easyPHP\www\upload\upload_2a.php on line 73 Warning: move_uploaded_file(): Unable to move 'C:\easyPHP\www\tmp\phpF4.tmp' to '/home/monsite/photos/lune_.jpg' in C:\easyPHP\www\upload\upload_2a.php on line 73

Mammouth du PHP | 983 Messages

20 nov. 2005, 00:18

Pour ce qui est des extensions, il faut remplacer cette ligne :
// if( !in_array( substr(strrchr($_FILES['photo']['name'], '.'), 1), $extensions_ok ) ) par

 if( !in_array( strtolower(substr(strrchr($_FILES['photo']['name'], '.'), 1), $extensions_ok )) ) 
Pour les auters erreurs, il faut que tu changes le répertoire de destination. Dans le tutorial, on upload les fichiers vers '/home/monsite/photos/'. Dans ton cas, tu sais bien que ce n'est pas le cas, donc remplace la ligne:
//$dest_dossier = '/home/monsite/photos/';  par
$dest_dossier = './';
 
Comme je te le disais tout à l'heure, il faut que tu essaies de comprednre par toit même les scripts que tu trouves ou qu'on te donne. Car si tu fais des copier coller sans rien comprendre à ce que tu fais, tu ne vas pas progresser bien vite. ;)

Eléphant du PHP | 82 Messages

20 nov. 2005, 00:21

Pour le 2è, deux choses aussi :
- soit le dossier dans lequel tu veux placer tes images existe pas
- soit le dossier ne possède pas les droits (chmod 0777) pour que le fichier soit déplacé dans celui si.
Sébastien.

Eléphant du PHP | 355 Messages

20 nov. 2005, 00:36

Merci rami :wink:

Que dois-je mettre a la place de:
// if( !in_array( substr(strrchr($_FILES['photo']['name'], '.'), 1), $extensions_ok ) ) par 

if( !in_array( strtolower(substr(strrchr($_FILES['photo']['name'], '.'), 1), $extensions_ok )) )

Eléphant du PHP | 355 Messages

20 nov. 2005, 00:52

Petit récapitulatif :

Sa avance bien mais la encore je bloque j’ai bien regarder le script mais je pige pas grand-chose, donc si j’uploade seulement le logo j’ai le message :

Code : Tout sélectionner

Veuillez sélectionner un fichier de type png, gif ou jpg ! Veuillez sélectionner un fichier de type png, gif ou jpg !
Si j’uploade seulement la photo tout va bien.
Maintenant si j’uploade le logo et la photo seul le logo et copier.

Voici donc mon script complet a sont état actuel:
<?php 

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

    // params 
    unset($erreur); 
    $extensions_ok = array('png', 'gif', 'jpg', 'jpeg'); 
    $taille_max = 100000; 
    $dest_dossier = 'Corps_In/'; 
     
    // 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 !'; 
        } 

    } 

    // 
    // Vérification de la taille du logo 
    // 

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

    } 
    // 
    // 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); 
  } 
} 

?> 
<html> 
<body> 
<!-- Erreur ? --> 
<?php 
if(isset($erreur)){ 
  echo '<p>', $erreur ,'</p>'; 
} 
?> 
<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_2a.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> 
<!-- bouton d'envoi --> 
<p><input type="submit" name="envoi" value="Envoyer les fichiers" /></p> 
</legend> 
</fieldset> 
</form>