Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1202 connectés 

  FORUM HardWare.fr
  Programmation
  PHP

  Image MINI - je comprends pas ce script

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Image MINI - je comprends pas ce script

n°201133
tatanka
Posté le 24-08-2002 à 06:02:31  profilanswer
 

Code :
  1. * Description : Fabrique des miniatures a partir d'images.
  2. Les images sources doivent etre stockées dans le répertoire $dirSrc.
  3. Les miniatures seront stockees dans $dirDest.
  4. ****/
  5. function make_thumbs($dirSrc,$dirDest){
  6.   /* parametres supplementaires :
  7.    *  $tnH : largeur a attribuer aux miniatures. (par defaut : 50 px)
  8.    *         (la hauteur est determinee de facon a conserver le ratio)
  9.    *  $format : format de sortie (par defaut le format de l'image originale)
  10.    *            valeurs : "GIF","JPG","PNG","WBMP"
  11.    */
  12.   $tnH = 50;
  13.   if (func_num_args() >= 3)
  14.     {
  15.       $arg = func_get_arg(2);
  16.       if (is_int($arg))
  17. $tnH = $arg;
  18.       if (is_string($arg))
  19. {
  20.   if (!strcmp("GIF",strtoupper($arg)))
  21.     $format = 1;
  22.   else
  23.     if (!strcmp("JPG",strtoupper($arg)))
  24.       $format = 2;
  25.     else
  26.       if (!strcmp("PNG",strtoupper($arg)))
  27.  $format = 3;
  28.       else
  29.  if (!strcmp("WBMP",strtoupper($arg)))
  30.    $format = 4;
  31. }
  32.     }
  33.   if (func_num_args() >= 4)
  34.     {
  35.       $arg = func_get_arg(3);
  36.       if (is_int($arg))
  37. $tnH = $arg;
  38.       if (is_string($arg))
  39. {
  40.   if (!strcmp("GIF",strtoupper($arg)))
  41.     $format = 1;
  42.   else
  43.     if (!strcmp("JPG",strtoupper($arg)))
  44.       $format = 2;
  45.     else
  46.       if (!strcmp("PNG",strtoupper($arg)))
  47.  $format = 3;
  48.       else
  49.  if (!strcmp("WBMP",strtoupper($arg)))
  50.    $format = 4;
  51. }
  52.     }
  53.  
  54.   if (!(preg_match("/\/$/i",$dirSrc)))
  55.     $dirSrc .= "/";
  56.  
  57.   // test des permissions sur le repertoire de destination
  58.   $perms = fileperms($dirDest);
  59.   $perms = $perms & 07;
  60.   if (($perms & 01) && ($perms & 02) && ($perms & 04))
  61.     {
  62.       if (!(preg_match("/\/$/i",$dirDest)))
  63. $dirDest .= "/";
  64.     }
  65.   else
  66.     return "Le repertoire cible doit etre lisible,inscriptible et executable";
  67.   $fp = opendir($dirSrc);
  68.   if (!$fp)
  69.     return "Repertoire source illisible";
  70.   $pics = array();
  71.   while($file = readdir($fp))
  72.     {
  73.       if (!is_dir($file) && (preg_match("/\.(gif|jpe|jpg|jpeg|png|wbmp)$/i",$file)))
  74. {
  75.           array_push($pics,"$dirSrc$file" );
  76. }
  77.     }
  78.   closedir($fp);
  79.   $taille = sizeof($pics);
  80.   $thumbs = array();
  81.  
  82.   for ($i=0;$i<$taille;$i++)
  83.     {
  84.       $size = getimagesize($pics[$i]); // sauvegarde des attributs de l'image
  85.       switch($size[2])
  86. {
  87. case 1 :
  88.   if (imagetypes() & IMG_GIF)
  89.     $src = imagecreatefromgif($pics[$i]);  // l'image est au format gif
  90.   break;
  91. case 2 :
  92.   if (imagetypes() & IMG_JPG)
  93.     $src = imagecreatefromjpeg($pics[$i]);  // l'image est au format jpeg
  94.   break;
  95. case 3 :
  96.   if (imagetypes() & IMG_PNG)
  97.     $src = imagecreatefrompng($pics[$i]);  // l'image est au format png
  98.   break;
  99. default :
  100.   if (preg_match("/\.wbmp$/",$pics[$i]) && (imagetypes() & IMG_WBMP))
  101.     {
  102.       $src = imagecreatefromwbmp($pics[$i]);
  103.       $size[0] = imagesx($src);
  104.       $size[1] = imagesy($src);
  105.       if (!isset($format))
  106.  $format = 4;
  107.     }
  108.  
  109. }
  110.       if ($src == '')
  111. {
  112.   $thumbs[$pics[$i]] = "format non supporte";
  113. }
  114.       else
  115. {
  116.   $destW = $size[0]*$tnH/$size[1];
  117.   $destH = $tnH;
  118.   $dest = imagecreate($destW,$destH); // creation de l'image de destination
  119.   imagecopyresized($dest,$src,0,0,0,0,$destW,$destH,$size[0],$size[1]);
  120.  
  121.   $tn_name = $pics[$i];
  122.   /* renommage du fichicer de destination (ajout de "_tn" ) */
  123.   $tn_name = preg_replace("/\.(gif|jpe|jpg|jpeg|png|wbmp)$/i","_tn",$tn_name);
  124.   /* changement du chemin d'acces de $dirSrc en $dirDest */
  125.   $tn_name = preg_replace("/.*\/([^\/]+)$/i","$dirDest\\1",$tn_name);
  126.   if (isset($format))
  127.     $type = $format;
  128.   else
  129.     $type = $size[2];
  130.   switch($type)
  131.             {
  132.             case 1 :
  133.       if (imagetypes() & IMG_GIF)
  134.  {
  135.    imagegif($dest,$tn_name.".gif" );
  136.                   $thumbs[$pics[$i]] = "$tn_name.gif";
  137.  }
  138.       break;
  139.             case 2 :
  140.       if (imagetypes() & IMG_JPG)
  141.  {
  142.                   imagejpeg($dest,$tn_name.".jpg" );
  143.                   $thumbs[$pics[$i]] = "$tn_name.jpg";
  144.  }
  145.       break;
  146.             case 3 :
  147.       if (imagetypes() & IMG_PNG)
  148.  {
  149.                   imagepng($dest,$tn_name.".png" );
  150.                   $thumbs[$pics[$i]] = "$tn_name.png";
  151.  }
  152.       break;
  153.             default :
  154.       if (imagetypes() & IMG_WBMP)
  155.  {
  156.                   imagewbmp($dest,$tn_name.".wbmp" );
  157.                   $thumbs[$pics[$i]] = "$tn_name.wbmp";
  158.  }
  159.             }
  160.   if (!($thumbs[$pics[$i]]))
  161.     {
  162.       $thumbs[$pics[$i]] = "format non supporte";
  163.             }
  164. }
  165.     }
  166.   return ($thumbs);
  167. }
  168. ?>

 
 
je comprends pas pourquoi il teste le nb d'arg dans les deux premières conditions (il n'est censé y en avoir que 2), ni ce qu'il fait dedans
je capte pas son expression régulière "/\/$/i"
je vois pas ce qu'il fait avec les droits des fichiers :

$perms = $perms & 07;

 
 
 
pour le reste je comprends à peu près mais il ne m'affiche rien sur la page ou j'appelle cette fonction et je n'arrive pas à obtenir les messages d'erreur provenant de php  :/
 
 
un coup de main sera pas de refu  :jap:


Message édité par tatanka le 24-08-2002 à 06:03:10
mood
Publicité
Posté le 24-08-2002 à 06:02:31  profilanswer
 

n°201134
youdontcar​e
Posté le 24-08-2002 à 06:31:40  profilanswer
 

>> je comprends pas pourquoi il teste le nb d'arg dans les deux premières conditions (il n'est censé y en avoir que 2),  
 
cf le commentaire au début de la fonction, "paramètres supplémentaires". en php, tu peux envoyer autant de paramètres que tu veux à une fonction.
 
lorsque tu définis qq chose comme
 
function myFunc($taillex, $tailley)
 
c'est que tu demandes à l'appelant de mettre une taille x & une taille y comme deux premiers paramètres. ensuite, tu peux accepter des paramètres supplémentaires, récupérés avec func_get_arg(). ici, la taille de l'image générée et son format.
 
tu peux donc appeler la fonction comme suit :
make_thumbs("/images", "/thumbs" )
 
en précisant la largeur de l'image générée :
make_thumbs("/images", "/thumbs", 50)
 
en précisant le type d'image générée :
make_thumbs("/images", "/thumbs", "gif" )
 
en précisant la largeur et le type :
make_thumbs("/images", "/thumbs", 50, "gif" )
ou
make_thumbs("/images", "/thumbs", "gif", 50)
 
comme tu peux le constater, les 3ème & 4ème paramètres sont variables. donc :
 
si la fonction a au moins 3 paramètres, on doit tester ce troisième paramètre : est-ce la taille ou le type ? pareil pour le 4ème paramètre : taille ou type ?
 
c'est tout. je trouve ça absolument dégueulasse comme manière de procéder, vu que  
make_thumbs("/images", "/thumbs", 50, 70)
ou
make_thumbs("/images", "/thumbs", "gif", "jpg" )
sont parfaitement acceptables.  
 
>> je capte pas son expression régulière "/\/$/i"  
 
cf http://www.php.net/manual/en/function.preg-match.php  
il teste si la chaîne se termine par un /. tu peux facilement deviner vu le code : si la regex ne trouve rien, il l'ajoute !
 
>> je vois pas ce qu'il fait avec les droits des fichiers :
 
il teste s'il a les permissions lecture / écriture / éxécution sur le répertoire destination. regarde l'aide http://www.php.net/manual/en/function.fileperms.php / http://www.php.net/manual/en/function.chmod.php .
 
>> pour le reste je comprends à peu près mais il ne m'affiche rien sur la page ou j'appelle cette fonction et je n'arrive pas à obtenir les messages d'erreur provenant de php  :/  
 
on est censés deviner magiquement pourquoi ça plante ? :D tu ne dis pas grand chose ...

n°201245
tatanka
Posté le 24-08-2002 à 14:51:39  profilanswer
 

merci pour ta patiente et pour ton aide (sauf pour la dernière remarque :o )
 
bon c'est clair que tout ça j'aurais pu trouvé tout seul mais j'avais pas l'esprit très frais à cette heure là
pour le regexp, c'est le / du début que je ne comprennais pas, mais à priori on est censé commencé tous les regexp par un / (corrige moi si je me trompe)
 
ce qui ne va pas c'est que j'appelle cette fonction via un fichier test.php, tout ce qu'il y a de plus con, et ça marche pas ...
il me laisse une page vierge quand je lance le script
et j'ai aucun message d'erreur au niveau php (ils sont censé apparaitre sur le terminal, à priori)

n°201260
tatanka
Posté le 24-08-2002 à 15:40:11  profilanswer
 

up

n°201272
ethernal
Chercheur de vérité...
Posté le 24-08-2002 à 16:52:03  profilanswer
 

tu affiches le résultat dans ton fichier test.php au moins ?

Code :
  1. $tab= make_thumbs($dirSrc,$dirDest);
  2. while(list($key,$val)= each($tab) )
  3. {
  4.     echo "$key $val";
  5. }


Message édité par ethernal le 24-08-2002 à 16:52:24

---------------
...oups kernel error...
n°201295
tatanka
Posté le 24-08-2002 à 17:50:26  profilanswer
 

ethernal a écrit a écrit :

tu affiches le résultat dans ton fichier test.php au moins ?

Code :
  1. $tab= make_thumbs($dirSrc,$dirDest);
  2. while(list($key,$val)= each($tab) )
  3. {
  4.     echo "$key $val";
  5. }






non, normalement c'est censé me créer des images, mais rien n'est créé, et j'obtiens une page vierge (aucun message d'erreur), et je n'ai aucun message d'erreur php sur mon serveur (il devrait apparaitre dans le terminal
 

error_reporting  =  E_ALL
display_errors = On
log_errors = Off

n°201299
ethernal
Chercheur de vérité...
Posté le 24-08-2002 à 18:15:54  profilanswer
 

tatanka a écrit a écrit :

 
non, normalement c'est censé me créer des images, mais rien n'est créé, et j'obtiens une page vierge (aucun message d'erreur), et je n'ai aucun message d'erreur php sur mon serveur (il devrait apparaitre dans le terminal




 
rien n'est créé... ok, mais c'est pas pour cela qu'il doit y avoir une erreur php !
 
en plus il retourne soit un tableau des noms images crées ou bien un message d'erreur... pfff c'est mal fait :(
 

Code :
  1. $tab= make_thumbs($dirSrc,$dirDest);
  2. if ( is_array($tab) )
  3. {
  4.   while(list($key,$val)= each($tab) )
  5.   {
  6.      echo "$key $val";
  7.   }
  8. }
  9. else
  10. {
  11.   echo $tab;
  12. }


 
je sais rien te dire de plus   :na:  


---------------
...oups kernel error...

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  PHP

  Image MINI - je comprends pas ce script

 

Sujets relatifs
[PHP] lancement de script tout les jours ...[CSS] Gerer la couleur du texte "alternatif " qui remplace une image
[PHP]Inserer une image dans une page htmlcomment definir les coordonnes dune" image-lien"
comment positionner exactement une image genre a8cm a gauche ...etcgénérer fichier zip ou gzip d'une image en jpeg
[XSL-XML] Script XSL et données XML => intéraction : soluce insidejaimerai pour faire un lien image integre dans le backgroun
[XSL-XML] Définition du Namespace en XSL : comprends rien !Qu'est-ce qui peut faire planter un script PHP
Plus de sujets relatifs à : Image MINI - je comprends pas ce script


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR