Bonjour,
Tout d'abord je trouve super html2pdf et j'en remercie beaucoup son auteur.
J'ai développé mon site en utilisant la dernière version (V4.01) de HTML2PDF et en la testant sur un serveur local easyphp. Jusque là tout va bien !
Mais une fois le site sur les serveurs d'hébergement de online.net, plus rien ne marche et on obtient une ERREUR 500.
J'ai vérifié avec d'anciens sites utilisant la version V3.26 sur online.net, et ça marche très bien.
Pour autant, je ne souhaite pas reprendre la V3.26 sur mon nouveau site car elle pose d'autres problèmes qui eux ont été résolus avec la V4.01.
Y a-t-il donc une solution pour faire tourner une V4.x de HTML2PDF sur des serveurs de type online.net (j'ai vu un autre post qui rapportait un problème similaire sur les serveurs AMEN, mais resté sans réponse).
Merci beaucoup de votre aide !
Shweb75
Spipu Le 16/12/2010 à 09:41 quelle est l'OS ? la version éxacte de PHP ? de plus, une erreur 500 écrit forcement quelque chose dans les logs d'erreur. ca dit quoi ?
Je travaille sous windows et l'hébergeur est sous PHP 5.2.9-1.
En fait, après 10 heures de recherche à 2, on vient de trouver l'origine de l'erreur :
Dans la génération de la page pdf, on avait :
$html2pdf->Output($titre, 'D');
Visiblement, c'est le 'D' qui pose problème car ça marche maintenant très bien en mettant seulement :
$html2pdf->Output($titre);
Ce qui nous a induit en erreur, c'est que les 2 versions marchent très bien sous easyphp qui est sous version 5.2.10 !!
En revanche, avec le 'D' sur easyphp (ou sur online avec html2pdf de version précédente) on générait directement un fichier pdf enregistrer sur le disque dur. Maintenant on a un pdf incorporé à la fenêtre web, que je n'arrive pas à enregistrer comme fichier indépendant.
Je vais donc retourner à l'étude des exemples proposés... La solution ne devrait plus être très loin !!
PS : ce qui est quand même bizarre, c'est que l'affichage du pdf généré sur easyphp est différent de celui généré sur mon hébergeur (notamment j'ai eu tableau centré sur l'hébergeur et pas sur easyphp) !!
Rebonjour,
Après réexamen j'ai fini par rajouter l'argument 'D' dans l'output d'un des exemples d'HTML2PDF version 4.01 (exemple 00) pour vérification. Cela crée l'erreur 500 immédiatement. Pour info cette erreur ne donne aucune info supplémentaire."Erreur interne - Erreur 500
La page demandée a provoqué une erreur interne
Il s'agit d'une erreur liée soit à votre code, soit aux redirections (.htaccess) du site hébergé."
Je suis embêté car je souhaitais vraiment que le PDF se crée directement dans la fenêtre du logiciel PDF (plus simple d'utilisation pour la personne à qui ça s'adresse !). Avez-vous une idée de ce qui peut créer ce problème ?
Merci d'avance pour votre aide !
Ca y est, tout est résolu ! Ce n'est peut-être pas très propre, mais ça marche :
on est allé cherché dans fpdf la fonction output qui marchait bien, et on a extrait la partie traitant l'argument 'D' pour l'intégrer dans tcpdf à la place de la même partie.
Ca donne après la ligne 6136 de tcpdf.php :
Initialement :
// Download PDF as file
if (ob_get_contents()) {
$this->Error('Some data has already been output, can\'t send PDF file');
}
header('Content-Description: File Transfer');
if (headers_sent()) {
$this->Error('Some data has already been output to browser, can\'t send PDF file');
}
header('Cache-Control: public, must-revalidate, max-age=0'); // HTTP/1.1
header('Pragma: public');
header('Expires: Sat, 26 Jul 1997 05:00:00 GMT'); // Date in the past
header('Last-Modified: '.gmdate('D, d M Y H:i:s').' GMT');
// force download dialog
header('Content-Type: application/force-download');
header('Content-Type: application/octet-stream', false);
header('Content-Type: application/download', false);
header('Content-Type: application/pdf', false);
// use the Content-Disposition header to supply a recommended filename
header('Content-Disposition: attachment; filename="'.basename($name).'";');
header('Content-Transfer-Encoding: binary');
header('Content-Length: '.$this->bufferlen);
echo $this->getBuffer();
break;
Remplacé par :
//Download file
if(ob_get_length())
$this->Error('Some data has already been output, can\'t send PDF file');
header('Content-Type: application/x-download');
if(headers_sent())
$this->Error('Some data has already been output, can\'t send PDF file');
header('Content-Length: '.strlen($this->buffer));
header('Content-Disposition: attachment; filename="'.$name.'"');
header('Cache-Control: private, max-age=0, must-revalidate');
header('Pragma: public');
ini_set('zlib.output_compression','0');
echo $this->buffer;
break;
Si vous avez d'autres suggestions...
Encore merci à spipu pour son super travail.
akene Le 25/10/2012 à 12:53 Bonjour,
Je fais remonter ce sujet car il m'a permis de comprendre l'origine de l'erreur, mais malheureusement, mon problème n'est pas résolu.
J'ai une application php dans laquelle des associations (50) remplissent des fiches de demande subvention. Nous exportons ces fiches en pdf, soit une par une pour faire une copie de la fiche, soit une fois la période des demandes écoulées par association.
Par exemple, l'association x a créé 5 fiches, nous exportons 6 feuilles pdf (il y a une qui synthétise la demande) via html2pdf et nous zippons le tout. Depuis cette année, alors même que l'année dernière cela a fonctionné, nous avons quasiment systématiquement une erreur 500. Je dis bien quasiment, car là ou ça devient occulte, c'est que lorsqu'il n'y a pas beaucoup de fiches (maximum 2) parfois ça marche, et parfois ça donne une erreur 500. Pour les associations qui remplissent plus de fiches (max 7 cette année) ça ne marche jamais.
J'ai longtemps cru que cela venait de l'hébergeur avec qui nous avons fait des recherches (ovh en mutualisé) et puis j'ai fini par faire un test sur un mutu chez 1&1 et le verdict est le même. Pour couronner le tout, en local, cela marche systématiquement !
Voici les paramétrages :
chez ovh :
php 5.2.17
max_execution_time : 120s
memorylimit : 128M
en local :
php 5.3.5
max_execution_time :120s
memorylimit : 128M
Je précise que j'ai aussi testé chez ovh avec php en 5.3.16 ou php 5.4 et que j'ai toujours la même erreur.
Bref, (désolé d'être long, mais ça peu peut être nous aider), je tombe sur ce post et effectivement lorsque je n'ai pas $export->Output($output, 'F') je n'ai pas l'erreur. Mais si je mets D, j'ai un seul fichier pdf qui est créé et le code s'arrête puisqu'il me propose de télécharger le fichier. Mais moi je voudrais bien que ça créé mes fiches sur le serveur pour ensuite pouvoir faire un zip.
Je dois donc être à peu près dans le même cas que le shweb75 mais moi avec 'F'.
Au secours, je ne sais plus quoi faire et j'ai vraiment besoin que ça fonctionne !
Merci de m'avoir lu jusque là et pour votre aide !
Spipu Le 25/10/2012 à 13:36 pour la version de PHP, il faut préciser 32b ou 64b. car les adresses mémoire sont 2x plus longues en 64b. Donc si par exemple t'as mis 128Mo sur un 32b en local, il faudra mettre 256Mo sur le serveur si il est en 64b