Générer un fichier PDF - PHP  

Forum > PHP > Générer un fichier PDF

Générer un fichier PDF

ok Le problème posé sur ce sujet a été résolu.
Membre
# Le 29/10/2012 à 21h48
Voila j'aimerai générer un fichier pdf à partir d'éléments de ma base de données. Pour cela j'utilise la class phpToPDF.
Le souci est que quand je lance la page j'ai cette erreur :
"Fatal error: Allowed memory size of 134217728 bytes exhausted (tried to allocate 27 bytes) in C:wampwwwPage Persoarticletopdf.php on line 96"
J'ai donc ajouté ceci pour rajouté de la mémoire "@ini_set('memory_limit', '16M'); ", mais cela ne fonctionne toujours pas et donne la même erreur.
  1. <?php
  2. session_start(); // On démarre la session AVANT toute chose
  3. if (isset($_GET["nom"])) {
  4. ob_end_clean();
  5. @ini_set('memory_limit', '16M');
  6. include_once('fpdf.php') ;
  7. include_once('phpToPDF.php') ;
  8. //on initialise les données entete et pied de page
  9. $_SESSION['entete']="NON" ;
  10. $_SESSION['orientation']="C" ; //classique
  11.  
  12. $proprieteHeader = array(
  13. 'T_COLOR' => array(0,0,0),
  14. 'T_SIZE' => 11,
  15. 'T_FONT' => 'Arial',
  16. 'T_ALIGN_COL0' => 'L',
  17. 'T_ALIGN' => 'C',
  18. 'V_ALIGN' => 'T',
  19. 'T_TYPE' => 'N',
  20. 'LN_SIZE' => 5,
  21. 'BG_COLOR_COL0' => array(255, 255, 255),
  22. 'BG_COLOR' => array(255, 255, 255),
  23. 'BRD_COLOR' => array(0,0,0),
  24. 'BRD_SIZE' => 0.1,
  25. 'BRD_TYPE' => 1,
  26. 'BRD_TYPE_NEW_PAGE' => '',
  27. );
  28.  
  29. // Définition des propriétés du reste du contenu du tableau.
  30. $proprieteContenu = array(
  31. 'T_COLOR' => array(0,0,0),
  32. 'T_SIZE' => 11,
  33. 'T_FONT' => 'Arial',
  34. 'T_ALIGN_COL0' => 'L',
  35. 'T_ALIGN' => 'R',
  36. 'V_ALIGN' => 'M',
  37. 'T_TYPE' => '',
  38. 'LN_SIZE' => 6,
  39. 'BG_COLOR_COL0' => array(255, 255, 255),
  40. 'BG_COLOR' => array(255,255,255),
  41. 'BRD_COLOR' => array(0,0,0),
  42. 'BRD_SIZE' => 0.1,
  43. 'BRD_TYPE' => '1',
  44. 'BRD_TYPE_NEW_PAGE' => '',
  45. );
  46.  
  47. // Définition des propriétés du tableau.
  48. $proprietesTableau = array(
  49. 'BRD_COLOR' => array(0,0,0),
  50. 'BRD_SIZE' => '0.1',
  51. 'TB_ALIGN' => 'C',
  52. 'L_MARGIN' => 0,
  53. );
  54.  
  55.  
  56. $pdf=new phpToPDF();
  57.  
  58.  
  59.  
  60. // Contenu du header du tableau.
  61. $contenuHeader = array() ;
  62. $contenuTableau=array();
  63.  
  64. $numCellEntete=0;
  65. $contenuHeader[$numCellEntete++]=30 ; //largeur colonne Groupe
  66. $contenuHeader[$numCellEntete++]=30 ; //largeur colonne élève
  67. $contenuHeader[$numCellEntete++]=30 ; //largeur colonne vide pour annotations
  68. $contenuHeader[$numCellEntete++]='[C] Nom' ; //contenu colonne Groupe
  69. $contenuHeader[$numCellEntete++]='[C] Presentation' ; //contenu colonne élève
  70. $contenuHeader[$numCellEntete++]='[C] doc_val' ; //contenu colonne vide
  71.  
  72.  
  73. $pdf->SetMargins(5,5,0);
  74. $pdf->SetAutoPageBreak(true,10);
  75. $pdf->startPageNums();
  76. $pdf->AliasNbPages();
  77.  
  78. // Contenu du tableau.
  79. $numCellDetail=0 ;
  80.  
  81. // on se connecte à notre base
  82. $base = mysql_connect ('localhost', 'root', '');
  83. mysql_select_db ('projet', $base) ;
  84.  
  85. //recherche des groupes
  86. $sql = 'SELECT nom, doc_val, Projet_fini, presentation FROM projets WHERE nom="'.$_GET['nom'].'"';
  87. $exec=mysql_query($sql);
  88. $ligne=mysql_fetch_array($exec) ;
  89. while ($ligne)
  90. {
  91.  
  92. //formatage d'une ligne : le groupe n'est affiché que sur la première ligne
  93. //colonne nom du groupe : alignement à gauche
  94. $contenuTableau[$numCellDetail++]="[L] ".$ligne['nom'] ;
  95. //colonne nom du groupe : alignement à gauche
  96. $contenuTableau[$numCellDetail++]="[L] ".$ligne['presentation'] ;
  97. //colonne annotations personnelles
  98. $contenuTableau[$numCellDetail++]="[L] ".$ligne['doc_val'] ;
  99. }
  100. $pdf->AddPage();
  101. $pdf->drawTableau($pdf, $proprietesTableau, $proprieteHeader, $contenuHeader, $proprieteContenu, $contenuTableau);
  102. $pdf->Output();
  103. }
  104.  
  105. ?>
  106.  
avatar de Tony_
Administrateur
# Le 30/10/2012 à 08h17
Bonjour.
Le message d'erreur indique que l'allocation mémoire de 134.217.728 bytes (soit: 134MB) ne suffit pas. C'est déjà énorme ! C'est largement suffisant pour afficher un PDF, donc le problème viens surement d'autre chose.
Personnellement, je pense que tu a un problème de boucle infinie quelque part dans ton code.

En regardant le code, je pense que le soucis viens de la ligne 89 Pour utiliser la fonction mysql_fetch_array(), il faut plutôt faire un code qui ressemble à ceci :
  1. while ($row = mysql_fetch_array($result, MYSQL_NUM)) {
  2. printf("ID : %s Nom : %s", $row[0], $row[1]);
  3. }


J'espère que ça résoudra le problème.
Bon courage.
N'hésitez pas à consulter le dossier référencement. smiley
Sinon hors internet je suis développeur web PHP.
Membre
# Le 31/10/2012 à 00h20
Merci à vous, c'était bien la boucle qui posé problème.