Gestionnaire d'images pour interface d'admin

Soyez le premier à donner votre avis sur cette source.

Vue 11 299 fois - Téléchargée 1 244 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

cs_Elektordi
Messages postés
187
Date d'inscription
mardi 31 décembre 2002
Statut
Membre
Dernière intervention
21 janvier 2008
-
J'ai oublié de préciser:
Désolé mais mon code nécessite l'option $register_globals... Je sais, c'est une mauvaise habitude ! Mais j'arrive pas à m'en défaire !!!
alpha386
Messages postés
16
Date d'inscription
jeudi 23 octobre 2003
Statut
Membre
Dernière intervention
15 novembre 2006
-
Salut

Peux-tu le mettre en zip, cela me tente pas d'effacer les 242 numéros devant le code
cs_Elektordi
Messages postés
187
Date d'inscription
mardi 31 décembre 2002
Statut
Membre
Dernière intervention
21 janvier 2008
-
Pas besoin... Nix a fait du bon booulot...

Si tu sélectionne le code et que tu fait copier, ca le copie sans les numéros de ligne !!!
coockiesch
Messages postés
2268
Date d'inscription
mercredi 27 novembre 2002
Statut
Membre
Dernière intervention
13 septembre 2013
3 -
"Pas besoin... Nix a fait du bon booulot...

Si tu sélectionne le code et que tu fait copier, ca le copie sans les numéros de ligne !!!"
>> Heu... Manifestement pas chez moi, :D

@++

R@f
Utilisateur anonyme -
Parreil pour moi :(

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.