IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

[mpdf] Image non affichée dans le pdf créé


Sujet :

Langage PHP

  1. #1
    Membre averti Avatar de ddaweb
    Homme Profil pro
    Webmaster amateur
    Inscrit en
    Janvier 2013
    Messages
    329
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Webmaster amateur
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Janvier 2013
    Messages : 329
    Points : 429
    Points
    429
    Par défaut [mpdf] Image non affichée dans le pdf créé
    Bonjour,

    J'ai un problème avec une image dans le pdf créé avec mpdf.
    Si je travaille en localhost, elle est bien présente, tandis que sur le serveur pas (juste le carré d'une image manquante), malgré quelle est bien téléchargée à son emplacement.
    Pour être certain, j'ai renommé l'image en local -> absente sur le pdf et ensuite remis le bon nom et envoyé avec fillezilla sur le serveur.

    J'ai tapé l'url de l'image, elle est bien accessible (droits 775 pour tester).

    J'ai lu sur un autre forum que la librairie GD devait être présente dans PHP pour les png avec transparence : c'est bien le cas !
    Je lis une page complète dans mpdf., le reste de la page est bien dans le pdf (juste un CSS qui n'est pas prit en compte, mais ce n'est pas trop grave !)

    Quelqu'un a une idée de la raison et comment déboguer dans mpdf ?

    Code de l'image dans la page :
    Code html : Sélectionner tout - Visualiser dans une fenêtre à part
    <p class="print_only"><img src="../images/cecs_logo.png" border="0" alt="Logo" />Texte</p>
    Le texte s'affiche bien, le <p> est donc bien présent et pas un soucis de case

    Code pour mpdf:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    <?php
    require_once __DIR__ . './../modules/mpdf/vendor/autoload.php';
     
    $page = "./rgpd.php";
    $mpdf=new \Mpdf\Mpdf();
    $stylesheet = file_get_contents('./../css/responsive_cecs.css'); //if you wanted some styling
    $mpdf->WriteHTML($stylesheet,1);
    $mpdf->WriteHTML(file_get_contents($page)); 
    $mpdf->Output('RGPD.pdf',"D");
    ?>
    Rien de bien spécial

    Merci pour votre aide,
    ddaweb

  2. #2
    Membre averti Avatar de ddaweb
    Homme Profil pro
    Webmaster amateur
    Inscrit en
    Janvier 2013
    Messages
    329
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Webmaster amateur
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Janvier 2013
    Messages : 329
    Points : 429
    Points
    429
    Par défaut
    Avec mon ami nous avons trouvé la cause du blocage : le fichier .htaccess bloquait les images

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    RewriteRule .*\.(jpg|jpeg|gif|png|bmp|csv|CSV|Csv)$ - [F,NC]
    Pour bypasser cela, l'image sans extension !!

    Code html : Sélectionner tout - Visualiser dans une fenêtre à part
    <p class="print_only"><img src="../images/cecs_logo" border="0" alt="Logo" />texte</p>
    C'est pas vraiment catholique, mais cela fonctionne vive le sytème D

  3. #3
    Membre expert
    Avatar de cavo789
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2004
    Messages
    1 797
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mai 2004
    Messages : 1 797
    Points : 3 076
    Points
    3 076
    Par défaut
    Bonsoir

    Si tu penses que c'est une règle dans le fichier .htaccess, il faudrait identifier la ligne en question et de l'analyser pour comprendre la cause du blocage.

  4. #4
    Membre chevronné
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    721
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2006
    Messages : 721
    Points : 1 880
    Points
    1 880
    Par défaut
    Analyse de la directive:
    NC: veut dire que la règle doit être évalue de manière case-sensitive
    F: veut dire forbidden, et renvoie une erreur HTTP/403

    Qui a donc interdit l'accès aux images et pourquoi ?
    Corrigez cette règle ou virez-là.

  5. #5
    Membre averti Avatar de ddaweb
    Homme Profil pro
    Webmaster amateur
    Inscrit en
    Janvier 2013
    Messages
    329
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Webmaster amateur
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Janvier 2013
    Messages : 329
    Points : 429
    Points
    429
    Par défaut
    Je n'ai pas vraiment de soucis avec cette règle, c'est standard chez mon hébergeur, je ne l'ai pas mise.
    Cela empêche les téléchargement externes des images.

    La seule chose qui m'ennuyait, est que l'image ne s'affichait pas dans le pdf créé par mpdf, il était affecté par cette règle.
    Au niveau du site proprement dit, il n'y a pas de blocage.
    Donc le soucis se pose dans le traitement de la balise image par mpdf.

    Maintenant, si dans la regex on peut ajouter que le fichier soit autorisé, pourquoi pas
    Mais ma solution fonctionne également vu que l'extension est partie, même si c'est bizarre comme méthode.

    J'ai trouvé que c'était cette règle en la commentant et que l'image était bien dans le pdf.

  6. #6
    Membre chevronné
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    721
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2006
    Messages : 721
    Points : 1 880
    Points
    1 880
    Par défaut
    Probablement qu'en localhost, le script accède aux ressources telles que les images via le système de fichier, tandis que si on fait appel à un site externe alors file_get_contents fait une requête HTTP ordinaire et se heurte à cette règle Apache dont j'ai un peu de mal à comprendre l'utilité. Cela dit en passant, il n'est pas nécessaire de marquer à la fois Csv et CSV puisque la règle n'est pas case-sensitive.
    Ce n'est pas un fichier .htaccess ordinaire, c'est clairement une customization dont le contexte m'échappe

  7. #7
    Membre expert
    Avatar de cavo789
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2004
    Messages
    1 797
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mai 2004
    Messages : 1 797
    Points : 3 076
    Points
    3 076
    Par défaut
    Totalement d'accord, je n'ai pas compris l'histoire du htaccess (que j'ai longtemps pratiqué). S'il s'agit d'une image accessible depuis une URL il n'y a aucune raison qu'elle ne soit pas accessible à un code de génération pdf. Si l'image est accessible elle l'est aussi pour le code pdf.

    Ou alors il y a une restriction "exotique" qui interdirait p.ex. selon le user agent mais cela me paraît alambiqué.

  8. #8
    Membre averti Avatar de ddaweb
    Homme Profil pro
    Webmaster amateur
    Inscrit en
    Janvier 2013
    Messages
    329
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Webmaster amateur
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Janvier 2013
    Messages : 329
    Points : 429
    Points
    429
    Par défaut
    Citation Envoyé par binarygirl Voir le message
    Cela dit en passant, il n'est pas nécessaire de marquer à la fois Csv et CSV puisque la règle n'est pas case-sensitive.
    Ce n'est pas un fichier .htaccess ordinaire, c'est clairement une customization dont le contexte m'échappe
    Bien vu pour le nom des fichiers

    Cette règle est peut-être liée au SEO (ou Security) pour la qualité du site, j'ai essayé de la retirer, mais comme il y a une durée de vie, ce n'est peut-être pas encore prit en compte.
    Mon hébergeur est très à cheval sur la sécurité, c'est certes contraignant, mais une bonne approche pour garantir un meilleur service de qualité.
    J'ai un exemple de leur surveillance, pour le formulaire de contact j'avais permis l'injection de code (un oubli dans mon code ), après une injection de code, le site a été suspendu immédiatement et dès que j'ai montré que j'avais réglé le problème, il a été réactivé : comme ils ont un support très réactif, cela n'a pas duré longtemps (si je dois donner une moyenne de réaction : de 1h à 2h).

    Il y a un outil gratuit chez mon hébergeur qui permet de faire un test de qualité (Dareboost derrière), j'ai ajouté des règles dans le .htacces et gagné plus de 10%.
    Comme ce sera le site vitrine pour votre association, au mieux il est référencé, au mieux c'est ... je mets toute les chances de mon côté
    Je fais un petit refresh de l'ancien site (qui a quelques années) et très bien référencé pour notre région, j'espère qu'il le sera toujours après la mise en ligne de celui-ci.

    Que cela fonctionne en localhost est normal vu que je n'ai pas cette règle qui est bloquante pour mpdf (même pas d'.htaccess) ... je n'ai nulle envie de regarder les scripts de mpdf pour en trouver la cause
    J'utilise pourtant un lien relatif interne

  9. #9
    Membre averti Avatar de ddaweb
    Homme Profil pro
    Webmaster amateur
    Inscrit en
    Janvier 2013
    Messages
    329
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Webmaster amateur
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Janvier 2013
    Messages : 329
    Points : 429
    Points
    429
    Par défaut
    Pour votre info, mon ami avait trouvé une faille de sécurité dans mpdf concernant les images et c'est suite à cela que l'on a regardé le .htaccess : https://github.com/mpdf/mpdf/issues/1763
    J'utilise la version 8.1.0 qui ne semble pas être concernée : auraient-ils modifier la manière de travailler dans ma version ?

  10. #10
    Membre averti Avatar de ddaweb
    Homme Profil pro
    Webmaster amateur
    Inscrit en
    Janvier 2013
    Messages
    329
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Webmaster amateur
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Janvier 2013
    Messages : 329
    Points : 429
    Points
    429
    Par défaut
    Une petite mise à jour : vu les erreurs rencontrées avec php 8.2.2, j'ai cherché à faire fonction mpdf correctement.

    J'ai légèrement modifier le code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    require_once __DIR__  . './../modules/mpdf/vendor/autoload.php';
    // ----- par
    require_once __DIR__ . DIRECTORY_SEPARATOR . './../modules/mpdf/vendor/autoload.php';
    En plus de fonctionner en PHP 8.2.2, l'extension de l'image fonctionne + 100% du CSS est maintenant prit en compte (fonctionne également en PHP 7.4.9).
    Si cela peut aider quelqu'un, c'est d'autant mieux

    Je vais donc mettre en résolu.

    NB : j'ai également fait un update de mpdf avec composer, je ne sais pas si cela n'est pas également une partie de la solution

    ÉDIT : j'ai trouvé la solution ici : https://www.phptutorial.net/php-tutorial/php-__dir__/

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Image non affichée dans le JPanel
    Par coolanso dans le forum AWT/Swing
    Réponses: 3
    Dernier message: 22/02/2011, 10h40
  2. Données non afficher dans rapport PDF
    Par laurent_m dans le forum BIRT
    Réponses: 1
    Dernier message: 23/10/2008, 18h54
  3. Images non affichées dans applet sur serveur distant
    Par Zavonen dans le forum Applets
    Réponses: 6
    Dernier message: 04/06/2008, 19h10
  4. [Syntaxe] Image non affichée
    Par patrick_deb dans le forum Balisage (X)HTML et validation W3C
    Réponses: 2
    Dernier message: 30/12/2006, 12h16
  5. Rafraîchir une Image (reload) affichée dans un panel
    Par svirlot dans le forum Interfaces Graphiques en Java
    Réponses: 2
    Dernier message: 09/05/2006, 12h23

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo