Image MINI - je comprends pas ce script

Image MINI - je comprends pas ce script - PHP - Programmation

Marsh Posté le 24-08-2002 à 06:02:31    

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
Reply

Marsh Posté le 24-08-2002 à 06:02:31   

Reply

Marsh Posté le 24-08-2002 à 06:31:40    

>> 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 ...

Reply

Marsh Posté le 24-08-2002 à 14:51:39    

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)

Reply

Marsh Posté le 24-08-2002 à 15:40:11    

up

Reply

Marsh Posté le 24-08-2002 à 16:52:03    

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...
Reply

Marsh Posté le 24-08-2002 à 17:50:26    

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

Reply

Marsh Posté le 24-08-2002 à 18:15:54    

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...
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed