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

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : Redimensionner les images, si nécessaire (pour forum)

par Invité » 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

par Trucks » 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

par Invité » 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

par Invité » 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

par Truc » 28 juil. 2006, 15:05

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

par razoor » 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" : '';

par Truc » 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;
}

par razoor » 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

par Truc » 28 juil. 2006, 12:49

pour tester l'existence d'un fichier il y a file_exists()

sinon pourquoi échapper le "<" en début d'expression?
et l'option "e" peut être pas obligatoire tout comme "s" :-k
$chaine = preg_replace('#<img src="(.+?)" alt="" />#i','<img src="$1"'.checkWidth('$1').' alt="" />',$chaine);
JE me demande même pour l'option "i"... les balises <img> tu les as mis en place tu sais comment elle sont construites (case).

par razoor » 28 juil. 2006, 12:25

Personne ne pourait m'aiguiller par rapport à mon erreur ?

par razoor » 28 juil. 2006, 01:53

Je te remercie momox, je ne connaissais pas cette propriété, mais elle n'est pas comprise par IE .. Après un petit tour sur google, j'ai vu qu'il existe certes des solutions pour y pallier, mais c'est pas recommandé , car c'est avec du langage propriétaire et du JS. Alors que je programme en XHTML 1.0 Strict

par momox » 28 juil. 2006, 01:39

Et en utilisant les css? Comme l'attribut max-width par exemple?
@+

par razoor » 28 juil. 2006, 01:35

Bonjour,
J'obtiens une autre erreur quant à moi :
Parse error: parse error, unexpected '<' in "#####/fichier.php(23) : regexp code on line 1

Fatal error: preg_replace(): Failed evaluating code: <img src="http://####.gif" alt="" /> in #####/fichier.php on line 23"

Code de ma page :
	function checkWidth($img) {
     ini_set('allow_url_fopen', '1');
     if (@fclose(@fopen($img, 'r'))) {
    	$tab = getimagesize($img); // on récupère la taille de l'image
    	if($tab[0] > 350) return ' width="350"'; // on retourne l'attribut width avé la taille qui va bien
		}
Ligne d'expression régulière :
$chaine = preg_replace('#\<img src="(.+?)" alt="" />#sie','<img src="$1"'.checkWidth('$1').' alt="" />',$chaine);
Les images que j'utilise n'existent plus toujours, ce qui explique que j'utilise la vérification, pour savoir si l'image existe toujours sur le serveur distant (voire mon serveur).

par Invité » 02 juil. 2006, 20:53

j'ai exactement le même problème que "invité" !
Warning: getimagesize(): Unable to access $1 in monsite/index.php on line 7

Warning: getimagesize($1): failed to open stream: No such file or directory in monsite//index.php on line 7
en fait il reconnait pas le $1, comment on peut faire ?

par Ryle » 21 juin 2006, 10:13

Je viens de faire le test et j'ai pas eu de soucis, il me prend bien en compte les parenthèses capturantes dans $1 et $2 ....

Essayes éventuellement de les remplacer par \\1 et \\2 :?: