PHP / Regex / Getimagesize

Fermé
Pyxouze Messages postés 175 Date d'inscription mercredi 20 mai 2009 Statut Membre Dernière intervention 29 juin 2012 - 10 sept. 2011 à 14:31
heyquem Messages postés 759 Date d'inscription mercredi 17 juin 2009 Statut Membre Dernière intervention 29 décembre 2013 - 11 sept. 2011 à 12:34
Bonjour,

je sollicite votre aide aujourd'hui car j'ai quelques difficultés avec un bout de code pour mon site. J'ai créé une sorte de BBcode qui me permet d'afficher le code HTML souhaité même si je le protège avec htmlspecialchars. Plus concrètement, j'écrit des billets pour mon blog et je les enregistre dans une base de donnée SQL. Avant de les afficher, je place ce code :

$article = preg_replace('#\[img\](.+)\/img\#U', '<div align="center"><a href="../6_images/$1"><img src="../6_images/$1" width="250"></a></div>', $article);


Ce code là fonctionne parfaitement. Seulement j'aimerais choisir la taille de l'image et mettre 520p de largeur si la taille réelle de l'image dépasse les 520p. Dans le cas contraire, si l'image est inférieur à 520p de largeur je conserve ses proportions d'origine.

Je planche vraiment sur le code et se serait vraiment sympa de me mettre sur une piste. Voilà là où j'en suis :

$article = preg_replace('#\[img\](.+)\/img\#U', '<div align="center"><a href="../6_images/$1"><img src="../6_images/$1" width="' . 
				$width = getimagesize("../6_images/$1"); 
				if ($width > 520) {
				echo '520'; 
} . '"></a></div>', $article);


Merci de m'aider dans la mesure du possible en me conseillant sur ce code =D
A voir également:

3 réponses

acloa Messages postés 64 Date d'inscription samedi 23 janvier 2010 Statut Membre Dernière intervention 4 février 2013 15
10 sept. 2011 à 14:38
Pour t'aider donne moi deja l'adresse de ton site
0
Pyxouze Messages postés 175 Date d'inscription mercredi 20 mai 2009 Statut Membre Dernière intervention 29 juin 2012 21
10 sept. 2011 à 14:47
je n'arrive pas à envoyer l'adresse de mon site, j'ai l'impression que ccm n'autorise pas mon poste une fois que je l'ai envoyer. Mon site s'appelle webtutoatuce et tu peux trouver l'adresse complète dans mon profil
0
Pyxouze Messages postés 175 Date d'inscription mercredi 20 mai 2009 Statut Membre Dernière intervention 29 juin 2012 21
10 sept. 2011 à 21:25
Après y avoir réfléchis pendant quelques temps, je me demande si ce n'est pas plus simple d'écrire une REGEX comme ceci :

$article = preg_replace('#\[img=()\](.+)\/img\#isU', '<div align="center"><a href="../6_images/$1"><img src="../6_images/$1" width="$2"></a></div>', $article);


Enfait dans mon formulaire je préciserais quelle taille l'image fera de cette manière :

[img=520]img01.png/img

Quelqu'un connaît la syntaxe exact pour cette REGEX ?

Merci beaucoup
0
heyquem Messages postés 759 Date d'inscription mercredi 17 juin 2009 Statut Membre Dernière intervention 29 décembre 2013 131
Modifié par heyquem le 11/09/2011 à 12:49
salut


Je pense qu'il te faut utliser preg_replace_callback()
Ca cevrait donner quelque chose comme ca:


$article = preg_replace_callback(     
                            '#\[img=()\](.+)\/img\#isU',     

                            create_function(     
                                '$x',     
                                '$width = getimagesize("../6_images/"  
                                                       .$x[0]) ; '    
                                'if ($width > 520) {     
                                    return  '<div align="center">'     
                                            '<a href="../6_images/'    
                                            .$x[0].'">'     
                                            '<img src="../6_images/'    
                                            .$x[0].'" width="520">'     
                                            '</a></div>';     
                                } else {     
                                    return  '<div align="center">'     
                                            '<a href="../6_images/'    
                                            .$x[0].'">'     
                                            '<img src="../6_images/'    
                                            .$x[0].'" width="'    
                                            .$x[1].'">'     
                                            '</a></div>';   
                                }'    
                            ),  
                     
                        $article);



Je connais peu PHP. Je me suis donc peut être trompé dans l'utilisation de $x et dans la façon d'écrire les chaînes en PHP.
Note bien aussi que les instructions dans create_function() doivent être entourées de simples quotes ' : j'ai essayé de les mettre mais je ne sais pas comment considérer les instructions avec if et else, où commence et où s'arrête une instruction. Il y a certainement une erreur de syntaxe à corriger là-dedans.
Mais tu comprendras le principe général

Cependant il y a quelque chose qui me paraît bizarre: tu utilises $1 et $2 dans ton code, ce qui signifie qu'il doit y avoir deux groupes définis dans le pattern de la regex. Or je vois bien (.+?) à un endroit mais les parenthèses dans \[img=()\] ne capturent rien. N'y a t il pas une erreur à cet endroit ?
0