begin process at 2012 02 15 23:38:54
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Fichier / Disque

 > UPLOAD D'IMAGE SIMPLE ET EFFICACE

UPLOAD D'IMAGE SIMPLE ET EFFICACE


 Information sur la source

Note :
7,83 / 10 - par 6 personnes
7,83 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10
Catégorie :Fichier / Disque Niveau :Débutant Date de création :01/06/2004 Date de mise à jour :02/06/2004 16:48:09 Vu :28 006

Auteur : natha

Ecrire un message privé
Site perso
Commentaire sur cette source (24)
Ajouter un commentaire et/ou une note

 Description

Hop, une autre source... ;)
Donc là c'est un fichier à nommer upload.php et puis copier/coller le code source suivant dedant.

Ensuite bah il suffit d'adapter les variables selon vos besoins :
$largeur_max = 500; // pour la largeur maximale de l'image en px
$hauteur_max = 350; // pour la hauteur maximale de l'image en px
$poids_max = 50000; // pour le poids maximal de l'image en octets

Si vos images ne se trouvent pas dans /images/ et bien il faut changer ça aussi dans le code (2 fois).
N'oubliez pas bien sûr de donner les droits en écriture à votre répertoire d'upload !


(désolé pour le code html pas aux dernières normes que j'ai mis avec la source hein... au cas où y aura des gens super rigoureux ici... ;))

Source

  • <?
  • $err = "";
  • if (isset($type) && $type == "valid")
  • {
  • // A adapter
  • $largeur_max = 500;
  • $hauteur_max = 350;
  • $poids_max = 50000;
  • // Pas touche à la suite
  • $poids_max_txt = round($poids_max / 1024)." ko";
  • if (is_uploaded_file($image))
  • {
  • if ($infos_img = getimagesize($image))
  • {
  • if ($infos_img[0] > $largeur_max)
  • $err .= "L'image a une largeur de ".$infos_img[0]."px alors que la largeur maximale est $largeur_max px.<br />";
  • if ($infos_img[1] > $hauteur_max)
  • $err .= "L'image a une hauteur de ".$infos_img[1]."px alors que la hauteur maximale est $hauteur_max px.<br />";
  • if ($image_size > $poids_max)
  • $err .= "L'image a un poids trop lourd. Il faut qu'elle ne p&egrave;se que $poids_max_txt maximum.<br />";
  • if ($infos_img[2] == 5 || $infos_img[2] == 6)
  • $err .= "Les formats PSD et BMP ne sont pas acceptés. Il faut du GIF, JPG, ou PNG.<br />";
  • if (file_exists("/images/".$image_name))
  • $err .= "Il y a d&eacute;j&agrave; une image avec ce nom.<br />";
  • if ($err == "")
  • {
  • copy($image,"/images/".$image_name);
  • $err = "L'image a bien &eacute;t&eacute; transf&eacute;r&eacute;e";
  • }
  • }
  • else
  • $err .= "Ce n'est pas une image qui a &eacute;t&eacute; upload&eacute;e.<br />";
  • }
  • else
  • $err .= "Aucune image n'a &eacute;t&eacute; upload&eacute;e.<br />";
  • }
  • ?>
  • <html>
  • <head>
  • <title>Upload</title>
  • </head>
  • <body style="margin: 0px 0px 0px 0px;" bgcolor="#CCCCCC">
  • <?
  • if ($err != "")
  • {
  • echo "<div align=\"center\">";
  • echo $err."<br />";
  • echo "<input type=\"button\" value=\"Retour\" onClick=\"javascript:window.location.href='upload.php';\" />";
  • echo "</div>";
  • exit();
  • }
  • ?>
  • <table align="center" width="250" height="100%">
  • <form name="upload" enctype="multipart/form-data" method="POST" action="upload.php?type=valid">
  • <tr>
  • <td align="right">
  • <input type="hidden" name="MAX_FILE_SIZE" value="50000000" />
  • <input type="file" size="35" name="image" /><br>
  • <input type="submit" value="Uploader" />
  • </td>
  • </tr>
  • </form>
  • </table>
  • </body>
  • </html>
<?
$err = "";
if (isset($type) && $type == "valid")
{
	// A adapter
	$largeur_max = 500;
	$hauteur_max = 350;
	$poids_max = 50000;
	// Pas touche à la suite
	$poids_max_txt = round($poids_max / 1024)." ko";
	if (is_uploaded_file($image))
	{
		if ($infos_img = getimagesize($image))
		{
			if ($infos_img[0] > $largeur_max)
				$err .= "L'image a une largeur de ".$infos_img[0]."px alors que la largeur maximale est $largeur_max px.<br />";
			if ($infos_img[1] > $hauteur_max)
				$err .= "L'image a une hauteur de ".$infos_img[1]."px alors que la hauteur maximale est $hauteur_max px.<br />";
			if ($image_size > $poids_max)
				$err .= "L'image a un poids trop lourd. Il faut qu'elle ne p&egrave;se que $poids_max_txt maximum.<br />";
			if ($infos_img[2] == 5 || $infos_img[2] == 6)
				$err .= "Les formats PSD et BMP ne sont pas acceptés. Il faut du GIF, JPG, ou PNG.<br />";
			if (file_exists("/images/".$image_name))
				$err .= "Il y a d&eacute;j&agrave; une image avec ce nom.<br />";
			if ($err == "")
			{
				copy($image,"/images/".$image_name);
				$err = "L'image a bien &eacute;t&eacute; transf&eacute;r&eacute;e";			
			}
		}
		else
			$err .= "Ce n'est pas une image qui a &eacute;t&eacute; upload&eacute;e.<br />";
	}
	else
		$err .= "Aucune image n'a &eacute;t&eacute; upload&eacute;e.<br />";
}
?>
<html>
<head>
<title>Upload</title>
</head>
<body style="margin: 0px 0px 0px 0px;" bgcolor="#CCCCCC">
<?
if ($err != "")
{
	echo "<div align=\"center\">";
	echo $err."<br />";
	echo "<input type=\"button\" value=\"Retour\" onClick=\"javascript:window.location.href='upload.php';\" />";
	echo "</div>";
	exit();
}
?>
<table align="center" width="250" height="100%">
<form name="upload" enctype="multipart/form-data" method="POST" action="upload.php?type=valid">
<tr>
	<td align="right">
		<input type="hidden" name="MAX_FILE_SIZE" value="50000000" />
		<input type="file" size="35" name="image" /><br>
		<input type="submit" value="Uploader" />
	</td>
</tr>
</form>

</table>
</body>
</html>

 Conclusion

Des questions ? Hésitez pas !
Normalement ce source marche avec une config par défaut des dernières version de php 4.

Marchera pas si register_globals est à OFF. Je mettrais à jour après avoir testé une version avec register_globals à ON.


 Sources du même auteur

COUPER UNE CHAINE DE CARACTÈRES SANS COUPER LES MOTS
INTERVALLE ENTRE 2 DATES / DIFFÉRENCE ENTRE 2 DATES
AGE SELON LA DATE DE NAISSANCE

 Sources de la même categorie

UPLOADER DES FICHIER DANSUN DOSSIER, SÉCURISÉ AVEC MOT DE PA... par raizzo
COMPTEUR DE VISITES SUR FICHIER par pierreSabatier
FONCTION RECURSIVE DE DOSSIERS par tefa24600
Source avec Zip CONVERSION DES UNITÉS INFORMATIQUE (O, KIO, MIO, GIO, TIO...... par genetApt151
TROUVER LES DOUBLONS DANS UNE LISTE DE FICHIERS par soobook

Commentaires et avis

Commentaire de BenXbox le 02/06/2004 09:58:21

Ya Une Erreur Ligne 10.

Commentaire de natha le 02/06/2004 10:05:20

Mais encore ?
Ca passe pas ça ?
J'ai ajouté ça vite fait pour que le code soit accessible à tous. Avant fallait modifier ces trucs là direct dans la suite.

Commentaire de BenXbox le 02/06/2004 10:08:37

Comment je fais pour qu'il marche stp sur mon site ???
Ta msn ?

Commentaire de RedFo1 le 02/06/2004 15:54:15

pour l'erreur à la ligne 10, je sais pas trop ce qui n'allait pas exactement, mais en la remplaçant par ça -&gt; $poids_max_txt = round($poids_max / 1024,1)." ko"; ça marche
Cependant, il y a une autre erreur :
"Notice: Undefined variable: type in F:\SERVER\HTTP\php\echo.php on line 3"
Tu as vraiment testé le script ?

Commentaire de natha le 02/06/2004 16:44:20

J'ai pas testé c'te version, j'ai modifié 2 ou 3 trucs pour le rendre plus accessible.

La variable $type est ok par contre car elle sert quand tu soumets le fichier. D'ailleurs ce n'est pas une erreur mais une "Notice" car tu as configuré ton serveur afin qu'il te donne tous les warnings possible !

Je corrige ça dans l'instant pour que ça marche quand même.

Commentaire de RedFo1 le 02/06/2004 18:25:07

en fait, je me pose des questions...
Sur ce site, à chaque fois que je vois un script qui utilise
"upload.php?variable=valeur" par exemple,  pour récupérer la variable dans le script, il y a directement écrit :
if($variable=="une valeur"), etc
alors que chez moi, pour récupérer la variable, il me faut un code du genre :
$query_string = getenv("QUERY_STRING");
$env_array = split("&", $query_string);
while (list($key,$val) = each($env_array))
{
list($name,$value) = split("=",$val);

$name = urldecode($name);
$value = urldecode($value);

$$name = trim($value);
}

De même, pour récupérer des valeurs de formulaires, je vois tout le monde utiliser directement $variable, alors que chez moi, je dois utiliser $_POST["variable"]
Est-ce qu'il y a quelque chose qui ne va pas sur mon serveur ?

Commentaire de natha le 02/06/2004 18:49:41

Nan ton serveur est configuré comme tout serveur devrait ! Par contre tu te compliques un peu la vie pour la valeur en paramètre... Plutôt que ton getenv(..) tu peux utiliser $_GET["variable"], c'est mieux non ? ;)

Mon script date un peu, c'est pour ça qu'il n'est pas aux dernières normes mais je vais le mettre à jour. J'y avais pas trop pensé au départ en le postant.

Commentaire de RedFo1 le 02/06/2004 21:48:34

lol, effectivemet, $_GET["variable"], c'est drôlement plus simple et ça marche :)

Commentaire de galakb2000 le 26/10/2004 20:04:18

moi ça me va très bien, ça m'a bien dépanné merci.

Commentaire de valentin85 le 02/12/2004 11:40:14

si votre script a une erreur a la ligne 27

remplacer par :

move_uploaded_file($image,"images/".$image_name);

good up !

Commentaire de KheYrO le 12/01/2005 16:47:32

Je voudrais savoir d'où sort le $image_size ???

Commentaire de natha le 12/01/2005 17:11:28

C'est une des variables qui est postée par le formulaire de façon automatique quand tu envoie des pièces jointes.

Le mieux maintenant serait d'utiliser la globale $_POST[...]

Commentaire de everme le 28/02/2005 19:56:21

Mon serveur d'hébergement a php4.3 et ça passe pas...
Keskifo kje change dans le code ?

Commentaire de natha le 02/03/2005 14:18:20

Cf mon commentaire final :

"Marchera pas si register_globals est à OFF. Je mettrais à jour après avoir testé une version avec register_globals à ON."

C'est sûrement ton cas. Il faut vraiment que je fasse une version à jour... Dans les autres commentaires tu as un début d'explication à comment résoudre ce problème.

La variable $image ne marchera pas non plus, il faut utiliser $_FILES["image"]. Consulte la doc de php.net pour voir comment utiliser les globales ($_POST, $_GET, $_FILES...). Je te conseille la version chm en français de la doc. C'est ce qui est de plus simple à utiliser.

Commentaire de Gamleur84 le 23/04/2005 21:27:14

Merci pour ton code, il m'a aidé !!!

Pour certain débutant comme moi :

Si vous voulez obtenir le nom de l'image seulement :
$image_name = basename($image);

Commentaire de natha le 24/04/2005 13:47:13

euh, normalement $image_name est déjà rempli avec le nom de l'image, tu n'as pas à faire ça

tout comme $image_size est déjà rempli avec la taille de l'image

(hors considérations de register_globals à OFF bien sûr)

Commentaire de dester le 08/05/2005 04:10:15

Par conter y a un probleme avec ce script il laisse passer l'upload de .php !
Grosse erreur de securité.

Commentaire de natha le 09/05/2005 13:03:36

C'est pas une erreur, je ne fournis pas forcément du code clé en main.

Dans mon cas ce script est protégé par un login/pass administrateur donc aucun soucis, peu importe ce qu'il laisse uploader. A chacun d'utiliser intelligemment ce qui est fournis.

Commentaire de gprieur le 24/05/2005 16:14:28

si tu ve éviter l'upload de php tu peux les changer en .txt :

    $nomDestinationFic = $_FILES["monfichier"]["name"];

    if (eregi(".php", $nomDestinationFic)) {
        // traitement
        $nomDestinationFic .= ".txt";
    }

en fait, à la place de traitement tu y mets ce que tu veux :)

Commentaire de supergrey le 24/06/2005 15:03:00

Salut je voudrais savoir s'il est possible d'uploader un fichier directement en entrant une url dans IE par exemple: http://mon.site/script.php?chemin=c:\image.jpg
Merci

Commentaire de natha le 24/06/2005 15:10:56

En passant par du javascript je pense que c'est possible...
Le javascript prépare le formulaire avec l'uri du fichier et le soumet. Php fait alors le reste du boulôt comme dans ce code.
A vérifier, j'ai jamais fait.

Commentaire de babatt92 le 18/10/2005 00:02:24

et s'il ya plusieurs ficher a télécharger comment fait on?
<input type="file" size="35" name="image1" /><
<input type="file" size="35" name="image2" /><
<input type="file" size="35" name="image3" /><
<input type="file" size="35" name="image4" /><
<input type="file" size="35" name="image5" /><

Commentaire de natha le 21/10/2005 14:39:47

Plusieurs moyens...

Ca ca devrait marcher : tu gères une liste de fichier au lieu d'un à la fois :
<input type="file" size="35" name="image[]" />
<input type="file" size="35" name="image[]" />
<input type="file" size="35" name="image[]" />

Et tu fais un javascript qui te permet d'ajouter ces lignes dynamiquement. A toi de te creuser la tête :)

Commentaire de ah_ah_ah le 15/07/2006 13:31:22

moi je choisi une image, je l'upload, mais sa n'affiche aucun message! et dans mon dossier images, mon imzge n'y est pas :(

 Ajouter un commentaire




Nos sponsors


Sondage...

CalendriCode

Février 2012
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
272829    

Consulter la suite du CalendriCode

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 1,092 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales