Redimensionner les images, si nécessaire (pour forum)

razoor
Invité n'ayant pas de compte PHPfrance

28 juil. 2006, 13:24

Merci Truc,
J'utilise cette fonction de vérification car l'image n'est pas forcément sur mon serveur (file_exists() ne fonctionne que sur son propre serveur). Effectivement, le code comme tu l'as modifié me permet de ne plus obtenir le message d'erreur, mais j'ai le problème rencontré par les précédents intervenants, visiblement le checkWidth('$1') n'est pas compris. Je pense qu'il ne comprend pas à quoi renvoie le $1, car la fonction checkwidth en elle même fonctionne, je l'ai essayée en indiquant directement le chemin vers une image. Mais dans le cadre de l'expression régulière, elle ne fonctionne pas :s que faire ? merci pour votre aide

Modérateur PHPfrance
Modérateur PHPfrance | 7636 Messages

28 juil. 2006, 13:44

utilise la fonction en callback
$chaine = preg_replace_callback('#\<img src="(.+?)" alt="" />#i','checkWidth',$chaine);
function checkWidth($img) 
{
     ini_set('allow_url_fopen', '1');
     $image='';
     if (@fclose(@fopen($img[1], 'r'))) 
    {
        $tab = getimagesize($img[1]); // on récupère la taille de l'image
        $width = ($tab[0] > 350)  width="350" : ''; 
        $image = '<img src="'.$tab[0].'" '.$width.' alt="" />';
     }
     return $image;
}

/!\ Avant de poster se documenter et rechercher.
Qui ne sait pas rendre un service n'a pas le droit d'en demander.
MaBrute

razoor
Invité n'ayant pas de compte PHPfrance

28 juil. 2006, 14:53

Merci beaucoup, mais désolé, j'ai une nouvelle erreur :

Parse error: parse error, unexpected T_STRING in /##/fichier.php on line 20

où la ligne 20 correspond à :
$width = ($tab[0] > 350)  width="350" : '';

Modérateur PHPfrance
Modérateur PHPfrance | 7636 Messages

28 juil. 2006, 15:05

$width = ($tab[0] > 350) ?  width="350" : '';
manquait un "?"

/!\ Avant de poster se documenter et rechercher.
Qui ne sait pas rendre un service n'a pas le droit d'en demander.
MaBrute

Invité
Invité n'ayant pas de compte PHPfrance

26 août 2006, 17:08

Hello,
Désolé de répondre aussi tard, mais je rentre tout juste de vacances... où je n'ai pas réussi à avoir accès au net... Mais même en rajoutant le "?", l'erreur demeurre : "Parse error: parse error, unexpected '=' in /home/ju16543/home/update_db.php on line 20"
Je suppose que c'est un problème de syntaxe :s mais comment s'en défaire ?

Code : Tout sélectionner

$width = ($tab[0] > 350) ? width="350" : '';
Merci d'avance pour vos réponses

Invité
Invité n'ayant pas de compte PHPfrance

26 août 2006, 17:11

Désolé, je viens de voir qu'il manquait des guillemets autour de 'width="350"' ... mais ça ne marche toujours pas :s

Trucks
Invité n'ayant pas de compte PHPfrance

26 août 2006, 18:43

Je pense qu'il s'agit d'un problème à ce niveau :
$chainetxt = preg_replace_callback('#\<img src="(.+?)" alt="" />#i','checkWidth',$chainetxt); 
. La fonction ne renvoie pas d'erreur, mais il ne se passe rien non plus. Les images, même de largeur plus grande que 350pixels restent de la meme taille, mais elles ne disparaissent pas non plus. Peut etre la formulation de l'expression régulière n'est elle pas bonne....
D'avance merci pour votre aide

Invité
Invité n'ayant pas de compte PHPfrance

27 août 2006, 00:20

J'ai trouvé la solution...... C'est vraiment incroyable, et ça marche presque bien ! Merci Truc. En fait... il fallait changer le nom de la fonction !!!! checkWidth ne lui plaisait pas ! (la majuscule peut etre )
Cependant, il demeurre un petit problème, dans $image, j'ai du inverser $width et src="...", sinon, lors de la seconde execution, les images disparaissaient. Je suppose que c'est à cause du motif de capture :
<img src="(.+?)" alt="" />... les images ayant déja un width ne devraient pas être reprises en compte, mais il considere dans ce cas que le "(.+?)" correspond à "http://site.com/nomimage.gif" width="400", alors qu'il ne devrait capturer que le nom de l'image... Ma solution d'inversion fonctionne, mais c'est un peu du bricolage... Si vous connaissez mieux , n'hésitez pas à le faire savoir ^^


Merci à tous