Bonjour,
Voila je rencontre un petit problème avec mon code.
j'ai développé mon application pour la gestion de stock avec cakephp 3.6 en local tout fonctionne bien je génère bien mes factures. Mais en ligne j'ai un soucis je n'arrive plus à générer les pdf. Lorsque je lance la génération mon code foire parceque je n'ai pas les droits sur un répertoire que je ne sais pass. Mais si je donnes les droits 777 à la racine de mon projet tout fonctionne mais après actualisation de la page j'ai une érreur 500 sauf si je remet les droits 755 pour avoir le site encore visible
dans mon layout default j'ai ceci
<?php
// inclusion de la librairie TCPDF
// require_once ROOT . DS . 'vendor' . DS . 'tecnick.com' . DS . 'tcpdf' . DS . 'tcpdf.php';
// namespace App\lib\tcpdf;
header("Content-type: application/pdf");
require_once APP . 'Lib'. DS . 'tcpdf' . DS . 'tcpdf.php';
// Création d'un document TCPDF avec les variables par défaut
$pdf = new TCPDF('L', 'mm', PDF_PAGE_FORMAT, TRUE, 'UTF-8', FALSE);
// Spécification de certains paramètres de TCPDF (içi on spécifie l'auteur par défaut)
$pdf->SetCreator(PDF_CREATOR);
// On enlève l'entête et le pied de page
$pdf->setPrintHeader(FALSE);
$pdf->setPrintFooter(FALSE);
// On spécifie la fonte par défaut
$pdf->SetDefaultMonospacedFont(PDF_FONT_MONOSPACED);
$pdf->SetMargins(PDF_MARGIN_LEFT, PDF_MARGIN_TOP, PDF_MARGIN_RIGHT);
// On définit les marges
$pdf->SetMargins(1, 2, 2,1);
$pdf->SetHeaderMargin(PDF_MARGIN_HEADER);
$pdf->setHeaderFont(Array(PDF_FONT_NAME_MAIN, '', PDF_FONT_SIZE_MAIN));
$pdf->setFooterFont(Array(PDF_FONT_NAME_DATA, '', PDF_FONT_SIZE_DATA));
//$pdf->SetFooterMargin(1);
// On indique que le dépassement d'une page entraine automatiquement la création d'un saut de page et d'une nouvelle page
$pdf->SetAutoPageBreak(TRUE, 5);
// ---------------------------------------------------------
// La fonte et la couleur à utiliser dans la page qui va être créée
$pdf->SetFont('times', '', 10);
$pdf->setColor('text', 0, 0, 0);
// On ajoute une page
$pdf->AddPage('L', 'A5');
// voilà l'astuce, on récupère la vue HTML créée par CakePHP pour alimenter notre fichier PDF
$pdf->writeHTML($this->fetch('content'), TRUE, FALSE, TRUE, FALSE, '');
// on ferme la page
$pdf->lastPage();
// On indique à TCPDF que le fichier doit être enregistré sur le serveur ($filename étant une variable que vous aurez pris soin de définir dans l'action de votre controller)
echo $pdf->Output('impression.pdf', 'I');
?>
dans ma vue j'ai ceci:
<style type="text/css">
<!--
h1 {color: #000033}
h2 {color: #000055}
h3 {color: #000077}
-->
</style>
<table style="width: 100%;">
<tr>
<td style="text-align: left; width: 25%">
</td>
<td style="text-align: center; width: 50%">
<?php echo '<img src="'. WWW_ROOT . 'img' . DS . 'facture.png' .'" width="0%" height="50"/>';?>
</td>
<td style="text-align: right; width: 25%">
</td>
</tr>
</table>
<table style="width: 100%;">
<tr>
<td style="text-align: left; width: 33%"><h4><?=$this->request->Session()->read('Auth.User.entreprise.nom');?></h4>
<h6 class="mn">Agence de <?= $agence->nom_agence; ?>, Ville:
<?= $agence->ville; ?><br/> <b class="text-primary">RC: <?=$this->request->Session()->read('Auth.User.entreprise.num_rc');?></b>
</h6>
</td>
<td style="text-align: center; width: 34%">
</td>
<td style="text-align: right; width: 33%">
<i><?php echo $coli->created->i18nFormat([\IntlDateFormatter::FULL, \IntlDateFormatter::SHORT]); ?></i>
<h6> Service courrier <?= $agence->ville; ?> <b><?= $agence->phone; ?></b><br/>
Service courier <?= $coli->agence->ville; ?> <b><?= $coli->agence->phone; ?></b>
</h6>
</td>
</tr>
</table>
<table style="width: 100%;">
<tr>
<td style="text-align: left; width: 10%"></td>
<td style="text-align: center; width: 80%"><h5> BON D'EXPEDITION DE COLIS - <?= $coli->type_payement; ?></h5></td>
<td style="text-align: right; width: 10%"></td>
</tr>
</table>
<table style="width: 100%; ">
<tr>
<td style="text-align: left; width: 38%; vertical-align: text-top;">
<br><br> <br><br>
<table style="font-weight: bold; ">
<tr>
<td>N de fiche</td>
<td ><?= $coli->code_colis; ?></td>
</tr>
<tr>
<td>Agence de départ:</td>
<td><?= $agence->nom_agence; ?></td>
</tr>
<tr>
<td>Agence de destination</td>
<td><?= $coli->agence->nom_agence; ?></td>
</tr>
<tr>
<td>Valeur du colis</td>
<td><?= $coli->valeur; ?></td>
</tr>
<tr>
<td>Nom de l'expéditeur</td>
<td><?= wordwrap($coli->nom_expediteur,15,"<br/>\n",true); ?></td>
</tr>
<tr>
<td>Adresse/Téléphone</td>
<td><?= $coli->residence_expediteur; ?>/<?= $coli->telephone_expediteur; ?></td>
</tr>
<tr>
<td>Nom du destinataire</td>
<td><?= wordwrap($coli->nom_destinataire,15,"<br/>\n",true); ?></td>
</tr>
<tr>
<td>Adresse/Téléphone</td>
<td><?= $coli->agence->ville; ?>/<?= $coli->telephone_destinataire; ?></td>
</tr>
<tr>
<td>Frais d'envoi</td>
<td><?= $coli->frais; ?> FCFA</td>
</tr>
</table>
</td>
<td style="text-align: center; width: 2%;vertical-align: text-top;"></td>
<td style="text-align: left; width: 60%; vertical-align: text-top; font-size: 8px;">
<p>
<h4 style="text-align: center;">Mise en garde<br/></h4>
Nous vous prions de bien vouloir déclarer la nature de votre colis. Exigez un reçu informatisé pour toutes vos expéditions. Nous ne sommes pas responsables des expéditions non enregistrées. <br/>Nous n’expédions pas les produits frauduleux ou dangereux tels que les carburants ou la drogue, etc. La mention(1) dans une zone de valeur du colis signifie que le client refuse de déclarer la valeur de son colis.
<br/>En cas de perte ou de détérioration du colis par la faute de Princesse Voyages, Nous vous rembourserons cinq(05) fois la valeur des frais d’expéditions payés.
<br/>Nous vous prions de bien vouloir informer votre correspondant du délai de retrait qui est de 48 heures à compter de son arrivée à destination. Apres cela, il encourt une pénalité de 500f/jour. Passé une semaine, nous ne sommes plus responsables de la perte ou de la détérioration.
</p>
</td>
</tr><br/>
<tr>
<td style="text-align: left; font-size: 10px; width:110px; vertical-align: text-top; font-weight: bold;" colspan="2">
Nature du colis
</td>
<td style="text-align: left; overflow: hidden;width: 80%;"><?= $coli->nature; ?>
</td>
</tr>
</table>
<table style="width: 100%;">
<tr>
<td style="text-align: left; width: 1%"></td>
<td style="text-align: center; width: 98%; font-size: 8px;"><i> Nous vous remercions d'avoir choisi Princesse Voyages pour votre expéditions. Notre soucis majeur est votre satisfaction.</i></td>
<td style="text-align: right; width: 1%"></td>
</tr>
</table>
<table style="width: 100%;font-size: 7px;">
<tr>
<td style="text-align: left; width: 30%; ">
<strong >Visa de l'agent</strong>
<p >
<?= $coli->user->nom . "-" . $coli->user->prenom; ?>
</p>
</td>
<td style="text-align: center; width: 40%;">
<strong>Visa du client</strong>
<p><?= $coli->nom_expediteur; ?></p>
</td>
<td style="text-align: right; width: 30%;">
<strong >Visa du chef d'agence</strong>
<p ></p>
</td>
</tr>
</table>
et dans mon controlleur j'ai ceci
public function facturePdf($slug = null)
{
$this->response->type('application/pdf');
$colis = TableRegistry::get('Administration.Colis');
$agences = TableRegistry::get('Administration.Agences');
$coli = $colis->find()->contain(['Users'=>function($user){
return $user->select(['nom','prenom']);
},'Agences'=>function($agenc){
return $agenc->select(['nom_agence','phone','ville']);
}])->where(['Colis.slug'=>$slug])->first();
if(is_null($coli))
{
$this->Flash->error(__('Impossible de trouver ce colis. Veuillez recommencer'));
return $this->redirect(['plugin'=>'Administration','action' => 'index']);
}
$agence = $agences->find()->select(['nom_agence','phone','ville','id'])
->where(['id'=>$coli->agence_id1,'Agences.etat'=>1])->first();
$this->set(compact('coli','agence'));
}
en local l'impression n'a pas de problème mais en ligne lors de la génération je n'ai plus de permission sur les repertoires la je ne sais de quel repertoire je dois changer la permission
pouvoir autoriser l'execution de mon script d'impression
pas d'access
Ca doit venir de l'endroit où tu enregistres le PDF. Essaie de le mettre dans un dossier et de passer ce dossier en 777
Bonjour je viens de créer un repertoire factures à la racine du projet pour le stockage des pdf j'ai ajouté la permission 777 mais toujours rien
<?php
// inclusion de la librairie TCPDF
// require_once ROOT . DS . 'vendor' . DS . 'tecnick.com' . DS . 'tcpdf' . DS . 'tcpdf.php';
// namespace App\lib\tcpdf;
header("Content-type: application/pdf");
require_once APP . 'Lib'. DS . 'tcpdf' . DS . 'tcpdf.php';
// Création d'un document TCPDF avec les variables par défaut
$pdf = new TCPDF('L', 'mm', PDF_PAGE_FORMAT, TRUE, 'UTF-8', FALSE);
// Spécification de certains paramètres de TCPDF (içi on spécifie l'auteur par défaut)
$pdf->SetCreator(PDF_CREATOR);
// On enlève l'entête et le pied de page
$pdf->setPrintHeader(FALSE);
$pdf->setPrintFooter(FALSE);
// On spécifie la fonte par défaut
$pdf->SetDefaultMonospacedFont(PDF_FONT_MONOSPACED);
$pdf->SetMargins(PDF_MARGIN_LEFT, PDF_MARGIN_TOP, PDF_MARGIN_RIGHT);
// On définit les marges
$pdf->SetMargins(1, 2, 2,1);
$pdf->SetHeaderMargin(PDF_MARGIN_HEADER);
$pdf->setHeaderFont(Array(PDF_FONT_NAME_MAIN, '', PDF_FONT_SIZE_MAIN));
$pdf->setFooterFont(Array(PDF_FONT_NAME_DATA, '', PDF_FONT_SIZE_DATA));
//$pdf->SetFooterMargin(1);
// On indique que le dépassement d'une page entraine automatiquement la création d'un saut de page et d'une nouvelle page
$pdf->SetAutoPageBreak(TRUE, 5);
// ---------------------------------------------------------
// La fonte et la couleur à utiliser dans la page qui va être créée
$pdf->SetFont('times', '', 10);
$pdf->setColor('text', 0, 0, 0);
// On ajoute une page
$pdf->AddPage('L', 'A5');
// voilà l'astuce, on récupère la vue HTML créée par CakePHP pour alimenter notre fichier PDF
$pdf->writeHTML($this->fetch('content'), TRUE, FALSE, TRUE, FALSE, '');
// on ferme la page
$pdf->lastPage();
// On indique à TCPDF que le fichier doit être enregistré sur le serveur ($filename étant une variable que vous aurez pris soin de définir dans l'action de votre controller)
echo $pdf->Output(APP . "factures" . DS .'impression.pdf', 'DI');
?>