Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

COPYRIGHT SUR IMAGES


Information sur la source

Catégorie :Graphique Classé sous : copyright, gd2, image Niveau : Débutant Date de création : 09/10/2006 Date de mise à jour : 22/10/2006 18:32:54 Vu / téléchargé: 8 015 / 739

Note :
7,33 / 10 - par 3 personnes
7,33 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10

Commentaire sur cette source (70)
Ajouter un commentaire et/ou une note

Description

Cliquez pour voir la capture en taille normale
Bonjours, j'ai créé ce script pour un copain qui en avait marre de rajouter l'adresse de son site sur toutes les images qu'il rajoutait!

Donc je lui est proposé de faire un script qui fait tout cela...

Facile d'utilisation, il vous demande que faire ou presque :D
 

Source

  • <?php
  • // ** Ne rien modifier ici
  • define('fond_fichier', 'fond.jpg'); // Image de fond
  • define('longeur_max', 20); // Longueur maximal du nom d'un fichier (pour tronquage)
  • define('police', 'polices/police.ttf'); // Police utilisé
  • define('skin', 'style'); // Emplacement du skin
  • $format = array(1 => 'gif', 2 => 'jpeg', 3 => 'png');
  • include 'config.php';
  • // Fonctions, elles permettent d'exécuter un code plusieurs fois pour différentes choses
  • function mise_majmin($chaine,$majmin,$plus){
  • define('min', 'efgijnpäâàáåãéèëêòóôõöøìíîïùúûüýñçþÿæœðø');
  • define('maj', 'EFGIJNPÄÂÀÁÅÃÉÈËÊÒÓÔÕÖØÌÍÎÏÙÚÛÜÝÑÇÞÝÆŒÐØ');
  • $chaine = strtoupper($chaine);
  • if($majmin === 'maj'){
  • $chaine = strtr($chaine, min, maj);
  • if($chaine === 'JPG' && $plus === 1){$chaine = 'JPEG';}
  • }else if($majmin === 'min'){
  • $chaine = strtr($chaine, maj, min);
  • if($chaine === 'jpg' && $plus === 1){$chaine = 'jpeg';}
  • }
  • return $chaine;
  • }
  • function tronquer($chaine, $longeur_moy){
  • if (strlen($chaine) > $longeur_moy){
  • $longeur_moy = $longeur_moy / 2;
  • $chaine = substr_replace($chaine, '...', $longeur_moy, - $longeur_moy);
  • }
  • return $chaine;
  • }
  • // Cette condition sert à afficher directement une image avec copyright (par lien)
  • if($_GET['choix'] === 'gen'){
  • define('fichier', $_GET['image']);
  • define('repertoire', $repertoire.'/');
  • if(file_exists(repertoire.fichier)){
  • define('ext_plus', pathinfo(fichier, PATHINFO_EXTENSION)); // Fonction de php qui renvoi l'extension d'un fichier
  • define('ext', mise_majmin(ext_plus, 'maj', 0));
  • list($imagex, $imagey, $type) = getimagesize(repertoire.fichier); // Détails sur l'image
  • header ('Content-type: image/'.$format[$type]);
  • // Lecture de l'image et mise en variable
  • if(ext === 'JPG' or ext === 'JPEG')
  • $image = imagecreatefromjpeg(repertoire.fichier);
  • if(ext === 'PNG')
  • $image = imagecreatefrompng(repertoire.fichier);
  • if(ext === 'GIF')
  • $image = imagecreatefromgif(repertoire.fichier);
  • define('imagex', $imagex); // Nombre de pixel en longueur
  • define('imagey', $imagey); // Nombre de pixel en hauteur
  • // Positionnement du texte
  • switch(posx){
  • case 'g': define('x', 20);
  • break;
  • case 'c': define('x', (imagex - (50 + (strlen(copyright) * taille))) / 2);
  • break;
  • case 'd': define('x', imagex - (50 + (strlen(copyright) * taille)));
  • break;
  • }
  • switch(posy){
  • case 'h': define('y', 20 + taille);
  • break;
  • case 'm': define('y', (imagey - 50) / 2);
  • break;
  • case 'b': define('y', imagey - taille);
  • break;
  • }
  • define('couleur', imagecolorallocate($image, rouge1, vert1, bleu1)); // On met une couleur en variable R,V,B
  • define('couleur2', imagecolorallocate($image, rouge2, vert2, bleu2)); // On met une couleur en variable R,V,B
  • imagettftext($image, taille, 0, x, y, couleur, police, copyright); // Ecriture du premier texte sur l'image
  • imagettftext($image, taille, 0, x + 1, y + 1, couleur2, police, copyright); // Ecriture du deuxième texte sur l'image
  • // On affiche l'image
  • if(ext === 'JPG' or ext === 'JPEG')
  • imagejpeg($image);
  • if(ext === 'PNG')
  • imagepng($image);
  • if(ext === 'GIF')
  • imagegif($image);
  • imagedestroy($image); // On détruit l'image pour vider la variable et la mémoire
  • }
  • exit();
  • }
  • $_GET = ''; // Sécuriser le script en enlevant les variables stockées dans le lien
  • ?>
  • <html>
  • <head>
  • <title>Copyright sur Image</title>
  • <link rel="stylesheet" type="text/css" href="<?php echo skin.'/style'.$s.'.css'; ?>" title="PyroFrissons" media="screen" />
  • </head>
  • <body>
  • <div id="titre">Copyright sur Image</div>
  • <?php
  • $n = "\n"; // Permet le retour à la ligne dans le code
  • $validation = 0;
  • $exist = 0;
  • define('erreur', '<div id="validation"><blink>Désolé,&nbsp;aucune&nbsp;image&nbsp;trouvé...</blink></div>'.$n);
  • define('erreur2', preg_replace('/aucune&nbsp;image/', 'aucun&nbsp;dossier', erreur));
  • define('retour', '<div id="retour"><a href="javascript:history.back()">Retour</a></div>'.$n);
  • $fich = '<div id="colone-image">'.$n.'<div id="image-titre">&nbsp;---&nbsp;Nom&nbsp;de&nbsp;l\'image&nbsp;---&nbsp;</div>'.$n.'<div id="image-fichier">'.$n;
  • $deff = '<div id="colone-deff">'.$n.'<div id="deff-titre">&nbsp;---&nbsp;etat&nbsp;---&nbsp;</div>'.$n.'<div id="deff-fichier\">'.$n;
  • echo '<div id="encadrement">'.$n;
  • if($_POST['choix'] === 'scanner'){
  • if($_POST['repertoire'] != ''){
  • define('repertoire', $_POST['repertoire']); // Répertoire scanné (point si direct -- deux points si précédents)
  • }
  • if(!file_exists(repertoire)){$exist === 'ok';}else{$dossier = openDir(repertoire);}
  • define('etat', 'Extension');
  • $deff = preg_replace('/etat/', etat, $deff);
  • while($fichier = @readDir($dossier)){
  • $ext = pathinfo($fichier, PATHINFO_EXTENSION); // Fonction de php qui renvoi l'extension d'un fichier
  • $ext = mise_majmin($ext, 'maj', 0);
  • $ext2 = mise_majmin($ext, 'maj', 1);
  • $ext3 = mise_majmin($ext, 'min', 0);
  • if(repertoire === skin){$fond = fond_fichier;}
  • if(($fichier != '.')&&($fichier != '..')&&($fichier != $fond)){
  • if($ext === 'JPG' or $ext === 'JPEG' or $ext === 'PNG' or $ext === 'GIF'){
  • if(!is_dir(repertoire.'/'.$fichier)){
  • $validation++; // Argumenter la variable afin de savoir qu'il y a une image
  • if($_POST['renommer'] === 'oui'){
  • $fichier2 = $_POST['nom'].$validation.'.'.$ext3;
  • rename(repertoire.'/'.$fichier, repertoire.'/'.$fichier2);
  • }else{
  • $fichier2 = $fichier;
  • }
  • $fich .= '<a href="'.repertoire.'/'.$fichier2.'">';
  • // Affiche les images du répertoire indiqué et les extensions
  • if($ext === 'JPEG')
  • $fich .= tronquer(substr($fichier2,0,strlen($fichier2)-5), longeur_max).'</a><br>'.$n;
  • else
  • $fich .= tronquer(substr($fichier2,0,strlen($fichier2)-4), longeur_max).'</a><br>'.$n;
  • $deff .= '<font id="on">'.$ext2.'</font><br>'.$n;
  • }
  • }
  • }
  • }
  • // Ajoute le résultat pour l'affichage à la fin
  • $affichage = $fich.'<br></div>'.$n;
  • $affichage .= $deff.'</div>'.$n;
  • $affichage .= '</div>'.$n.retour;
  • if ($validation <= 0)
  • if($exist === 'ok')
  • $affichage = erreur2;
  • else
  • $affichage = erreur;
  • $affichage .= '<br>'.retour;
  • }else if($_POST['choix'] === 'modifier'){
  • if($_POST['repertoire'] != ''){
  • define('repertoire', $_POST['repertoire']); // Répertoire scanné (point si direct -- deux points si précédents)
  • }
  • if(!file_exists(repertoire)){$exist === 'ok';}else{$dossier = openDir(repertoire);}
  • if($_POST['repertoire2'] != ''){
  • define('repertoire2', $_POST['repertoire2']); // Répertoire de sortie (point si direct -- deux points si précédents)
  • }
  • if(!file_exists(repertoire2)){mkdir(repertoire2);}
  • define('etat', 'Status');
  • $deff = preg_replace('/etat/', etat, $deff);
  • if($_POST['qualite'] >= 100){
  • define('qualite', 100);
  • }else{
  • define('qualite', round($_POST['qualite']));
  • }
  • while($fichier = @readDir($dossier)){
  • $ext = pathinfo($fichier, PATHINFO_EXTENSION); // Fonction de php qui renvoi l'extension d'un fichier
  • if($ext === 'JPG' or $ext === 'JPEG' or $ext === 'PNG' or $ext === 'GIF'){
  • $ext = mise_majmin($ext, 'min', 0);
  • if($ext === 'jpeg'){
  • $renommer = substr($fichier,0,strlen($fichier)-5);
  • }else{
  • $renommer = substr($fichier,0,strlen($fichier)-4);
  • }
  • rename(repertoire.'/'.$fichier, repertoire.'/'.$renommer.'.'.$ext);
  • $fichier = $renommer.'.'.$ext;
  • }
  • if(repertoire === skin){$fond = fond_fichier;}
  • if(($fichier != '.')&&($fichier != '..')&&($fichier != $fond)){
  • if($ext === 'jpg' or $ext === 'jpeg' or $ext === 'png' or $ext === 'gif'){
  • if(!is_dir(repertoire.'/'.$fichier)){
  • $validation++; // Argumenter la variable afin de savoir qu'il y a une image
  • $resultat = 'Modifié';
  • $resultat2 = 'Erroné';
  • if($_POST['renommer'] === 'oui'){
  • $fichier2 = $_POST['nom'].$validation.'.'.$ext;
  • }else{
  • $fichier2 = $fichier;
  • }
  • // Lecture de l'image et mise en variable
  • if($ext === 'jpg' or $ext === 'jpeg')
  • $image = imagecreatefromjpeg(repertoire.'/'.$fichier) or $resultat = $resultat2;
  • if($ext === 'png')
  • $image = imagecreatefrompng(repertoire.'/'.$fichier) or $resultat = $resultat2;
  • if($ext === 'gif')
  • $image = imagecreatefromgif(repertoire.'/'.$fichier) or $resultat = $resultat2;
  • //if($ext === 'bmp')
  • // $image = imagecreatefromwbmp(repertoire.'/'.$fichier) or $resultat = $resultat2;
  • list($imagex, $imagey) = getimagesize(repertoire.'/'.$fichier); // Détails sur l'image
  • //$imagex = imagesx($image); // Nombre de pixel en longueur
  • //$imagey = imagesy($image); // Nombre de pixel en hauteur
  • // Positionnement du texte
  • switch($_POST['posx']){
  • case 'g': $x = 20;
  • break;
  • case 'c': $x = ($imagex - (50 + (strlen($_POST['copyright']) * $_POST['taille']))) / 2;
  • break;
  • case 'd': $x = $imagex - (50 + (strlen($_POST['copyright']) * $_POST['taille']));
  • break;
  • }
  • switch($_POST['posy']){
  • case 'h': $y = 20 + $_POST['taille'];
  • break;
  • case 'm': $y = ($imagey - 50) / 2;
  • break;
  • case 'b': $y = $imagey - $_POST['taille'];
  • break;
  • }
  • $height = imagefontheight(taille); // Calcul de la taille d'une chaine (approximatif)
  • define('couleur', imagecolorallocate($image, $_POST['rouge1']*255/100, $_POST['vert1']*255/100, $_POST['bleu1']*255/100)); // On met une couleur en variable R,V,B
  • define('couleur2', imagecolorallocate($image, $_POST['rouge2']*255/100, $_POST['vert2']*255/100, $_POST['bleu2']*255/100)); // On met une couleur en variable R,V,B
  • imagettftext($image, $_POST['taille'], 0, $x, $y, couleur, 'polices/'.$_POST['police'], $_POST['copyright']); // Ecriture du premier texte sur l'image
  • imagettftext($image, $_POST['taille'], 0, $x + 1, $y + 1, couleur2, 'polices/'.$_POST['police'], $_POST['copyright']); // Ecriture du deuxième texte sur l'image
  • // On enregistre l'image (80 est le niveau de netteté)
  • if($ext === 'jpg' or $ext === 'jpeg')
  • imagejpeg($image, repertoire2.'/'.$fichier2, qualite) or $resultat = $resultat2;
  • if($ext === 'png')
  • imagepng($image, repertoire2.'/'.$fichier2, qualite) or $resultat = $resultat2;
  • if($ext === 'gif')
  • imagegif($image, repertoire2.'/'.$fichier2, qualite) or $resultat = $resultat2;
  • //if($ext === 'bmp')
  • // imagewbmp($image, repertoire2.'/'.$fichier2, $qualite) or $resultat = $resultat2;
  • if($_POST['renommer'] === 'oui'){
  • rename(repertoire2.'/'.$fichier, repertoire2.'/'.$fichier2);
  • }
  • imagedestroy($image); // On détruit l'image pour vider la variable et la mémoire
  • if($resultat === 'Modifié')
  • $resultat_couleur = 'on'; // Donner de la couleur (image modifié avec succés -> vert)
  • else
  • $resultat_couleur = 'off'; // Donner de la couleur (image raté -> rouge)
  • $fich .= '<a href="'.repertoire2.'/'.$fichier2.'">';
  • // Affiche les images du répertoire indiqué et dit si la modification a réussi
  • if($ext === 'jpeg')
  • $fich .= tronquer(substr($fichier2,0,strlen($fichier2)-5), longeur_max).'</a><br>'.$n;
  • else
  • $fich .= tronquer(substr($fichier2,0,strlen($fichier2)-4), longeur_max).'</a><br>'.$n;
  • $deff .= '<span id="'.$resultat_couleur.'">'.$resultat.'</span><br>'.$n;
  • }
  • }
  • }
  • }
  • // Ajoute le résultat pour l'affichage à la fin
  • $affichage = $fich.'<br></div>'.$n;
  • $affichage .= $deff.'</div>'.$n;
  • $affichage .= '</div>'.$n.retour;
  • if ($validation <= 0)
  • if($exist === 'ok')
  • $affichage = erreur2;
  • else
  • $affichage = erreur;
  • $affichage .= '<br>'.retour;
  • }else{
  • $option = '';
  • $ptiterreur = 'Pour&nbsp;le&nbsp;répertoire&nbsp;du&nbsp;script&nbsp;tapez&nbsp;\'.\'&nbsp;Pour&nbsp;le&nbsp;répertoire&nbsp;parent&nbsp;tapez&nbsp;\'..\'';
  • switch(posx){
  • case 'g':
  • $posx_plus[0] = ' checked';
  • break;
  • case 'c':
  • $posx_plus[1] = ' checked';
  • break;
  • case 'd':
  • $posx_plus[2] = ' checked';
  • break;
  • }
  • switch(posy){
  • case 'h':
  • $posy_plus[0] = ' checked';
  • break;
  • case 'm':
  • $posy_plus[1] = ' checked';
  • break;
  • case 'b':
  • $posy_plus[2] = ' checked';
  • break;
  • }
  • for($i = 0; $i != 11; $i++){
  • $j = ($i*10);
  • $option .= '<option value="'.$j.'">'.$j.'</option>';
  • }
  • if(file_exists('polices')){
  • $dossier = openDir('polices');
  • $polices = '<option value="police.ttf">'.nom_police.'</option>';
  • while($fichier = @readDir($dossier)){
  • $ext = pathinfo($fichier, PATHINFO_EXTENSION); // Fonction de php qui renvoi l'extension d'un fichier
  • if(($fichier != '.')&&($fichier != '..')&&($fichier != 'police.ttf')&&($ext === 'ttf' or $ext === 'TTF')){
  • $polices .= '<option value="'.$fichier.'">'.substr($fichier,0,strlen($fichier)-4).'</option>';
  • }
  • }
  • }else{
  • $ptiterreur = 'Dsl Aucune police trouvé pour le répertoire \'polices\'!';
  • }
  • $affichage = '<form name="copyright" method="post">'.$n;
  • $affichage .= '<div id="sous-titre">Choisissez&nbsp;Les&nbsp;Répertoires</div>'.$n;
  • $affichage .= '<div id="repertoire">Répertoire&nbsp;Des&nbsp;Images<span id="repertoirespan">&nbsp;</span><input type="text" name="repertoire" value="'.$repertoire.'" size=\"30\"></div>'.$n;
  • $affichage .= '<div id="repertoire2">Répertoire&nbsp;De&nbsp;Sortie<span id="repertoire2span">&nbsp;</span><input type="text" name="repertoire2" value="'.$repertoire2.'" size=\"30\"></div>'.$n;
  • $affichage .= '<div id="separation1"></div>'.$n;
  • $affichage .= '<div id="couleur1">Couleur&nbsp;Avant<span id="couleur1span">&nbsp;</span><select name="rouge1"><option value="'.rouge1.'">R'.rouge1.'</option>'.$option.'</select>'.$n;
  • $affichage .= '<select name="vert1"><option value="'.vert1.'">V'.vert1.'</option>'.$option.'</select>'.$n;
  • $affichage .= '<select name="bleu1"><option value="'.bleu1.'">B'.bleu1.'</option>'.$option.'</select></div'.$n;
  • $affichage .= '<div id="couleur2">Couleur&nbsp;Arrière<span id="couleur2span">&nbsp;</span><select name="rouge2"><option value="'.rouge2.'">R'.rouge2.'</option>'.$option.'</select>'.$n;
  • $affichage .= '<select name="vert2"><option value="'.vert2.'">V'.vert2.'</option>'.$option.'</select>'.$n;
  • $affichage .= '<select name="bleu2"><option value="'.bleu2.'">B'.bleu2.'</option>'.$option.'</select></div'.$n;
  • $affichage .= '<div id="separation2"></div>'.$n;
  • $affichage .= '<div id="position"><font id="titreposition">Positionnement</font><br><input type="radio" name="posy" value="h"'.$posy_plus[0].'>Haut<input type="radio" name="posy" value="m"'.$posy_plus[1].'>Milieu<input type="radio" name="posy" value="b"'.$posy_plus[2].'>Bas<br>'.$n;
  • $affichage .= '<input type="radio" name="posx" value="g"'.$posx_plus[0].'>Gauche<input type="radio" name="posx" value="c"'.$posx_plus[1].'>Centre<input type="radio" name="posx" value="d"'.$posx_plus[2].'>Droite</div>'.$n;
  • $affichage .= '<div id="separation3"></div>'.$n;
  • $affichage .= '<div id="taille">Taille&nbsp;Texte<span id="taillespan">&nbsp;</span><input type="text" name="taille" value="'.taille.'" size=\"10\"></div>'.$n;
  • $affichage .= '<div id="polices">Police&nbsp;Choisie<span id="policesspan">&nbsp;</span><select name="police">'.$polices.'</select></div>'.$n;
  • $affichage .= '<div id="copyright">Texte&nbsp;Copyright<span id="copyrightspan">&nbsp;</span><input type="text" name="copyright" value="'.copyright.'" size=\"30\"></div>'.$n;
  • $affichage .= '<div id="separation4"></div>'.$n;
  • $affichage .= '<div id="renommer"><input type="radio" name="renommer" value="oui">&nbsp;Renommer&nbsp;&nbsp;<input type="radio" name="renommer" value="non" checked>&nbsp;Ne&nbsp;Pas&nbsp;Renommer</div>'.$n;
  • $affichage .= '<div id="renommer"><input type="text" name="nom" value="Nom à donner aux fichiers" size=\"30\"></div>'.$n;
  • $affichage .= '<div id="separation5"></div>'.$n;
  • $affichage .= '<div id="qualite">Qualité&nbsp;Image<span id="qualitespan">&nbsp;</span><input type="text" name="qualite" value="80" size=\"10\">&nbsp;%</div>'.$n;
  • $affichage .= '<div id="choix">Scanner&nbsp;<input type="radio" name="choix" value="scanner">&nbsp;<input type="radio" name="choix" value="modifier">&nbsp;Modifier</div>'.$n;
  • $affichage .= '<div id="valider"><input type="submit" value="Valider"></div>'.$n;
  • $affichage .= '</div></form>'.$n;
  • $affichage .= '<div id="explic"><blink>'.$ptiterreur.'</blink></div>'.$n;
  • }
  • echo $affichage;
  • ?>
  • </body>
  • </html>
<?php
// ** Ne rien modifier ici
define('fond_fichier', 'fond.jpg'); // Image de fond
define('longeur_max', 20); // Longueur maximal du nom d'un fichier (pour tronquage)
define('police', 'polices/police.ttf'); // Police utilisé
define('skin', 'style'); // Emplacement du skin
$format = array(1 => 'gif', 2 => 'jpeg', 3 => 'png');
include 'config.php';

// Fonctions, elles permettent d'exécuter un code plusieurs fois pour différentes choses
function mise_majmin($chaine,$majmin,$plus){
 define('min', 'efgijnpäâàáåãéèëêòóôõöøìíîïùúûüýñçþÿæœðø');
 define('maj', 'EFGIJNPÄÂÀÁÅÃÉÈËÊÒÓÔÕÖØÌÍÎÏÙÚÛÜÝÑÇÞÝÆŒÐØ');
 $chaine = strtoupper($chaine);
 if($majmin === 'maj'){
  $chaine = strtr($chaine, min, maj);
  if($chaine === 'JPG' && $plus === 1){$chaine = 'JPEG';}
 }else if($majmin === 'min'){
  $chaine = strtr($chaine, maj, min);
  if($chaine === 'jpg' && $plus === 1){$chaine = 'jpeg';}
 }
 return $chaine;
}
function tronquer($chaine, $longeur_moy){
 if (strlen($chaine) > $longeur_moy){
  $longeur_moy = $longeur_moy / 2;
  $chaine = substr_replace($chaine, '...', $longeur_moy, - $longeur_moy);
 }
 return $chaine;
}

// Cette condition sert à afficher directement une image avec copyright (par lien)
if($_GET['choix'] === 'gen'){
 define('fichier', $_GET['image']);
 define('repertoire', $repertoire.'/');
 if(file_exists(repertoire.fichier)){
  define('ext_plus', pathinfo(fichier, PATHINFO_EXTENSION)); // Fonction de php qui renvoi l'extension d'un fichier
  define('ext', mise_majmin(ext_plus, 'maj', 0));
  list($imagex, $imagey, $type) = getimagesize(repertoire.fichier); // Détails sur l'image
  header ('Content-type: image/'.$format[$type]);
  
  // Lecture de l'image et mise en variable
  if(ext === 'JPG' or ext === 'JPEG')
   $image = imagecreatefromjpeg(repertoire.fichier);
  if(ext === 'PNG')
   $image = imagecreatefrompng(repertoire.fichier);
  if(ext === 'GIF')
   $image = imagecreatefromgif(repertoire.fichier);

  define('imagex', $imagex); // Nombre de pixel en longueur
  define('imagey', $imagey); // Nombre de pixel en hauteur

  // Positionnement du texte
  switch(posx){
   case 'g': define('x', 20);
   break;
   case 'c': define('x', (imagex - (50 + (strlen(copyright) * taille))) / 2);
   break;
   case 'd': define('x', imagex - (50 + (strlen(copyright) * taille)));
   break;
  }
  switch(posy){
   case 'h': define('y', 20 + taille);
   break;
   case 'm': define('y', (imagey - 50) / 2);
   break;
   case 'b': define('y', imagey - taille);
   break; 	
  }
  define('couleur', imagecolorallocate($image, rouge1, vert1, bleu1)); // On met une couleur en variable R,V,B
  define('couleur2', imagecolorallocate($image, rouge2, vert2, bleu2)); // On met une couleur en variable R,V,B
  imagettftext($image, taille, 0, x, y, couleur, police, copyright); // Ecriture du premier texte sur l'image
  imagettftext($image, taille, 0, x + 1, y + 1, couleur2, police, copyright); // Ecriture du deuxième texte sur l'image

  // On affiche l'image
  if(ext === 'JPG' or ext === 'JPEG')
   imagejpeg($image);
  if(ext === 'PNG')
   imagepng($image);
  if(ext === 'GIF')
   imagegif($image);

  imagedestroy($image); // On détruit l'image pour vider la variable et la mémoire
 }
 exit();
}
$_GET = ''; // Sécuriser le script en enlevant les variables stockées dans le lien
?>
<html>
 <head>
  <title>Copyright sur Image</title>
  <link rel="stylesheet" type="text/css" href="<?php echo skin.'/style'.$s.'.css'; ?>" title="PyroFrissons" media="screen" />
 </head>
 <body>
  <div id="titre">Copyright sur Image</div>
<?php
$n = "\n"; // Permet le retour à la ligne dans le code
$validation = 0;
$exist = 0;
define('erreur', '<div id="validation"><blink>Désolé,&nbsp;aucune&nbsp;image&nbsp;trouvé...</blink></div>'.$n);
define('erreur2', preg_replace('/aucune&nbsp;image/', 'aucun&nbsp;dossier', erreur));
define('retour', '<div id="retour"><a href="javascript:history.back()">Retour</a></div>'.$n);
$fich = '<div id="colone-image">'.$n.'<div id="image-titre">&nbsp;---&nbsp;Nom&nbsp;de&nbsp;l\'image&nbsp;---&nbsp;</div>'.$n.'<div id="image-fichier">'.$n;
$deff = '<div id="colone-deff">'.$n.'<div id="deff-titre">&nbsp;---&nbsp;etat&nbsp;---&nbsp;</div>'.$n.'<div id="deff-fichier\">'.$n;
echo '<div id="encadrement">'.$n;

if($_POST['choix'] === 'scanner'){
 if($_POST['repertoire'] != ''){
  define('repertoire', $_POST['repertoire']); // Répertoire scanné (point si direct -- deux points si précédents)
 }
 if(!file_exists(repertoire)){$exist === 'ok';}else{$dossier = openDir(repertoire);}
 define('etat', 'Extension');
 $deff = preg_replace('/etat/', etat, $deff);

 while($fichier = @readDir($dossier)){
  $ext = pathinfo($fichier, PATHINFO_EXTENSION); // Fonction de php qui renvoi l'extension d'un fichier
  $ext = mise_majmin($ext, 'maj', 0);
  $ext2 = mise_majmin($ext, 'maj', 1);
  $ext3 = mise_majmin($ext, 'min', 0);

  if(repertoire === skin){$fond = fond_fichier;}
  if(($fichier != '.')&&($fichier != '..')&&($fichier != $fond)){
   if($ext === 'JPG' or $ext === 'JPEG' or $ext === 'PNG' or $ext === 'GIF'){
    if(!is_dir(repertoire.'/'.$fichier)){
     $validation++; // Argumenter la variable afin de savoir qu'il y a une image
	 
	 if($_POST['renommer'] === 'oui'){
	  $fichier2 = $_POST['nom'].$validation.'.'.$ext3;
	  rename(repertoire.'/'.$fichier, repertoire.'/'.$fichier2);
	 }else{
	  $fichier2 = $fichier;
	 }

     $fich .= '<a href="'.repertoire.'/'.$fichier2.'">';

     // Affiche les images du répertoire indiqué et les extensions
     if($ext === 'JPEG')
      $fich .= tronquer(substr($fichier2,0,strlen($fichier2)-5), longeur_max).'</a><br>'.$n;
     else
      $fich .= tronquer(substr($fichier2,0,strlen($fichier2)-4), longeur_max).'</a><br>'.$n;

     $deff .= '<font id="on">'.$ext2.'</font><br>'.$n;
    }
   }
  }
 }
 // Ajoute le résultat pour l'affichage à la fin
 $affichage = $fich.'<br></div>'.$n;
 $affichage .= $deff.'</div>'.$n;
 $affichage .= '</div>'.$n.retour;

 if ($validation <= 0)
  if($exist === 'ok')
   $affichage = erreur2;
  else
   $affichage = erreur;
  $affichage .= '<br>'.retour;

}else if($_POST['choix'] === 'modifier'){
 if($_POST['repertoire'] != ''){
  define('repertoire', $_POST['repertoire']); // Répertoire scanné (point si direct -- deux points si précédents)
 }
 if(!file_exists(repertoire)){$exist === 'ok';}else{$dossier = openDir(repertoire);}
 if($_POST['repertoire2'] != ''){
  define('repertoire2', $_POST['repertoire2']); // Répertoire de sortie (point si direct -- deux points si précédents)
 }
 if(!file_exists(repertoire2)){mkdir(repertoire2);}
 define('etat', 'Status');
 $deff = preg_replace('/etat/', etat, $deff);

 if($_POST['qualite'] >= 100){
  define('qualite', 100);
 }else{
  define('qualite', round($_POST['qualite']));
 }

 while($fichier = @readDir($dossier)){
  $ext = pathinfo($fichier, PATHINFO_EXTENSION); // Fonction de php qui renvoi l'extension d'un fichier

  if($ext === 'JPG' or $ext === 'JPEG' or $ext === 'PNG' or $ext === 'GIF'){
   $ext = mise_majmin($ext, 'min', 0);
   if($ext === 'jpeg'){
    $renommer = substr($fichier,0,strlen($fichier)-5);
   }else{
    $renommer = substr($fichier,0,strlen($fichier)-4);
   }
   rename(repertoire.'/'.$fichier, repertoire.'/'.$renommer.'.'.$ext);
   $fichier = $renommer.'.'.$ext;
  }

  if(repertoire === skin){$fond = fond_fichier;}
  if(($fichier != '.')&&($fichier != '..')&&($fichier != $fond)){
   if($ext === 'jpg' or $ext === 'jpeg' or $ext === 'png' or $ext === 'gif'){
    if(!is_dir(repertoire.'/'.$fichier)){
     $validation++; // Argumenter la variable afin de savoir qu'il y a une image
     $resultat = 'Modifié';
     $resultat2 = 'Erroné';
	 
	 if($_POST['renommer'] === 'oui'){
	  $fichier2 = $_POST['nom'].$validation.'.'.$ext;
	 }else{
	  $fichier2 = $fichier;
	 }
     
     // Lecture de l'image et mise en variable
     if($ext === 'jpg' or $ext === 'jpeg')
      $image = imagecreatefromjpeg(repertoire.'/'.$fichier) or $resultat = $resultat2;
     if($ext === 'png')
      $image = imagecreatefrompng(repertoire.'/'.$fichier) or $resultat = $resultat2;
     if($ext === 'gif')
      $image = imagecreatefromgif(repertoire.'/'.$fichier) or $resultat = $resultat2;
     //if($ext === 'bmp')
     // $image = imagecreatefromwbmp(repertoire.'/'.$fichier) or $resultat = $resultat2;

	 list($imagex, $imagey) = getimagesize(repertoire.'/'.$fichier); // Détails sur l'image
     //$imagex = imagesx($image); // Nombre de pixel en longueur
     //$imagey = imagesy($image); // Nombre de pixel en hauteur

     // Positionnement du texte
     switch($_POST['posx']){
      case 'g': $x = 20;
      break;
      case 'c': $x = ($imagex - (50 + (strlen($_POST['copyright']) * $_POST['taille']))) / 2;
      break;
      case 'd': $x = $imagex - (50 + (strlen($_POST['copyright']) * $_POST['taille']));
      break;
     }
     switch($_POST['posy']){
      case 'h': $y = 20 + $_POST['taille'];
      break;
      case 'm': $y = ($imagey - 50) / 2;
      break;
      case 'b': $y = $imagey - $_POST['taille'];
      break;
     }
     $height = imagefontheight(taille); // Calcul de la taille d'une chaine (approximatif)
     define('couleur', imagecolorallocate($image, $_POST['rouge1']*255/100, $_POST['vert1']*255/100, $_POST['bleu1']*255/100)); // On met une couleur en variable R,V,B
     define('couleur2', imagecolorallocate($image, $_POST['rouge2']*255/100, $_POST['vert2']*255/100, $_POST['bleu2']*255/100)); // On met une couleur en variable R,V,B
     imagettftext($image, $_POST['taille'], 0, $x, $y, couleur, 'polices/'.$_POST['police'], $_POST['copyright']); // Ecriture du premier texte sur l'image
     imagettftext($image, $_POST['taille'], 0, $x + 1, $y + 1, couleur2, 'polices/'.$_POST['police'], $_POST['copyright']); // Ecriture du deuxième texte sur l'image

     // On enregistre l'image (80 est le niveau de netteté)
     if($ext === 'jpg' or $ext === 'jpeg')
      imagejpeg($image, repertoire2.'/'.$fichier2, qualite) or $resultat = $resultat2;
     if($ext === 'png')
      imagepng($image, repertoire2.'/'.$fichier2, qualite) or $resultat = $resultat2;
     if($ext === 'gif')
      imagegif($image, repertoire2.'/'.$fichier2, qualite) or $resultat = $resultat2;
     //if($ext === 'bmp')
     // imagewbmp($image, repertoire2.'/'.$fichier2, $qualite) or $resultat = $resultat2;

     if($_POST['renommer'] === 'oui'){
      rename(repertoire2.'/'.$fichier, repertoire2.'/'.$fichier2);
     }

     imagedestroy($image); // On détruit l'image pour vider la variable et la mémoire

     if($resultat === 'Modifié')
      $resultat_couleur = 'on'; // Donner de la couleur (image modifié avec succés -> vert)
     else
      $resultat_couleur = 'off'; // Donner de la couleur (image raté -> rouge)

     $fich .= '<a href="'.repertoire2.'/'.$fichier2.'">';

     // Affiche les images du répertoire indiqué et dit si la modification a réussi
     if($ext === 'jpeg')
      $fich .= tronquer(substr($fichier2,0,strlen($fichier2)-5), longeur_max).'</a><br>'.$n;
     else
      $fich .= tronquer(substr($fichier2,0,strlen($fichier2)-4), longeur_max).'</a><br>'.$n;

     $deff .= '<span id="'.$resultat_couleur.'">'.$resultat.'</span><br>'.$n;
    }
   }
  }
 }
 // Ajoute le résultat pour l'affichage à la fin
 $affichage = $fich.'<br></div>'.$n;
 $affichage .= $deff.'</div>'.$n;
 $affichage .= '</div>'.$n.retour;

 if ($validation <= 0)
  if($exist === 'ok')
   $affichage = erreur2;
  else
   $affichage = erreur;
  $affichage .= '<br>'.retour;

}else{
 $option = '';
 $ptiterreur = 'Pour&nbsp;le&nbsp;répertoire&nbsp;du&nbsp;script&nbsp;tapez&nbsp;\'.\'&nbsp;Pour&nbsp;le&nbsp;répertoire&nbsp;parent&nbsp;tapez&nbsp;\'..\'';
 switch(posx){
  case 'g':
   $posx_plus[0] = ' checked';
  break;
  case 'c':
   $posx_plus[1] = ' checked';
  break;
  case 'd':
   $posx_plus[2] = ' checked';
  break;
 }
 switch(posy){
  case 'h':
   $posy_plus[0] = ' checked';
  break;
  case 'm':
   $posy_plus[1] = ' checked';
  break;
  case 'b':
   $posy_plus[2] = ' checked';
  break;
 }
 for($i = 0; $i != 11; $i++){
  $j = ($i*10);
  $option .= '<option value="'.$j.'">'.$j.'</option>';
 }
 if(file_exists('polices')){
  $dossier = openDir('polices');
  $polices = '<option value="police.ttf">'.nom_police.'</option>';
  while($fichier = @readDir($dossier)){
   $ext = pathinfo($fichier, PATHINFO_EXTENSION); // Fonction de php qui renvoi l'extension d'un fichier
   if(($fichier != '.')&&($fichier != '..')&&($fichier != 'police.ttf')&&($ext === 'ttf' or $ext === 'TTF')){
    $polices .= '<option value="'.$fichier.'">'.substr($fichier,0,strlen($fichier)-4).'</option>';
   }
  }
 }else{
  $ptiterreur = 'Dsl Aucune police trouvé pour le répertoire \'polices\'!';
 }
 $affichage = '<form name="copyright" method="post">'.$n;
 $affichage .= '<div id="sous-titre">Choisissez&nbsp;Les&nbsp;Répertoires</div>'.$n;
 $affichage .= '<div id="repertoire">Répertoire&nbsp;Des&nbsp;Images<span id="repertoirespan">&nbsp;</span><input type="text" name="repertoire" value="'.$repertoire.'" size=\"30\"></div>'.$n;
 $affichage .= '<div id="repertoire2">Répertoire&nbsp;De&nbsp;Sortie<span id="repertoire2span">&nbsp;</span><input type="text" name="repertoire2" value="'.$repertoire2.'" size=\"30\"></div>'.$n;
 $affichage .= '<div id="separation1"></div>'.$n;
 $affichage .= '<div id="couleur1">Couleur&nbsp;Avant<span id="couleur1span">&nbsp;</span><select name="rouge1"><option value="'.rouge1.'">R'.rouge1.'</option>'.$option.'</select>'.$n;
 $affichage .= '<select name="vert1"><option value="'.vert1.'">V'.vert1.'</option>'.$option.'</select>'.$n;
 $affichage .= '<select name="bleu1"><option value="'.bleu1.'">B'.bleu1.'</option>'.$option.'</select></div'.$n;
 $affichage .= '<div id="couleur2">Couleur&nbsp;Arrière<span id="couleur2span">&nbsp;</span><select name="rouge2"><option value="'.rouge2.'">R'.rouge2.'</option>'.$option.'</select>'.$n;
 $affichage .= '<select name="vert2"><option value="'.vert2.'">V'.vert2.'</option>'.$option.'</select>'.$n;
 $affichage .= '<select name="bleu2"><option value="'.bleu2.'">B'.bleu2.'</option>'.$option.'</select></div'.$n;
 $affichage .= '<div id="separation2"></div>'.$n;
 $affichage .= '<div id="position"><font id="titreposition">Positionnement</font><br><input type="radio" name="posy" value="h"'.$posy_plus[0].'>Haut<input type="radio" name="posy" value="m"'.$posy_plus[1].'>Milieu<input type="radio" name="posy" value="b"'.$posy_plus[2].'>Bas<br>'.$n;
 $affichage .= '<input type="radio" name="posx" value="g"'.$posx_plus[0].'>Gauche<input type="radio" name="posx" value="c"'.$posx_plus[1].'>Centre<input type="radio" name="posx" value="d"'.$posx_plus[2].'>Droite</div>'.$n;
 $affichage .= '<div id="separation3"></div>'.$n;
 $affichage .= '<div id="taille">Taille&nbsp;Texte<span id="taillespan">&nbsp;</span><input type="text" name="taille" value="'.taille.'" size=\"10\"></div>'.$n;
 $affichage .= '<div id="polices">Police&nbsp;Choisie<span id="policesspan">&nbsp;</span><select name="police">'.$polices.'</select></div>'.$n;
 $affichage .= '<div id="copyright">Texte&nbsp;Copyright<span id="copyrightspan">&nbsp;</span><input type="text" name="copyright" value="'.copyright.'" size=\"30\"></div>'.$n;
 $affichage .= '<div id="separation4"></div>'.$n;
 $affichage .= '<div id="renommer"><input type="radio" name="renommer" value="oui">&nbsp;Renommer&nbsp;&nbsp;<input type="radio" name="renommer" value="non" checked>&nbsp;Ne&nbsp;Pas&nbsp;Renommer</div>'.$n;
 $affichage .= '<div id="renommer"><input type="text" name="nom" value="Nom à donner aux fichiers" size=\"30\"></div>'.$n;
 $affichage .= '<div id="separation5"></div>'.$n;
 $affichage .= '<div id="qualite">Qualité&nbsp;Image<span id="qualitespan">&nbsp;</span><input type="text" name="qualite" value="80" size=\"10\">&nbsp;%</div>'.$n;
 $affichage .= '<div id="choix">Scanner&nbsp;<input type="radio" name="choix" value="scanner">&nbsp;<input type="radio" name="choix" value="modifier">&nbsp;Modifier</div>'.$n;
 $affichage .= '<div id="valider"><input type="submit" value="Valider"></div>'.$n;
 $affichage .= '</div></form>'.$n;
 $affichage .= '<div id="explic"><blink>'.$ptiterreur.'</blink></div>'.$n;
}
echo $affichage;
?>
 </body>
</html>

Conclusion

Merci à ApaS pour sa fonction de mise en majuscule (pour les extensions) --> je trouve sa mieu :D
 

Fichier Zip

Pour les "Membres Club", vous pouvez télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !
  •   polices
    • Baby Kruffy.ttfTélécharger ce fichier [Réservé aux membres club]57 820 octets
    • Bat Font.ttfTélécharger ce fichier [Réservé aux membres club]42 204 octets
    • Judas.ttfTélécharger ce fichier [Réservé aux membres club]36 296 octets
    • Kristen.ttfTélécharger ce fichier [Réservé aux membres club]59 712 octets
    • Linkin Park.ttfTélécharger ce fichier [Réservé aux membres club]19 200 octets
    • Omikron.ttfTélécharger ce fichier [Réservé aux membres club]31 832 octets
    • police.ttfTélécharger ce fichier [Réservé aux membres club]40 836 octets
    • Smash.ttfTélécharger ce fichier [Réservé aux membres club]52 232 octets
  •   style
  • aide.txtTélécharger ce fichier [Réservé aux membres club]Voir ce fichier1 239 octets
  • config.phpTélécharger ce fichier [Réservé aux membres club]Voir ce fichier869 octets
  • index.phpTélécharger ce fichier [Réservé aux membres club]Voir ce fichier16 523 octets

Télécharger le zip

Historique

09 octobre 2006 19:37:10 :
quelques rajout vite fait!
11 octobre 2006 20:36:13 :
J'ai retravaillé le code
11 octobre 2006 22:57:40 :
Rapide modification du css
12 octobre 2006 06:33:45 :
Erreur corrigé grâce à votre aide ;)
12 octobre 2006 22:39:44 :
Rajout de quelques bases
13 octobre 2006 22:24:58 :
Rajout de l'affichage direct
13 octobre 2006 22:30:43 :
Déplacement du exit()
15 octobre 2006 13:11:49 :
Correctif :: Extension avec majuscules (compatible)
16 octobre 2006 06:52:20 :
Mettez le skin 2 que j'ai largement amélioré! Le script de renommage ne fonctionne pas... ENCORE
17 octobre 2006 22:03:27 :
Beaucoup de modifications apportées, choix de polices mises dans un répertoire, etc...
17 octobre 2006 22:38:26 :
Problème de positionnement du texte par rapport à sa taille réglé...
18 octobre 2006 17:57:39 :
Les === sont mis et tout fonctionne sauf l'affichage direct biensur...
18 octobre 2006 21:16:36 :
Renommage ajouté mais ne fonctionne pas (fonction de moi)...
20 octobre 2006 07:00:31 :
Quelques constantes, tout les paramètre y sont sauf le renommage qui ne fonctionne pas pour le moment...
20 octobre 2006 18:15:20 :
Petite erreur de fonction corrigé!
21 octobre 2006 08:00:34 :
Fonction de renommage corrigé!
21 octobre 2006 12:52:54 :
Rajout de constantes et petites modification, quelqu'un pourrait-il m'aider pouir l'histoire de la première condition qui sert à créer le copyright grace aux variables du lien!
21 octobre 2006 13:00:32 :
Supprimer le fichier 'rename.php' que ne sert plus à rien maintenant!
22 octobre 2006 18:32:55 :
Petit changement (getimagesize) --> fonctionnement plus rapide ;)

Commentaires et avis

signaler à un administrateur
Commentaire de alvinp le 09/10/2006 06:44:39

Encore une chose, vous pouvez changer la police en remplacent tout simplement 'police.ttf' par la police de votre choix!

signaler à un administrateur
Commentaire de webdeb le 09/10/2006 12:14:17

Salut !

Plusieurs remarques pour améliorer ton code :

- Utilises plutôt des constantes à la place des variables situées en entête de ton fichier
- Pour récupérer une extension, préfère la fonction native de php pathinfo() avec l'option pathinfo_extension
- Mets ton code html entre apostrophes plutôt que des guillemets afin de faciliter la relecture de ton code.
- Pour les tests d'égalité, préfère aussi === à ==
- Pour les extensions valides (gif, png, jpg), fais plutôt un tableau plutôt qu'une batterie de conditions dans le même if()

Voilà !

++

;)

signaler à un administrateur
Commentaire de jean84 le 09/10/2006 15:58:16

Salut !

Je ne suis pas d'accord avec quelques conseils cites plus haut (c'est pas contre toi Webdeb, loin de la) :
- pour les extensions, il est conseille d'utiliser les fonctions str. Par contre l'utilisation que tu en fait n'est pas bonne (ou du moins n'est pas parfaite)
=> $Extension = substr($strrev($Chaine), 0, strpos('.', $Chaine));

- "Mets ton code html entre apostrophes plutôt que des guillemets afin de faciliter la relecture de ton code."
La relecture je crois pas mais la vitesse d'execution de ton script, sa c'est clair.

- "Pour les tests d'égalité, préfère aussi === à =="
Seulement si la variable est suceptible de contenir differents types de donnees (INT, CHAR ou NULL par exemple). Si ce n'est pas le cas, cela ne sert a rien (meme si ce n'est pas grave evidement)

Pour tes tests d'extension, prefere l'utilisation d'un esleif() ou au pire d'un switch() (plus lent) que des if() les uns a la suite des autres. Tu gagneras en rapidite car il ne s'embettera pas a tester les autres possibiltes quand il aura deja un resultat (alors que la, si l'extension est JPG, tu te tapes quand meme les verifs pour savoir si c'est un gif ou un png, alors que tu sais que c'est un JPG)

Voila sinon pas trop mal, a part que ta source est pour les debutants et que tu n'as mis quasiment aucun commentaire "utile". Pas mal de personnes cherchent ce genre de source pour apprendre a utiliser GD mais la, avec cette source, sa risque d'etre difficile si tu ne corrige pas ^^

@++

signaler à un administrateur
Commentaire de alvinp le 09/10/2006 19:03:46

Merci de m'avoir donner tout ces conseilles!
Je vais essayer de faire de mon mieu pour les appliquer, et je republie dés que c'est bon ;)

signaler à un administrateur
Commentaire de alvinp le 09/10/2006 19:14:06

Pour le code html, je fais des mise à la ligne à chaque fois pour la mise en page du code...
Et seul les guillemets permettent ceci, enfin je crois!

signaler à un administrateur
Commentaire de Flachy Joe le 09/10/2006 19:14:58

A propos de relecture aussi, pourquoi ne pas remplacer la gros bloc d'"echo" par une fermeture de php "?>" puis une réouverture à la fin "<?php" ? Je crois même que la rapidité du code change...

signaler à un administrateur
Commentaire de alvinp le 09/10/2006 19:38:14

Ok je ferai celà ;)

signaler à un administrateur
Commentaire de webdeb le 09/10/2006 19:59:31

@Jean84 :

>> pour les extensions, il est conseille d'utiliser les fonctions str. Par contre l'utilisation que tu en fait n'est pas bonne (ou du moins n'est pas parfaite)

Pourquoi utiliser les fonctions de chaîne de caractères alors que tu peux le faire avec une fonction native ? Tu veux réinventer la roue ?

>> La relecture je crois pas mais la vitesse d'execution de ton script, sa c'est clair.

Ne me dis pas que pour toi une floppée d'antislashes c'est lisible !!! C'est super lourd à relire un code avec des échappements en tout genre. Pour ce qui est des performances, je suis d'accord que les mettres entre quotes simples c'est plus rapide mais ça se joue sur un chouilla de microsecondes et encore ce n'est pas vrai pour tous les scripts. Ca l'est surtout sur des grosses applications.

>> Seulement si la variable est suceptible de contenir differents types de donnees (INT, CHAR ou NULL par exemple). Si ce n'est pas le cas, cela ne sert a rien (meme si ce n'est pas grave evidement)

Mieux vaut les mettre que pas du tout ! Ca évite tout risque de faille de sécurité :)

@Flachy Joe :

>> A propos de relecture aussi, pourquoi ne pas remplacer la gros bloc d'"echo" par une fermeture de php "?>" puis une réouverture à la fin "<?php" ? Je crois même que la rapidité du code change...

C'est faisable mais en terme de programmation c'est déconseillé. Tu ne respectes pas trop la logique de séparer le programme php de l'interface html. Quand tu as plusieurs centaines de codes html dans un bloc <?php {?> <?php } ?> ça devient vite le bordel à relire. A la place de faire celà, il est plutôt conseiller d'utiliser des fonctions ou de faire des importations (include) de fichiers.

Pour en revenir à la source de Alvinp, ton code html est vraiment crade ! (excuse moi le terme). Mets toi au goût du jour en codant en html 4.01 ou xhtml valide. Les tableaux ne sont pas faits pour de la mise en page mais pour présenter des données tabulaires comme des stats par exemple.

++

signaler à un administrateur
Commentaire de jean84 le 09/10/2006 22:50:16

Webdeb >
"Pour ce qui est des performances, je suis d'accord que les mettres entre quotes simples c'est plus rapide mais ça se joue sur un chouilla de microsecondes et encore ce n'est pas vrai pour tous les scripts. Ca l'est surtout sur des grosses applications."
- Non. Mettre des ' a la place " et plus rapide, quoi qu'on en dise. Et meme si sa ne se sent que sur de grosses applis, mieux vaut apprendre correctement et s'impsoer de bonnes regles avant d'etre au pied du mur. En plus c'est le B-ABA en php. Tape benchmark php sous google et constate le resultat, je l'ai pas invente pour l'occasion

"Pourquoi utiliser les fonctions de chaîne de caractères alors que tu peux le faire avec une fonction native ? Tu veux réinventer la roue ?"
- Demande a Rasmus Lederdof, c'est dans une video conference lors des dev-days qu'il preconaisait cela. Je ne fait que l'ecouter (sa reste Mr Papa du PHP donc...). Je suis d'accord que c'ets mieux en terme de code et plus compacte d'utilser des focntions natives mais ce n'est pas parce qu'elles sont  natives qu'elles sont plus rapides, surtout que pathinfo() renvoi un tableau qu'il faut encore traiter derriere (ce qui n'est vraiment pas lourd mais necessite quand meme un certains travail)

"Mieux vaut les mettre que pas du tout ! Ca évite tout risque de faille de sécurité :)"
- Des failles de securite ?? Wahou... moi qui suis parano comme pas deux et verifie la moindre variable dans mes formulaires, je savais pas que comparer deux variables avec des == au lieu de === engendre des failles de securite.... Faudra me donner un lien pour le confirmer parce que sa me parait gros, voir meme enorme !

"Les tableaux ne sont pas faits pour de la mise en page mais pour présenter des données tabulaires comme des stats par exemple."
- C'est vrai que j'ai lu wue le w3c deconseille l'utilisation des tableaux pour la mise en page car cela consommait beaucoup de ressource du cote du client (les navigateurs ont semblent-ils beaucoup de mal avec sa). M'enfin sa reste un deconseil car ils sont bien au courant que tout le monde le fait, et que sa depanne grave... un petit tableau pour centrer tout un site, sa fait pas de mal ;-)

"...codant en html 4.01 ..."
4.01 ?? lol. C'est quoi la mise a jour ? ^^

Flachy Joe > C'est ultra ultra ultra moche de voir sa dans un script ! Certains pousent le vice a le faire dans une boucle :

while ( ... )
{
?>
// code html
<?php
}

Meme si sa "peut" donner une acceleration dans le code, c'est vraiment trop moche de faire et tu martirises ton pauvre interpreteur PHP. Prends en soin, sa peut toujours servir ;-)

signaler à un administrateur
Commentaire de Flachy Joe le 10/10/2006 08:32:26

En quoi c'est moche ? Et pourquoi ça "martiriserait" l'interpreteur ? Il ne fait que sauter ce code en l'envoyant en bloc au client. Je trouve plutôt débile de lui envoyer des données qui n'ont pas besoin d'être traitées.
En plus ça permet d'avoir la coloration syntaxique du code HTML. En indentant corectement, il n'y a aucun souci de relecture.
Et faire plein de fichiers à inclure de quelques lignes renderait "moche" la structure du site, il y en aurait un gros tas dans un dossier ?

signaler à un administrateur
Commentaire de webdeb le 10/10/2006 10:18:18

@Jean84

>> Non. Mettre des ' a la place " et plus rapide, quoi qu'on en dise. Et meme si sa ne se sent que sur de grosses applis, mieux vaut apprendre correctement et s'impsoer de bonnes regles avant d'etre au pied du mur. En plus c'est le B-ABA en php. Tape benchmark php sous google et constate le resultat, je l'ai pas invente pour l'occasion

Je travaille de toute façon de cette manière. Je mets toujours mes chaînes statiques entre apostrophes et mes chaînes dynamiques entre guillements. Je concatène aussi mes instructions echo() avec des virgules pour améliorer les performances. Les tests de benchmarks que l'on voit sur Internet ne montrent pas toujours la réalité. La vitesse d'exécution d'un script dépend de beaucoup de paramètres. En règle générale, lorsque tu fais un script, tu n'affiches pas 1000 fois ou 10 000 fois la chaîne 'Hello World' par exemple. Les benchmarks restent des calculs et de la théorie et de l'expérimentation pour la plupart. Ils démontrent des choses dans un cas de figure donné. Lorsque tu conçois une application, c'est sur elle qu'il faut faire des benchmarks pour tester ses performances. Certes je suis d'accord qu'il faille se baser sur des tests plus ou moins théoriques mais il ne faut pas en faire une généralité. Par exemple, programmer en orienté objet ou en procédural n'aura pas les mêmes impacts sur le temps d'exécution du code.

>> Demande a Rasmus Lederdof, c'est dans une video conference lors des dev-days qu'il preconaisait cela. Je ne fait que l'ecouter (sa reste Mr Papa du PHP donc...).

Faudrait que je vois ça, tu m'intéresses en disant ça !

>> surtout que pathinfo() renvoi un tableau qu'il faut encore traiter derriere (ce qui n'est vraiment pas lourd mais necessite quand meme un certains travail)

Faux ! Retourne lire la doc de pathinfo(). Pathinfo() retourne un tableau si tu ne lui précises pas de paramètres optionnels. Si tu fais :

<?php
  $extension = pathinfo('index.html', PATHINFO_EXTENSION); // retourne html
?>

Il te retourne une chaîne de caractères qui est l'extension du fichier.

>> formulaires, je savais pas que comparer deux variables avec des == au lieu de === engendre des failles de securite....

Si le triple égal a été inventé, ce n'est pas pour rien. Logiquement si tu fais :

<?php

$a = '1';
$b = 1;

if( $a == $b ) {
  echo 'Vrai !';
}
else
{
  echo 'Faux !';
}
?>

Dans ce script (que je n'ai pas testé), le résultat retourné devrait être 'Vrai !' puisque les deux valeurs sont les mêmes mais pas les types de variables. Il y'a donc une sacrée différence. Je n'ai pas vérifier pour les failles mais je pense que sur certaines applications, si tu ne vérifies pas en plus le type tu risques d'avoir des failles. Je pensais ça lorsque un visiteurs avait la possibilité d'entrer des données à tester. En plus, selon les benchmarks (à prendre à la légère je le rapelle), le triple égal se trouve plus rapide lors de son exécution plutôt que le double égal du fait qu'il s'intéresse tout de suite à un type précis.

>> M'enfin sa reste un deconseil car ils sont bien au courant que tout le monde le fait, et que sa depanne grave... un petit tableau pour centrer tout un site, sa fait pas de mal ;-)

Non pas tout le monde ! Pas moi :) De plus en plus de personnes se mettent à la programmation html en suivant les standards et les recommandations du W3C. Il y'a plusieurs raisons à ne pas utiliser les tableaux pour présenter un document web entier :

   1/ La sémantique : elle indique qu'un tableau ne doit recevoir que des données tabulaires à présenter. En aucun cas il ne devrait permettre de construire une charte graphique. Il existe des balises faites pour ça (entre autres les <div>). Comme pour les titres, des balises ont été prévues pour ça : h1, h2, h3... Les balises servent à donner un sens au contenu du document html, donc il faut respecter cette première règle.

   2/ L'accessibilité : pour des personnes ayant des déficiences visuelles et notamment celles qui utilisent un navigateur spécial (braille par exemple), la mise en page tableau est un réel problème. En effet, le contenu ne se trouve plus dans un ordre correct de lecture. Il se retrouve dispatché un peu partout dans la page ce qui oblige le visiteur "handicapé" à faire des efforts de lecture à travers le document et des efforts mobiles avec sa souris. Pour des personnes paralysées ou ayant peu de motricité, cela leur demande un effort considérable alors que pour nous, bouger une souris ce n'est rien.

   3/ Le poids de la page : il est fortement réduit lorsque tu codes proprement un document sans mise en page tableaux. Pour la même page codée des deux manière, tu peux avoir plus de 30% de gain de poids. Ce n'est pas négligeable même si le haut débit commence à s'installer un peu de partout dans le monde. Il existe toujours énormément de "contrées" reculées en France et les pays en voie de développement ne disposent pas encore de lignes suffisament puissante pour afficher des grosses pages.

   4/ La portabilité : en codant sans mise en page tableaux (et en séparant fond et forme avec les css), tu peux permettre à ton site d'être visible sur différentes plateformes telles que : écran de pc, PDA, Téléphones portables via le WAP, impression papier... C'est un sacré atout quand même.

   5/ La maintenance : c'est quand même plus facile de relire et de se repérer dans un code propre qui dispose de moins de code. Plus besoin de trop chercher où placer son contenu comme avant quand il fallait remonter les arborescences d'imbrication de tableaux.

Cette liste n'est pas exhaustive mais il y'a beaucoup de bons côtés à programmer ses sites sans mise en page tableaux. Le seul point négatif reste la différence d'affichage entre les navigateurs (notamment IE) mais elle est minime et tend à s'améliorer avec IE7 et les standards du W3C.

@Flachy-Joe

Oui c'est joli et ça respecte l'indentation mais tu ne respectes pas la logique de séparation du code PHP du code HTML. De plus, ce n'est pas du tout optimisé pour ton interprêteur PHP. Dans ce sens, PHP manque de rigueur puisqu'il est trop laxiste sur la façon de coder et de mettre en forme le code HTML.

signaler à un administrateur
Commentaire de jean84 le 10/10/2006 17:13:41

Arf ! Sa fait plaisir comme reponse ;-)
Globalement pour le pathinfo(), je connaissais pas l'astuce, merci donc.
Pour les benchmarks, il est evident que ce sont des scripts tailles pour la compete qui font des miliers de boucle. Il n'empeche que, quoi qu'on en dise, lorsque tu travaille en production (je sais pas si tu l'as deja fait), on peut atteindre des fois certaines valeurs de benchmark. D'ou donc l'idee d'apprendre a coder proprement, mais sur ce point, encore une fois nous sommes d'accord :-)
Pour les tableaux, j'avoue pour ma part que tu m'a franchement convaincu, faudra juste que je trouve un modele de remplacement (ou du moins limiter la taille et l'utilsiation des tableaux dans un premier temps, un peu comme quand on veuit arreter de fumer en douceur ....)
Pour les ===, autant je suis d'accord que l'execution est plus rapide, autant que des failles puissent se cree, j'en doute fortement. C'est un peu comme le monstre du lokness, tout le monde en parle, personne ne l'a vut... ^^

@++

signaler à un administrateur
Commentaire de alvinp le 10/10/2006 17:32:51

Vous livrez une bataille sur le php, lol
Je n'en connais pas autant que vous, mais je serai utiliser les bon conseils.

Et en parlant du html v4.... je garde ma façon de faire, car si plusieurs languages existent c'est par rapport au niveau et la compréhension du navigateur soit au niveau serveur, soit au niveau client!!
Je trouve que ce que j'utilise est parfaitement bien dés que celà marche à la fois sur Firefox et IternetExplorer...

Merci beaucoup!

signaler à un administrateur
Commentaire de webdeb le 10/10/2006 19:21:24

@Jean84

>> Pour les ===, autant je suis d'accord que l'execution est plus rapide, autant que des failles puissent se cree, j'en doute fortement. C'est un peu comme le monstre du lokness, tout le monde en parle, personne ne l'a vut... ^^

Il faudrait approfondir le sujet. Je n'ai pas cherché de mon côté mais je suis sûr que ça peut régler des failles de sécurité. Je ne m'avance pas plus. Peut-être ai-je tord !

Pour les tableaux c'est clair que je ne peux que te convaincre. Quand on voit le nombre d'arguments que l'on peut avancer à ce sujet. Au début j'étais comme toi ! Réticent à l'idée de me séparer des tableaux mais quand j'ai vu ce que l'on pouvait faire sans et en mieux, je n'ai pas hésité à franchir le pas.

@Alvinp

>> Et en parlant du html v4.... je garde ma façon de faire, car si plusieurs languages existent c'est par rapport au niveau et la compréhension du navigateur soit au niveau serveur, soit au niveau client!!

Il n'y a rien côté serveur !!! HTML est un langage statique qui n'est interprêté que par ton navigateur. Donc IE, Firefox, Opera, AvantBrowser... L'affichage ne dépendra que de ces logiciels mais en aucun du serveur. C'est d'ailleurs pour cela que tu peux tester tes pages web en local sur ton navigateur alors que pour PHP il faut un serveur intégrant un interprêteur PHP pour exécuter le code.

Que tu codes en html 4 ou bien en xhtml 1.0 ou xhtml 1.1 c'est pareil. Tu fais du code html. Les balises sont les mêmes à peu de choses près puisque certaines balises comme font, b, i ne sont plus vraiment tolérées. On dit qu'elles sont devenues obsolètes. La seule chose qui change c'est le fait de coder proprement. C'est à dire en respectant certaines règles de syntaxe et de logique que voici :

- Toutes tes balises en minuscules
- Toutes balises ouvertes doit être fermées même les monobalises comme <img> qui devient <img/>
- L'imbrication des balises doit être respectée. Par exemple : <strong><em>blabla</strong></em> n'est plus toléré
- Respect de l'imbrication des balises de blocs (h1,h2..., div, p, blockquote) entre elles et des balises en ligne (inline comme span, strong, em...) aussi
- Ne plus utiliser de mise en page tableaux
- La sémantique des balises doit être utilisée au mieux
- Les règles d'accessibilité sont aussi importantes. Il faut donc penser à les mettre en avant

Pour la syntaxe, le html4 ou le xhtml se base sur la rigueur de la syntaxe xml.

>> Je trouve que ce que j'utilise est parfaitement bien dés que celà marche à la fois sur Firefox et IternetExplorer...

Pour ce qui de l'affichage entre navigateurs, si tu codes correctement tu devrais avoir le même affichage (ou à peu de choses près. Ex: décalage d'une bordure de 1px).

Pour plus d'informations sur la programmation en html4 ou xhtml je vous conseille ces deux sites :

- http://www.alsacreations.com
- http://www.openweb.eu.org

++

Hugo.

signaler à un administrateur
Commentaire de webdeb le 10/10/2006 19:49:57

Jean84, j'ai oublié aussi un argument sympa concernant le couple html/css ou xhtml/css. Le voici :

En construisant un squelette (x)html épuré de toute mise en forme, cela te permet de pouvoir skinner à ta guise ton site et de lui faire plusieurs design par exemple. On dit que l'on séparer le fond de la forme. Le fond dans une page web correspond au contenu (titres, menus, paragraphes, liens, listes...) et la forme correspond aux différents à comment ton contenu est présenté (gras, italique, souligné, couleur, background, bordures...). En séparant ton code html brut dans un document html et ta mise en forme dans une feuille de styles, cela te permet d'avoir un contenu entièrement accessible et lisible sans mise en forme. Dans la feuille de styles externe tu stockent toutes les instructions qui mettent ta page en forme. C'est à dire le placement des blocs entre eux, les couleurs de tes textes, l'affichage de tes menus... En faisant plusieurs feuilles de styles, tu peux faire plusieurs design sans rien toucher au code html brut.

Avec les tableaux tout cela est impossible. Une fois que tu as placé du texte dans une cellule du tableau, celui ci restera dedans et tu ne pourras plus le placer ailleurs comme tu veux.

Compare un site en mise en page avec tableaux avec celui ci par exemple : http://www.epersy-avenir.com
J'ai réalisé ce site pour un client. Il est valide XHTML / CSS et WAI. Si tu regardes le code source tu t'apercevras qu'il n'y a aucun tableau pour mettre le design et le texte en forme. Tout se trouve dans une feuille de styles externe. Si tu désactives les styles CSS avec l'extension webdevelopper de Firefox par exemple (si tu l'as installée bien sûr) ou bien en enregistrant le code source sur ton disque dur mais en ayant supprimé la balise <link> qui importe le fichier CSS, tu verras que le contenu n'a aucune mise en forme et est complètement accessible en suivant l'ordre dans lequel il apparaît dans le code source.

Je te laisse regarder pour te convaincre et me donner tes commentaires ;)

++

signaler à un administrateur
Commentaire de alvinp le 11/10/2006 08:33:44

Ha oui, je vois!!
Efectivement c'est plus lisible, je vais me perfectionner la dedans alors.
Mais pour les balises <img> je ne savais pas qu'il falait les fermer, sur aucune source elles y sont les balises de fermeture </img>.
Mais si c'est le bon codage, alors je le ferai. Parcontre, a quoi sert l'intervale qu'il y a entre l'ouverture et la fermeture??

Et encore merci, tu m'apprend des trucs :D

signaler à un administrateur
Commentaire de webdeb le 11/10/2006 09:23:07

>> Mais pour les balises <img> je ne savais pas qu'il falait les fermer, sur aucune source elles y sont les balises de fermeture </img>.

L'espace ne sert à rien. Certains programmeurs préfèrent ne pas le mettre, d'autres le font comme moi. Je trouve ça plus clair à relire. Cet espace est complètement facultatif.

>> Et encore merci, tu m'apprend des trucs :D

Bah de rien ;) C'est comme ça que l'on apprend !

signaler à un administrateur
Commentaire de alvinp le 11/10/2006 09:35:16

Oh, j'ai oublié une question très importante!!

Peut-on faire des include ou comme des includes plutôt mais à l'intérieur de la page php (pour repporter du code)?

signaler à un administrateur
Commentaire de webdeb le 11/10/2006 11:30:28

>> Peut-on faire des include ou comme des includes plutôt mais à l'intérieur de la page php (pour repporter du code)?

Qu'est ce que tu entends concrètement par là ?

signaler à un administrateur
Commentaire de alvinp le 11/10/2006 14:01:12

Enfait rapporter un bout de code tapé au début, pour ne pas avoir à le reécrire!

Sinon j'arrive pas trop à faire comme les tableau en css, sa minerve :D

Tu veux voir? --> http://172.185.124.49/yo/
Je l'ai fait que sur scanné je crois,
Avec internet explorer sa ne donne pas pareil qu'avec firefox...

signaler à un administrateur
Commentaire de alvinp le 11/10/2006 14:02:49

Oh encore un truc :D
C'est directement mon pc, et si il te domande à te logguer ::
login test
mdp test

signaler à un administrateur
Commentaire de webdeb le 11/10/2006 15:59:41

>> Enfait rapporter un bout de code tapé au début, pour ne pas avoir à le reécrire!

Oui ! Tu mets ce code dans un fichier séparé et tu l'inclus quand tu en as besoin.

signaler à un administrateur
Commentaire de jean84 le 11/10/2006 16:08:02

include() include_once() require() require_once() pour inclure des scripts php (ou des bouts de code).

signaler à un administrateur
Commentaire de alvinp le 11/10/2006 16:13:33

l'inclusion externe je connais, mais je me demandais si celà existé en interne (dans le fichier lui même)...

Je revois la source mais lentement :D

signaler à un administrateur
Commentaire de jean84 le 11/10/2006 16:25:20

Pas mal le site : http://www.epersy-avenir.com
Ce qui me chagrine c'est que le site pour un client respecte sa alors que ton propre site http://www.webmaster-debutant.net/ en comporte une floppee. Apparement vous y etiez plusieurs a travaille dessus car la facon d'ecire les balises n'est meme pas la meme. Un coup y a des majuscules un coup des minuscules... ou alors le site est ancien et tu preferes garder le design ? En tout cas,  vu le design de ce site, je prefere garder mes tableaux ... ^^ C'est vachement bô !

signaler à un administrateur
Commentaire de jean84 le 11/10/2006 16:31:14

"l'inclusion externe je connais, mais je me demandais si celà existé en interne (dans le fichier lui même)"

Y a une soluce, pas super propre mais peut toujorus servir : eval()
Tu mets le code que tu veut utiliser a repetition dans une variable et tu la passe en parametre a eval(). Y a aussi create_function qui permet de .. creer une fonction !! lol

Voila les liens :
http://www.php.net/manual/fr/function.create-function.php
http://www.php.net/manual/fr/function.eval.php

A toi de juger celui qui conviendra le mieux pour ton utilisation

@+

signaler à un administrateur
Commentaire de alvinp le 11/10/2006 17:08:33

Ok merci, et j'ai toujours des problèmes au niveau des alignements mais je me débrouille!
Dés que c'est bon je le republie mais je pense que sa attendra ce week car j'avance lentement :D

signaler à un administrateur
Commentaire de jean84 le 11/10/2006 17:25:16

Prends ton temps, y a pas le feu ! Des fois y a des sources qui sont mis a jour un an apres leur sorties ! Donc pas de probleme ...

signaler à un administrateur
Commentaire de alvinp le 11/10/2006 19:07:08

Lol a oui quand même, mais apparement j'avance assé vite...
Je crois que ce soir sa sera refait mais y aura toujours quelque chose à modifier!

Je compte sur vous :D

signaler à un administrateur
Commentaire de webdeb le 11/10/2006 19:28:08

@Jean84

Merci pour Epersy-Avenir ;) Pour ce qui est de Webmaster-Debutant, je l'ai développé à l'époque quand ... j'étais débutant lol. Cela fait déjà plus de 4 ans que ce site existe. Je suis actuellement entrain de le refondre complèetement (nouveau design, codage xhtml / css, tutoriels réecrits proprement...). Le but sera d'en faire un site de référence dans le domaine du webmastering en proposant un contenu sérieux et du code propre dans les tutoriels. Donc pas de panique, la nouvelle version est prévue (je l'espère) avant la fin de l'année. Peut-être comme cadeau de Noël qui sait ^^

++

signaler à un administrateur
Commentaire de alvinp le 11/10/2006 20:29:18

J'ai un gros problème :D

J'ai fait des modifications de partout mais pas à l'endroit où je vois apparaitre un truc que je n'ai jamais vue!

C'est du côté des imagettftext(), il me note sur la page :: Resource id #10

Sa fait depuis un moment que je cogite...

signaler à un administrateur
Commentaire de webdeb le 11/10/2006 20:57:45

Es-tu allé voir la doc officielle de la fonction à l'adresse http://www.php.net/imagettftext ?

signaler à un administrateur
Commentaire de alvinp le 11/10/2006 21:41:21

Je vois de regarder de suite, mais je n'ai pas trouvé en regardant vite fait et en fesant une recherche aussi!
Mais j'ai rien trouvé...

signaler à un administrateur
Commentaire de alvinp le 11/10/2006 22:54:54

J'ai pas trouvé, sa créer les images comme si de rien était mais il n'affiche pas tout ce que je souhaite!

Et je n'arrive pas à savoir exactement d'où sa peut venir...

Enfin, je regarderai vos messages demain et Merci ;)

signaler à un administrateur
Commentaire de GRenard le 12/10/2006 05:32:27

tu dois faire un echo d'une ressource (image , genre echo $im) pour avoir un Resource id

</img> n'existe pas, il faut fermer les balises directement />

Si tu utilises eval, tu peux être quasiment certain que le monde va bondir et dire "OMG ce n'est pas bien"... Fait attention à ce genre de fonction. Je dirais que eval est utilisé vraiment que pour de la production interne ou tout est contrôlé... et non une source disponible sur le web. C'est extrêmement dangereux.

signaler à un administrateur
Commentaire de GRenard le 12/10/2006 05:33:53

tiens, elle est la ton Resource id :
$affichage = $image."<br></div>\n";
tu affiche la ressource.
Les br se ferme aussi, mais j'ai pas tout lu les commentaires. Je crois que tu restes en HTML4 alors c'est correct.

signaler à un administrateur
Commentaire de alvinp le 12/10/2006 06:31:47

Ok merci beaucoup, je vien de comprendre que j'ai utilisé le même nom de variable pour la création de l'image et l'affichage de mes données :)

signaler à un administrateur
Commentaire de alvinp le 12/10/2006 06:36:22

Maintenant, quand j'aurais du temps de libre, je ferai de façon à ce que sa puisse rentrer dans l'image même si la taille est petite (si sa marche avec un calcul biensur)

Et puis je rajouterai deux ou trois petits trucs...

signaler à un administrateur
Commentaire de webdeb le 12/10/2006 19:28:18

Le mieux serait d'améliorer toute ta source en reprenant tous les conseils que l'on t'a donnés :)

signaler à un administrateur
Commentaire de alvinp le 12/10/2006 19:42:48

D'accors, mais l'histoire de constante et tout, je ne connais pas forcement :D

signaler à un administrateur
Commentaire de webdeb le 12/10/2006 21:31:54

Pour les constantes c'est là : http://www.php.net/define

signaler à un administrateur
Commentaire de alvinp le 12/10/2006 22:36:20

Encore des questions :: pathinfo pour avoir le nom du fichier sans l'extension sa serai quoi svp
J'ai essayer en changeant EXTENSION par FILENAME mais sa ne fonctionne pas!

signaler à un administrateur
Commentaire de webdeb le 12/10/2006 23:06:54

<?php
$file = 'chemin/bidule/truc/monFichier.html';
echo pathinfo($file, PATHINFO_BASENAME);
?>

++

signaler à un administrateur
Commentaire de alvinp le 13/10/2006 06:50:12

Re, j'ai essayé mais sa m'affiche le nom avec l'extension et je voudrai isoler juste le nom :D

signaler à un administrateur
Commentaire de webdeb le 13/10/2006 13:02:05

Si tu as PHP5.2.0 ou supérieur tu peux faire ceci :

<?php
$file = 'chemin/bidule/truc/monFichier.html';
echo pathinfo($file, PATHINFO_FILENAME);
?>

Sinon tu récupéres la chaîne qui se retrouve après le dernier point à partir du code précédent utilisant PATHINFO_BASENAME.

++

signaler à un administrateur
Commentaire de alvinp le 13/10/2006 16:02:37

Cela ne marche pas avec ma version de php!

Je voulais savoir si il y avait autre chose que j'ai oublié de rajouter ou modifié dans la source?

Merci

signaler à un administrateur
Commentaire de alvinp le 13/10/2006 22:27:26

J'ai ajouté une partie qui permet d'afficher l'image avec copyright sans l'enregistrer!

Mais lors du test, il m'affiche le lien de l'image édité, pouvez-vous m'aider?

signaler à un administrateur
Commentaire de alvinp le 15/10/2006 13:15:11

Le style peut être choisi sous firefox avec l'extension 'StyleSheet Chooser Plus' sinon changer directement dans la source ;)

Je compte rajouter des options comme le texte du copyright et les positions possibles...

signaler à un administrateur
Commentaire de sepultura666 le 16/10/2006 09:33:04

Alors moi je vais vous dire un truc arrêtezde vous battre pour ces EXTENSIONS !!! lol

Mes remarques, très bon code, mais quelque peu, fouillis... Trop de choses mal gérées...Revoiston code en l'optimisant. Faut toujours pense au serveur, le pauvre quand on va lui balancer çà dans les dents à chaque execution du script il va morfler :)

Sinon en ce qui concerne les extensions,savais-tu que, quand tu "envoi" un fichier par un formulaire, ou autrement, je sais plus (çà fais longtemps que j'ai pas fais mumuse avec la GD2) tu as un truc qui est : $_FILES['image']['type'] ou imageestlenom de ton champ formulaire (ou bien je crois que tu peux faire le fopen et le placer dans image, je sais plus). Bref l'avantage avec çà que c'est que tu récupère directement le REEL type du fichier image (admettons, un .php dissimulé en .jpg... et hop... ou une erreur de la part de ton copain, un jpg renommé en gif ou png !,  ou encore au niveau rapiditiéde ton code, si c'est un jpeg ou un jpg, ou un pjpeg ? tu fais trois tests ?)

Bref y'a des tas de choses pour pas se casser la nenette, alors pouruqoi se la casser... lol

signaler à un administrateur
Commentaire de alvinp le 17/10/2006 06:37:48

Lol merci mais j'ai rien comprit :D

Pouvez-vous me dire pourquoi mon script 'rename.php' ne fonctionne pas?
Pourtant j'ai l'impression que tout ce passe bien!

signaler à un administrateur
Commentaire de emilia123 le 18/10/2006 01:46:34

bonsoir,

Je tiens à intervenir sur le ===

il est vrai que parfois on peut passer à coté de vérification donc potentiellement à coté de faille.

ex de problème:
$ma_variable_bien_initialisee=0;

if($ma_variable_bien_initialisee=="mon_mot_de_passe_super_securisé"){ echo " bienvenue avec ton mot de passe surper sécurisé";}

et bin on aura un super message de bienvenu quand on va visiter la page=> faille de sécurité.
avec le == php test pas le type de la variable et du coup se "trompe" dans certain cas.
avec === il vérifi le type et la valeur... du texte comparé avec un chiffre => cela aurait renvoyé "faux".

Em.

signaler à un administrateur
Commentaire de alvinp le 18/10/2006 06:41:21

Heu...

Mais si c'est si y a du texte d'un côté et des chiffres de l'autres sa va forcement mettre 'faux'!

Et de toute façon pour utiliser '===' il faudrait préciser le type de la variable à chaque fois non?

signaler à un administrateur
Commentaire de emilia123 le 18/10/2006 07:09:21

bonjour,

non cela ne va pas mettre faux justement.
le code donné est vérifié sur php "4.3.quelque chose".
PHP a du mal à comparé du texte avec des chiffres (comparaison simple avec == ) , ce qui est logique si l'on réflechi.
dire est ce que une phrase est égale à 0 ou 1.. quelle est la réponse valide?
Il essaye (en gros) alors de modifier le type de la varible pour que la comparaison soir possible.

c'est pour cela qu'il y a le "===". si les types sont différents, au lieu d'essayer de s'arranger, php renvoit faux.

ce problème peut survenir lorsqu'un fonction peut retourner plusieurs types de retour.
Si la fonction, par exemple, génère du texte, ou sinon qui renvoi false (0) en cas s'erreur, il pourrait y avoir des surprises si jamais le texte retourné est égale à "0".
le test "==" qui suivrait pour gérer les erreurs pourrait être trompé.

voili voilou, petite reflexion apres une petite nuit.

Em.


signaler à un administrateur
Commentaire de webdeb le 18/10/2006 09:54:32

Test ça tu vas être surpris :

<?php

$var = '0'; // Déclaration d'une chaîne de caractères

// Test de la valeur. On cherche à savoir si la chaîne de caractères à la même valeur que le chiffre 0
if( $var == 0 ) {

echo 'Binevenue dans votre espace admin !';
}
  else
{
echo 'Ahaha ! Tu cherches à me pirater ?';
}
?>

Tu constates que la condition renvoie vraie et donc que tu t'exposes à une sacrée faille de sécurité. Maintenant teste avec le triple égal pour comprendre l'intérêt du test sur le type de ta variable.

Au passage, je remarque que tu ne veux toujours pas utiliser de constantes à la place de tes variables d'entête.

++

signaler à un administrateur
Commentaire de alvinp le 18/10/2006 10:59:23

Lol mais je trouve sa ridicule les constantes, j'ai regardé et j'ai remarqué qu'elles ne peuvent être modifié aussi!

Peut tu me donner les avantages d'utiliser des constantes?

Et je vais testé ce petit bout de code pour voir ;)

signaler à un administrateur
Commentaire de webdeb le 18/10/2006 12:42:34

>> Lol mais je trouve sa ridicule les constantes, j'ai regardé et j'ai remarqué qu'elles ne peuvent être modifié aussi!

Le script ne peut pas modifier leur valeur une fois qu'elles sont fixées dans la fonction define(). Si la valeur de ta variable $police ne change pas pendant l'exécution de ton script alors, d'un point de vue algorithmique, c'est une constante. Donc utilise une constante. A quoi ça sert de différencier constantes et variables dans les langages de programmation sinon?

>> Peut tu me donner les avantages d'utiliser des constantes?

C'est plus logique d'utiliser une constante à la place d'une variable quand c'est le cas. L'accès en lecture est plus rapide pour une constante qu'une variable théoriquement.

++

signaler à un administrateur
Commentaire de alvinp le 18/10/2006 17:54:48

J'ai fait ce test et c'est super!
J'y prend note...

Parcontre pourriez vous m'aider pour une partie du code qui affiche l'image sans l'enregistrer et le problème c'est que l'image ne s'affiche pas mais le lien est à la place!!

# // Cette condition sert à afficher directement une image avec copyright (par lien)
# if($_GET['choix'] == 'gen'){
#  $fichier = $_GET['fichier'];
#  if(file_exists($repertoire.'/'.$fichier)){
#   //$ext = strtolower(substr($fichier, strrpos($fichier, '.') + 1)); // Renvoi les caractères après le point
#   $ext = pathinfo($fichier, PATHINFO_EXTENSION); // Fonction de php qui renvoi l'extension d'un fichier
#   $ext = mise_majmin($ext,'maj');
#  
#   // Lecture de l'image et mise en variable
#   if($ext == 'JPG' or $ext == 'JPEG')
# header ('Content-type: image/jpeg');
# $image = imagecreatefromjpeg($repertoire.'/'.$fichier);
# if($ext == 'PNG')
# header ('Content-type: image/png');
# $image = imagecreatefrompng($repertoire.'/'.$fichier);
# if($ext == 'GIF')
# header ('Content-type: image/gif');
# $image = imagecreatefromgif($repertoire.'/'.$fichier);
#  
# $imagex = imagesx($image); // Nombre de pixel en longueur
# $imagey = imagesy($image); // Nombre de pixel en hauteur
#  
# // Positionnement du texte
# switch($posx){
# case 'g': $x = 20;
# break;
# case 'c': $x = $x = ($imagex - (50 + (strlen($copyright) * $taille))) / 2;
# break;
# case 'd': $x = $imagex - (50 + (strlen($copyright) * $taille));
# break;
# }
# switch($posy){
# case 'h': $y = 20 + $taille;
# break;
# case 'm': $y = ($imagey - 50) / 2;
# break;
# case 'b': $y = $imagey - $taille;
# break;    
# }
# $height = imagefontheight($taille); // Ccalcul de la taille d'une chaine (approximatif)
#   $couleur = imagecolorallocate($image, 255, 0, 0); // On met une couleur en variable R,V,B
#   $couleur2 = imagecolorallocate($image, 0, 0, 0); // On met une couleur en variable R,V,B
#   imagettftext($image, $taille, 0, $x, $y, $couleur, $skin.'/'.$police, $copyright); // Ecriture du premier texte sur l'image
#   imagettftext($image, $taille, 0, $x + 1, $y + 1, $couleur2, $skin.'/'.$police, $copyright); // Ecriture du deuxième texte sur l'image
#  
#   // On affiche l'image
#   if($ext == 'JPG' or $ext == 'JPEG')
# imagejpeg($image);
# if($ext == 'PNG')
# imagepng($image);
# if($ext == 'GIF')
# imagegif($image);
#  
# imagedestroy($image); // On détruit l'image pour vider la variable et la mémoire
#  }
#  exit();
# }

signaler à un administrateur
Commentaire de alvinp le 19/10/2006 06:46:18

Je rappel que le style a été créé sous firefox, donc internet explorer ne donnera pas le même résultat!

Je vais essayer  de faire un style rien que pour internet explorer mais je ne suis sûr de rien...
Il parait qu'internet explorer ne respecte pas tout des languages et c'est pour cela que sa ne ressemble pas à firefox!

signaler à un administrateur
Commentaire de jean84 le 19/10/2006 10:50:24

Emilia > Je suis heureux que tu sois honnete : "il est vrai que parfois on peut passer à coté de vérification donc potentiellement à coté de faille.". J'insite sur le POTENTIELLEMENT...

"$ma_variable_bien_initialisee=0;
if($ma_variable_bien_initialisee=="mon_mot_de_passe_super_securisé"){ echo " bienvenue avec ton mot de passe surper sécurisé";}"
C'est vrai que ton exemple est parlant mais il n'empeche que c'est utopique (quoi que si certains code ainsi, tant pis pour eux). Remarque que l'on peut se demander ce que tu veux faire quand tu initialise une variable a 0 ? A false ? Ou la valeur numerique (int) 0 ? Parce que 0 est une valeur tellement generique qu'il est evident que tous vos scripts peuvent fonctionner ... maintenant si on met la valeur a FALSE ou a NULL, quelle sera le resultat ? Et bien le test ne passera pas...
=> http://www.info-party.c4.fr/test.php

Pareille pour webdeb : quel interet de verifier si une variable est a 0 ? Tu peut a peu pres tout faire sur une variable ayant cette valeur. Lui passer empty(), sa passera pas meme si elle est initialise, isset() ? Il te diras qu'elle n'est pas initialise...

Quand on parle de failles, on montre des exemples concrets, pas des trucs tailles expres pour laisser passer, lol, sinon c'est trop facile ^^
Le but est d'avancer, pas faire peur ...
Mais si vous avez des exemples precis (autre qu'avaec 0) a montrer, je serais le premier a dire que j'ai eu tord :-)

Code :

<?php
    
    echo 'Test de l\'operateur == avec $ma_variable_bien_initialisee=0<br />';
    $ma_variable_bien_initialisee = 0;
    if ( $ma_variable_bien_initialisee == "mon_mot_de_passe_super_securisé")
        echo " bienvenue avec ton mot de passe surper sécurisé (test n°1)";
    else
        echo 'Et ben non (test n1)';

    echo '<br /><br />Test de l\'operateur == avec $ma_variable_bien_initialisee=FALSE<br />';
    $ma_variable_bien_initialisee = FALSE;
    if ( $ma_variable_bien_initialisee == "mon_mot_de_passe_super_securisé")
        echo " bienvenue avec ton mot de passe surper sécurisé (test n°2)";
    else
        echo 'Et ben non (test n2)';

    echo '<br /><br />Test de l\'operateur == avec $ma_variable_bien_initialisee=NULL<br />';
    $ma_variable_bien_initialisee = NULL;
    if ( $ma_variable_bien_initialisee == "mon_mot_de_passe_super_securisé")
        echo " bienvenue avec ton mot de passe surper sécurisé (test n°3)";
    else
        echo 'Et ben non (test n3)';

    echo '<br /><br />Test de l\'operateur == avec $ma_variable_bien_initialisee=0 et verification avec isset()<br />';
    $ma_variable_bien_initialisee = NULL;
    if ( isset($ma_variable_bien_initialisee) )
        echo " bienvenue avec ton mot de passe surper sécurisé (test n°4)";
    else
        echo 'Pas initialise .... (test 4)';

    echo '<br /><br />Test de l\'operateur == avec $ma_variable_bien_initialisee=0 et verification avec empty()<br />';
    $ma_variable_bien_initialisee = NULL;
    if ( !empty($ma_variable_bien_initialisee) )
        echo " bienvenue avec ton mot de passe surper sécurisé (test n°5)";
    else
        echo 'Vide ... (test 5)';
?>

signaler à un administrateur
Commentaire de alvinp le 19/10/2006 12:43:31

Bien ;)

C'est très utile des explications comme celles là :D

signaler à un administrateur
Commentaire de emilia123 le 19/10/2006 22:54:22

bonsoir à tous,

Biensur ce == ne fait pas qu'une applie soit bourrée de faille de sécurité...
mais il existe des fonctions (interne à PHP) qui retourne 0 ou false comme résultats.. sans parler des fonctions persos
ex strpos

si on utilise cette fonction pour vérifier la présence d'une chaine non désirée (ex <script></script>) dans une chaine, une simple vérification  avec"==" pourrait laisser passer la chaine en question.

Il est sur qu'il faut plusieurs élements pour s'exposer à un danger, mais:
- cela ne coute rien de rajouter 1 = quand on tape (mise à part peut être accroite le risque de se féler un doit en tentant le combo 'shift + ='    :))))
- avec les scripts en libre accès, il est assez facile de vérifier la présence d'un mauvais test
- prendre de bonnes habitudes le plus tôt possible ne pourra que servire pour la suite..

En tout cas bravo à jean84 parce que rare sont ceux qui teste à fond ce qu'ils disent et qui ne disent pas juste "ca marche pas" ou "c'est null ca plante".

bonne continuation

Em.

signaler à un administrateur
Commentaire de jean84 le 20/10/2006 18:36:34

emilia123 >
"cela ne coute rien de rajouter 1 = quand on tape (mise à part peut être accroite le risque de se féler un doit en tentant le combo 'shift + ='    :))))"
Tu as raison, t'en qu'a faire, autant en rajouter un et etre sur, sa ne fait aps de mal et sa permet meme d'accelerer certaines verifs donc pourquoi s'en priver ? C'est vrai que j'hesitais souvent a mettre 2 ou 3 = puis au final, autant en mettre 3 ... Je vais changer mes habitudes de ce pas ;-) (tant pis pour la felure.. sa fera une blessure de guerre, sa peut toujours impressioner les filles ^^ lol )

"En tout cas bravo à jean84 parce que rare sont ceux qui teste à fond ce qu'ils disent et qui ne disent pas juste "ca marche pas" ou "c'est null ca plante"."
Pour etre honnete a 100%, je dirais que je ne verifie malheureusement pas toujours a fond :-( , mais j'essaye de faire un effort quand j'ai le temps ;-)

@++

signaler à un administrateur
Commentaire de jean84 le 20/10/2006 18:40:35

Au fait, bravo pour ton travail alvinp, c'est tres bien d'avoir su ecouter et prendre en compte nos explications, sa demontre que tu as envie d'avancer et et d'apprendre correctement ! En plus, le code est beaucoup plus sympa a lire et a comprendre (meme si il reste quelques modifs mais rien de grave, juste des petites optimisations (getimagesize() a la place de imagex() et imagey() par exemple. Tu gagnes une ligne et sa evite d'avoir trop de variable a gerer -laz fonction te renvoi un tableau plus simple a manier)

@++

signaler à un administrateur
Commentaire de webdeb le 20/10/2006 18:57:39

La fonction renvoit aussi le type de l'image qu'il faut absolument vérifier pour s'assurer que c'est bien une image.

signaler à un administrateur
Commentaire de alvinp le 21/10/2006 07:50:59

Merci du compliment, je fais de mon mieu!

Et de ce qui est de la fonction getimagesize(), j'ai vue qu'il faut mettre le chemin de l'image donc qu'il fautcertainement la relire!
Sa prendrai plus de temps que de le faire directement sur l'image édité, avec imagesx() et imagessy()...

signaler à un administrateur
Commentaire de webdeb le 21/10/2006 09:21:48

getimagesize() renvoit un tableau numérique avec tous les informations de l'image. Tu n'as juste à pointer un élément du tableau pour récupérer une information

signaler à un administrateur
Commentaire de alvinp le 21/10/2006 12:54:39

Ok mais d'après certains, il parait que la page est plus longue à charger avec ceci qu'avec l'autre solution!

signaler à un administrateur
Commentaire de webdeb le 21/10/2006 15:22:57

Je ne sais pas où tu as entendu cette annerie. Getimagesize() est faite pour obtenir les infos d'une image et elle le fait très bien et très rapidement.

signaler à un administrateur
Commentaire de jean84 le 21/10/2006 19:08:12

tiens =>http://www.php.net/manual/fr/function.getimagesize.php,
tu pourra voir les details de cette fonction.

@++

signaler à un administrateur
Commentaire de alvinp le 24/10/2006 19:38:16

Merci de tout vos conseil, je mettrais à jour s'il y a encore quelque chose à modifier! ;)

Ajouter un commentaire

Discussions en rapport avec ce code source dans le forum

un copyright dans une image [ par dubs07 ] J?aurais voulu savoir comment insérer un copyright sur une image ?Merci d?avance. problème gd2 [ par moi zork ] bonsoir à tous , Je viens de me mettre au image php avec la librairie GD sauf que j'ai un petit probleme voila mon script :&lt;?phpheader ("Content-ty Copyright image [ par kimengumi ] BonjourJ'ai bien aimé le script de webdesignasp pour écrire un copyright sur les images.En fait, j'enregistre l'image telle quelle sur mon serveur et Copyright sur les images [ par RockmanX ] Une petite question très simple:j'ai une gallerie d'images et j'aimerais que sur chaque image il apparraisse un petit copyright en bas (mais sur l'ima Surimpression d'image avec GD2 !! [ par Nox ] bonjour!!je cherche à partir de mon image #1:je veux lui ajouter un contour:et UPLOAD IMAGES [ par sebalex ] Salut à tous, Voilà, j'ai repris un code pour l'upload d'image sur ce forum et tout fonctionne. Le problème est que je souhaite que l'image uploadée s delete image [ par klerdesign ] Bonjour,J'utilise un module admin pour mes news avec insertion d'image.Quelle requête utiliser si je veux n'insérer dans ma table 'images' qu'une seul Mémoire max [ par coockiesch ] Salut!Alors que je tente de créer une image (image d'1 mo) avec GD, via imagecreatefromjpeg, j'ai le joli message d'erreur suivant: Allowed memory siz Redimensionner une image entre deux balises [ par thecomputerman ] Bonjour,J'ai un petit soucis avec le redimensionnement d'images. Tout d'abord quand une image est insérée dans un texte c'est entre deux balises [img] Image sur click .. [ par nicolas66 ] Bonsoir @ tous !Je voulais juste savoir comen il était possible d'afficher une image créee avec php dans la meme page ou il y a un formulaire sur clic


Nos sponsors

Sondage...

CalendriCode

Juillet 2009
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
2728293031  

Consulter la suite du CalendriCode

Téléchargements

Logiciels à télécharger sur le même thème :

Comparez les prix Nouvelle version


LG KP501

Entre 9€ et 159€


Photothèque Nouveau !



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
Temps d'éxécution de la page : 0,390 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.