Problème avec la fonction preg_replace [Résolu]

Messages postés
79
Date d'inscription
vendredi 27 mai 2005
Dernière intervention
17 octobre 2010
- - Dernière réponse : Sub_Mat
Messages postés
79
Date d'inscription
vendredi 27 mai 2005
Dernière intervention
17 octobre 2010
- 19 févr. 2010 à 19:17
Bonjour à tous,

Voici mon problème :
Je récupère de ma base de donnée une donnée commentaire.
Dans ce commentaire, il y a des images qui sont placer entre des balises . Jusqu'ici tout va bien, sauf que voilà l'idée est d'afficher ces images dans un fichier pdf, grâce à la librairie "fpdf.php" disponible ici : http://www.fpdf.org/

- Pour afficher une image avec "fpdf.php" on utilise la fonction :
$this->Image()


Donc voici le code que sa me donne :

// Je récupère mon commentaire de ma base de donnée
$commentaire = $donnees['commentaire'];

// je remplace donc les balises  par la fonction 
// $this->Image() avec $1 qui est égale au lien vers l'image.
$commentaire =  preg_replace("#\[img\](.*?)\/img\#", $this->Image
('$1'), $comment);


Et voilà une erreur s'affiche :
FPDF error: Image file has no extension and no type was specified: $1

Donc on pourrait croire que mon image no pas d'extension, mais voilà si j'enlève ma fonction $this->Image() et que je laisse simplement '$1', je n'ai plus de problème et encore mieux je peux voir que mon fichier à une extension. Voici donc mon deuxième code au complet :

// Je récupère mon commentaire de ma base de donnée
$commentaire  = $donnees['commentaire'];

// je remplace donc les balises  par $1 
// qui est égale au lien vers l'image.
$commentaire = preg_replace("#\[img\](.*?)\/img\#", '$1', $comment);


Ce qui me retourne :
http://www.monsite.com/images/palmier.png

Je pense que mon problème vient de l'utilisation de
la fonction $this->Image()

Merci d'avance pour vos réponses !
Cordialement,
Sub_Mat
Afficher la suite 

Votre réponse

8 réponses

Meilleure réponse
Messages postés
72
Date d'inscription
mercredi 27 décembre 2000
Dernière intervention
16 mai 2016
3
Merci
Bonjour,

Il y a surement mieux, mais l'idée est là :

//Commentaire extrait de la base
$commentaire="toto  et tutu";

//Découpage du commentaire au niveau des balises 
if( preg_match("/\[\/img\]/", $value)){

//Découpage du texte au niveau de la balise /img
$tab2=preg_split("/\[\/img\]/",$value);

//Ajout de l'image (texte avant la balise)
this->Image($tab2[0]);

//Ajout du texte après la balise avec cell
this->Cell($tab2[1]);

}else{

                //Ajout du text s'il n'y a pas de balise
this->Cell($value);

}
}


ce qui donne :
- toto
Ajout avec cell()

- toto.jpg/img et tutu
Ajout de l'image: toto.jpg
Ajout avec Cell: et tutu

J'espère que ça va pouvoir vous aider!
Avez-vous essayer de mettre le chemin relatif au lieu de l'URL?

S.

Merci seblechinois 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources a aidé 97 internautes ce mois-ci

Commenter la réponse de seblechinois
Messages postés
72
Date d'inscription
mercredi 27 décembre 2000
Dernière intervention
16 mai 2016
3
Merci
Re,

essayez :
$this->Image($tab2[0]);

S.

Merci seblechinois 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources a aidé 97 internautes ce mois-ci

Commenter la réponse de seblechinois
Messages postés
72
Date d'inscription
mercredi 27 décembre 2000
Dernière intervention
16 mai 2016
0
Merci
Bonjour,
Une fois que tu as "http://www.monsite.com/images/palmier.png" dans $commentaire
Si tu utilises la fonction image comme ceci :
$this->Image('<?php echo $commentaire; ?>');

/code
Ca donne quoi?

S.
Commenter la réponse de seblechinois
Messages postés
79
Date d'inscription
vendredi 27 mai 2005
Dernière intervention
17 octobre 2010
0
Merci
Bonjour seblechinois,
Voici le message qu'il me retourne :

FPDF error: Image file has no extension and no type was specified: $commentaire

Ce qui est normale puisque un commentaire n'est pas égale à un lien vers une image, et pour le coup je comprends le message d'erreur !

Zut, mon problème n'est toujours pas résolu !

Merci quand même pour votre réponse seblechinois !
Cordielement,
Sub8mat
Commenter la réponse de Sub_Mat
Messages postés
72
Date d'inscription
mercredi 27 décembre 2000
Dernière intervention
16 mai 2016
0
Merci
Re,
Je ne comprend pas bien, la fonction image() attend en argument un "string" qui contient le chemin ou l'URL de l'image?
Donc si la variable $commentaire contient l'URL de l'image, ça devrait marcher (en faisant attention au "'")?

$commentaire = preg_replace("#\[img\](.*?)\/img\#", $this->Image('$1'), $comment);

Ce qui me gêne dans cette ligne, c'est d'insérer $this-> Image('$1') dans la fonction preg_replace().
Peut-être faudrait-il découper le commentaire au niveau des balises les ajouter avec la fonction Cell() et insérer les images entre d'eux?

S.
Commenter la réponse de seblechinois
Messages postés
79
Date d'inscription
vendredi 27 mai 2005
Dernière intervention
17 octobre 2010
0
Merci
re seblechinois,

Voici ce qu'ils diseent dans leur manuel :

/////////////////////////////////////////////////////////////////////////
Image

Image(string file [, float x [, float y [, float w [, float h [, string type [, mixed link]]]]]])
Description
Place une image. Les dimensions occupées dans la page peuvent être indiquées de plusieurs manières :
largeur et hauteur explicites (exprimées dans l'unité utilisateur)
une dimension explicite, l'autre étant calculée automatiquement afin de respecter les proportions de l'image originale
aucune dimension explicite, auquel cas l'image est dimensionnée en 72 dpi
Les formats supportés sont le JPEG, le PNG et le GIF. Le GIF nécessite l'extension GD.

Pour le JPEG, toutes les variantes sont autorisées :
niveaux de gris
couleurs vraies (24 bits)
CMYK (32 bits)
Pour le PNG, sont autorisées :
les images en niveaux de gris sur 8 bits au plus (256 teintes)
les images en couleurs indexées
les images en couleurs vraies (24 bits)
mais ne sont pas supportés :
L'interlacement
L'alpha channel
Pour le GIF : en cas de GIF animé, seule la première image est utilisée.

Si une couleur transparente est définie, elle est prise en compte.

Le format peut être spécifié explicitement ou bien déduit de l'extension du fichier.
Il est possible de mettre un lien sur l'image.

Remarque : si une image est utilisée plusieurs fois, une seule copie est intégrée au document.
Paramètres
file
Chemin ou URL de l'image.
x
Abscisse du coin supérieur gauche. Si non précisée ou égale à null, l'abscisse courante est utilisée.
y
Ordonnée du coin supérieur gauche. Si non précisée ou égale à null, l'ordonnée courante est utilisée ; de plus, un saut de page est d'abord effectué si nécessaire (en cas de saut de page automatique) ; puis, après l'appel, l'ordonnée courante est positionnée en bas de l'image.
w
Largeur de l'image dans la page. Si elle n'est pas indiquée ou vaut zéro, elle est calculée automatiquement.
h
Hauteur de l'image dans la page. Si elle n'est pas indiquée ou vaut zéro, elle est calculée automatiquement.
type
Format de l'image. Les valeurs possibles sont (indépendamment de la casse) : JPG, JPEG, PNG et GIF. S'il n'est pas précisé, le type est déduit de l'extension du fichier.
link
URL ou identifiant retourné par AddLink().
/////////////////////////////////////////////////////////////////////////

"Je ne comprend pas bien, la fonction image() attend en argument un "string" qui contient le chemin ou l'URL de l'image?"
C'est plus ou moins la même chose, et les deux sont acceptés.

"Donc si la variable $commentaire contient l'URL de l'image, ça devrait marcher (en faisant attention au "'")?"
Je suis d'accord avec vous, mais j'ai bo essayer y a rien à faire !

Peut-être faudrait-il découper le commentaire au niveau des balises les ajouter avec la fonction Cell() et insérer les images entre d'eux?
Peut-être mais je ne vois pas trop comment prodécé, pouvez-vous m'aider ?

Merci pour vos réponses,
Cordialement,
Sub_Mat
Commenter la réponse de Sub_Mat
Messages postés
79
Date d'inscription
vendredi 27 mai 2005
Dernière intervention
17 octobre 2010
0
Merci
Bonjour seblechinois,

Un grand merci pour vos réponses !
Mais lorsque je place votre code dans ma page php,
il me retourne ce message d'erreur :

Parse error: syntax error, unexpected T_OBJECT_OPERATOR in /mnt/102/sda/4/6/monsite/mapage.php on line 221

La ligne en question est celle-ci :

this->Image($tab2[0]);


J'ai essayé ceci :

this->Image("'".$tab2[0]."'");


Mais ça ne change rien
Avez-vous une idée pour résoudre ce problème ?

Encore merci pour vos réponses,
Cordialement,
Sub_Mat
Commenter la réponse de Sub_Mat
Messages postés
79
Date d'inscription
vendredi 27 mai 2005
Dernière intervention
17 octobre 2010
0
Merci
Un grand Merci à tous les deux !
C'est bon ça fonctionne !
Dommage que "fpdf" n'accepte pas les images transparentes !
Encore merci !
Cordialement,
Sub_Mat
Commenter la réponse de Sub_Mat

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.