Gestionnaire d'images pour interface d'admin

Soyez le premier à donner votre avis sur cette source.

Vue 11 440 fois - Téléchargée 1 254 fois

Description

Je l'utilise sur mon site pour que les admins puissent envoyer leur propres images pour les news... Le bout de code correspondant à la page d'ajout de news est en commentaire à la fin du code !

Il gérè:
-La liste des images
-L'envoi (upload) d'images
-La copie depuis un autre site (via une requête HTTP)
-La supression (avec confirmation)
-La sélection avec aperçu depuis une autre page

Mais bon, rien ne vous empêche de l'utiliser pour autre chose que des images... Mais dans ce cas, il faudrait revoir le code de réception http.

Source / Exemple :


<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML LANG="fr">
<HEAD>
  <TITLE>Console d'administration: Images</TITLE>
  <META HTTP-EQUIV="content-type" CONTENT="text/html; charset=iso-8859-1">
  <META HTTP-EQUIV="content-style-type" CONTENT="text/css">
  <META HTTP-EQUIV="content-script-type" CONTENT="text/javascript">
  <META NAME="author" CONTENT="Elektordi">
</HEAD>
<body>
<h1 align="center">Console d'administration: Images</h1>
  
 <?
 
 $script_name = "gestion_images.php";
 $repertoire = "images/";
 
 if($mode=="copy") // Copier une image depuis une URL
 {

	echo "<h2>Copie d'image</h2>\n";
	
	$er=0;
	if(!preg_match('/^(http:\/\/)?([\w\-\.]+)\:?([0-9]*)\/(.*)$/', $url, $url_ary)) $er=1;
	if(empty($url_ary[4])) $er=1;
	
	if($er==1) {
?><form name="form1" method="post" action="<? echo $script_name; ?>">
<p><b><font color="red">URL incomplète:</font></b>    
  <input name="url" type="text" id="url" size="100" value="<? echo $url; ?>">
    <input type="submit" name="Submit" value="Copier">
    <input name="mode" type="hidden" id="mode" value="copy"> 
   <a href="<? echo $script_name; ?>">Annuler</a></p>
</form>
 <?
	}
	else
	{
		$maxsize = 100000;
		
		$base_filename = substr($url_ary[4],strrpos($url_ary[4],"/")+1);
	
		$base_get = '/' . $url_ary[4];
		$port = ( !empty($url_ary[3]) ) ? $url_ary[3] : 80;

		if($base_filename=="") die("<h2>Impossible de télécharger l'image...</h2><p>Erreur de récupération du nom.</p></body></html>");

		if ( !($fsock = fsockopen($url_ary[2], $port, $errno, $errstr)) )
		{
			die("<h2>Impossible de télécharger l'image...</h2><p>Pas de connexion.</p></body></html>");
		}

		fputs($fsock, "GET $base_get HTTP/1.1\r\n");
		fputs($fsock, "Host: " . $url_ary[2] . "\r\n");
		fputs($fsock, "Accept-Language: fr\r\n");
		fputs($fsock, "Accept-Encoding: none\r\n");
		fputs($fsock, "User-Agent: PHP\r\n");
		fputs($fsock, "Connection: close\r\n\r\n");

		unset($data);
		while( !feof($fsock) )
		{
			$data .= fread($fsock, $maxsize);
		}
		fclose($fsock);

		if (!preg_match('#Content-Length\: ([0-9]+)[^ /][\s]+#i', $data, $file_data1) || !preg_match('#Content-Type\: image/[x\-]*([a-z]+)[\s]+#i', $data, $file_data2))
		{
			die("<h2>Impossible de télécharger l'image...</h2><p>Aucune donnée.</p></body></html>");
		}

		$filesize = $file_data1[1]; 
		$filetype = $file_data2[1]; 

		if ( !$error && $filesize > 0 && $filesize < $maxsize )
		{
			$data = substr($data, strlen($data) - $filesize, $filesize);

			$filename = $repertoire.$base_filename;

			if(file_exists($filename)) echo "<p>Le fichier de destination ".$base_filename." existe déjà !</p>";
			else
			{
				$fptr = fopen($filename, 'wb');
				$bytes_written = fwrite($fptr, $data, $filesize);
				fclose($fptr);
		
				if ( $bytes_written != $filesize )
				{
					unlink($tmp_filename);
					die("<h2>Impossible de télécharger l'image...</h2><p>Echec d'écriture.</p></body></html>");
				}
				echo "<p>".$base_filename." enregistré avec succès ! <img src='".$repertoire.$base_filename."'></p>";
			}
		}
		else
		{
			die("<h2>Impossible de télécharger l'image...</h2><p>Fichier trop gros.</p></body></html>");
		}
	}
 }
 
 if($mode=="upload") // Envoyer une image
 {
	
	echo "<h2>Upload d'image</h2>\n";
	
	$extensions_ok = array('png', 'gif', 'jpg', 'jpeg'); 
	$taille_max = 100000;  
	// vérifications 
	if( !in_array( strtolower(substr(strrchr($_FILES['file']['name'], '.'), 1)), $extensions_ok) ) 
	{ 
		$erreur = 'Veuillez sélectionner un fichier de type png, gif ou jpg !'; 
	} 
	elseif( file_exists($_FILES['file']['tmp_name']) 
		and filesize($_FILES['file']['tmp_name']) > $taille_max) 
	{ 
		$erreur = 'Votre fichier doit faire moins de 500Ko !'; 
	} 
	// copie du fichier 
	if(!isset($erreur)) 
	{ 
		$dest_fichier = basename($_FILES['file']['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); 
		//vérif
		if(file_exists($repertoire.$dest_fichier)) echo "<p>Le fichier de destination existe déjà !</p>";
		else {
			// copie du fichier 
			move_uploaded_file($_FILES['file']['tmp_name'], $repertoire.$dest_fichier); 
			echo "<p>".$dest_fichier." envoyé avec succès ! <img src='".$repertoire.$dest_fichier."'></p>";
		}
	} 
	else{ 
		echo "<p>".$erreur."</p>"; 
	} 
	
 }
 
 if($mode=="del") // Supprimer une image
 {
 	if(!isset($file)) die("<h2>Aucun nom de fichier !</h2></body></html>");
	
	if(!file_exists($repertoire.$file)) die("<h2>Fichier inexistant !</h2></body></html>");
	
	if(isset($confirm))
	{
		if($confirm+10<time()) die("<h2>L'action a expirée...</h2></body></html>");
	
		unlink($repertoire.$file);
	
		echo "<h2>Entrée supprimée !</h2>";
	}
	else
	{
		echo "<h2>Supression d'une image ?</h2>\n";
		echo "<p>Vous êtes sur le point de supprimer l'image '".$file."' qui ressemble à ça: <img src='".$repertoire.$file."'><br>";
		echo "<b>Etes-vous sûr de vouloir continuer ?<br><font size=\"5\">";
		echo "<a href='".$script_name."?mode=del&file=".$file."&confirm=".time()."'><font color='red'>Oui</font></a> - ";
		echo "<a href='".$script_name."'><font color='green'>Non</font></a></font></b></p>\n";
	}
 }
 ?>
 
<h2>Ajout d'images</h2>
<form name="form1" method="post" action="<? echo $script_name; ?>">
<p>Copier une image depuis une URL: 
    <input name="url" type="text" id="url" value="http://www.clonk.de/news/news_???.gif" size="100">
    <input type="submit" name="Submit" value="Copier">
    <input name="mode" type="hidden" id="mode" value="copy">
</p>
</form>
<form action="<? echo $script_name; ?>" method="post" enctype="multipart/form-data" name="form2">
<p>Envoyer une image:
  <input name="file" type="file" size="100">     
  <input type="submit" name="Submit" value="Envoyer">
  <input type="hidden" name="MAX_FILE_SIZE" value="500000" />
  <input name="mode" type="hidden" id="mode" value="upload">
</p>
</form>
<h2>Liste des images</h2>
<?
	$dossier=opendir($repertoire); 
    while ($fichier = readdir($dossier)) { 
        if(is_dir($fichier)) continue;
		$s="";
		if($fichier==$val) $s=" selected";
		echo "<p>".$fichier." = <img src='".$repertoire.$fichier."'> [ <a href='".$script_name."?mode=del&file=".$fichier."'>Supprimer</a> ]</p>";
    } 
	
?>
<h2>Fini ?</h2>
<p>Alors on retourne à l'<a href="admin.php">index de l'administration</a>... </p>
</body>
</html>

<?
/*
Voici le code à mettre dans une autre page pour sélectionner l'image:

<?
$repertoire="images/";

 function put_imgselector($name, $val)
 {
 	echo "<select name='".$name."' onchange=\"preview('".$name."');\">\n";
	echo "<option value=''>---AUCUNE---</option>\n";
	$dossier=opendir($repertoire); 
    while ($fichier = readdir($dossier)) { 
        if(is_dir($fichier)) continue;
		$s="";
		if($fichier==$val) $s=" selected";
		echo "<option value='".$fichier."'".$s.">".$fichier."</option>\n";
    } 
 	echo "</select>   <img id='".$name."_prv' src='".$repertoire.$val."' border='1'>\n";
 }
 
?>

<script language="JavaScript" type="text/JavaScript">
function preview(name)
{
	var img;
	img = document.getElementById(name).value;
	document.getElementById(name+"_prv").src="<? echo $repertoire; ?>"+img;
}
</script>

---Code formulaire---
Image : <? put_imgselector("img_g", $img_g); ?>
---Fin formulaire---

  • /
// Voila ! C'est tout... //Elektordi ?>

Conclusion :


Comme c'est prévu pour une interface d'admin, il n'y a pas de sécuritées ni de vérifications...

Pour ce code, je me suis inspiré de
-Anciens codes à moi
-http://www.phpcs.com/codes/UPLOAD-FICHIERS_31345.aspx
-sources de phpbb

Pour ce dernier, je remercie celui qui a écrit le script de gestion des avatars car un code de copie d'images/de fichiers avec une URL, c'est rare... (en tout cas y'avait rien sur PHP-CS !)

N'hésitez pas à commenter ma source.

Codes Sources

A voir également

Ajouter un commentaire Commentaires
Messages postés
129
Date d'inscription
vendredi 17 mars 2006
Statut
Membre
Dernière intervention
27 février 2012

ok , vais copier celui de cette page, dans le zip, il y a plein de doubles dans le codes, c'est pas le même qu'ici

merci à toi
Messages postés
186
Date d'inscription
mardi 31 décembre 2002
Statut
Membre
Dernière intervention
21 janvier 2008

Non, remplacer certaines des doubles par des simples... Regarde le code sur cette page !
Messages postés
129
Date d'inscription
vendredi 17 mars 2006
Statut
Membre
Dernière intervention
27 février 2012

c'est curieux , j'ai juste ouvert dans dreamweaver le fichier.php !
Donc il faut que j'enleve les doubles quotes ?
je vais essayer merci !
Messages postés
186
Date d'inscription
mardi 31 décembre 2002
Statut
Membre
Dernière intervention
21 janvier 2008

Bonjour,

A première vue tu as fait une erreur de copier coller... (ou de sauvegarde)
Regarde bien ligne 206 dans mon code, il y a des simple quotes (') et des doubles quotes (") qui se sont tous retrouvés en double quotes dans ton code !

Elektordi
Messages postés
129
Date d'inscription
vendredi 17 mars 2006
Statut
Membre
Dernière intervention
27 février 2012

bonjour,
quand je teste ce script il me met erreur :
Parse error: parse error, expecting `','' or `';'' in c:\program files\easyphp1-8\www\phpcs_gestionnaire\gestion_images.php on line 206

et la ligne 206 est :
if($fichier==$val) $s=" selected";
echo "".$fichier." = [ [' Supprimer] ]

";
}

comprend pas tout hi !

merci à vous

laurent
Afficher les 19 commentaires

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.