4 votes

PHP Attendre la création d'un PDF et l'envoyer par mail ?

J'ai écrit ce script qui envoie au client un reçu de sa commande, mais il y a un problème :

Il n'attendra pas le script PDF.

Il requiert donc simplement le PDF script, commence à l'exécuter et envoie le courrier pendant que le PDF script travaille encore sur le PDF. Je suis sûr qu'il existe un moyen de retarder l'envoi de l'email script, mais pour compliquer les choses :

L'ensemble du fichier order.php est exécuté avec un appel ajax de jquery, et le script attend que le fichier php se termine, puis signale au navigateur que la demande a abouti. La commande peut donc attendre plus de cinq minutes, tandis que le client se demande pourquoi cela prend autant de temps.

J'ai donc besoin qu'il attende que le PDF soit créé et qu'il envoie ensuite le courrier, mais il ne doit pas laisser le client dans l'expectative.

Voici mon code :

<?php 
    $addid = "orderid.txt";
    $current = file_get_contents($addid) + 1;
    echo $current;
    file_put_contents($addid, $current);
?>
<?php
// Lue tilauksen ID sähköpostia varten
$orderid = "orderid.txt";
$ordernumber = file_get_contents($orderid);

// Kirjoita kuitti
require('receipt.php');
?>
<?php   
//Lähetä tilausvahvistus
require_once('mail/class.phpmailer.php');
$path = "kuitit/kuitti".$orderid.".pdf";
$bodytext = '
Olemme vastaanottaneet tilauksenne '. $ordernumber .'. 
Tilaamanne tuotteet löytyvät liitteestä.'
  ;
$email = new PHPMailer();
$email->From      = 'no-reply@coverlinefilms.fi';
$email->FromName  = 'no-reply@coverlinefilms.fi';
$email->Subject   = 'Olemme vastaanottaneet tilauksenne ' . $ordernumber;
$email->Body      = $bodytext;
$email->AddAddress('christian.nikkanen@gmail.com');
$email->AddAttachment($path, 'kuitti777.pdf');
return $email->Send();

?>

PDF script

0voto

Napolux Points 3153

Dans votre cas (et dans la plupart des activités à forte intensité de CPU), j'utilise généralement une file d'attente avec deux cronjobs Le premier cronjob génère les fichiers pdf et les marque comme étant prêts dans une table de la base de données. Le second cronjob interrogera la base de données pour vérifier si un pdf est "prêt" et enverra ensuite l'email avec la pièce jointe.

Dans le meilleur des cas, la file d'attente est vide : tous les reçus sont envoyés dès qu'ils sont prêts. Dans le pire des cas, le système envoie tous les courriels jusqu'à ce que la file d'attente des PDF soit vide.

J'espère que cette approche est claire. Vous pouvez trouver quelques références sur les démons PHP (IMHO une meilleure façon de gérer les tâches qu'un script PHP normal). aquí .

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X