J'utilise FDPF pour générer des factures pour les clients, qui sont ensuite jointes à un e-mail et envoyées au client. Les factures/emails sont générés dans un lot (plusieurs centaines à la fois). Lors de la première exécution réelle du lot, une poignée (environ 5 sur 200) des clients ont reçu des fichiers PDF corrompus. Le lien commun entre eux était qu'ils avaient des factures plus importantes que la moyenne, ce qui me porte à croire que le temps nécessaire pour générer la facture cause une condition de concurrence et peut-être que l'e-mail est envoyé avant que le PDF ait fini de générer complètement. Existe-t-il un moyen de valider que le PDF n'est pas corrompu avant d'envoyer l'e-mail? Ou y a-t-il une autre façon d'aborder le problème que je néglige?Validation d'un PDF avant d'envoyer une pièce jointe par e-mail
Répondre
Vous pouvez tester si le pdf est entièrement généré en créant un hachage md5 pour le pdf au moment où le fichier est envoyé pour la première fois, puis à nouveau pendant l'envoi de l'e-mail et enfin après l'envoi. Si le md5 change à chaque fois, le fichier est toujours créé par le générateur PDF pendant l'envoi de l'e-mail.
Voici un exemple sur la façon d'utiliser md5:
<?php
$file_name = 'md5_demonstration_file';
$file_changer = 0;
while($file_changer < 10)
{
file_put_contents($file_name, $file_changer);
echo md5_file ($file_name) . '</br>';
$file_changer++;
}
?>
Vous remarquerez que les modifications de hachage md5 à chaque itération de la fonction car le fichier est en cours d'écriture. Si vous essayez cet exemple de code, vous devrez peut-être définir manuellement les permissions sur 'md5_demonstration_file' afin que tout le monde puisse y écrire.
Si la condition de course est pas le problème que vous avez lu cette discussion SO suggéré: Corrupt PDF email attachment when generated by FPDF and PHP
Soyez conscient que la dernière version du lecteur Acrobat est fussier sur les fichiers de lecture qui ne se conforment pas exactement à la bonne pdf format.
Le début d'un document PDF est indiqué par la chaîne% PDF. Les anciennes versions d'Acrobat ignorent le contenu du fichier survenant avant le marqueur% PDF. Par exemple, vous pourriez avoir laissé une sortie de débogage dans le fichier, comme suit:
debug line 1
debug line 2
%PDF-1.4
3 0 obj
<</Type /Page
etc.
et Acrobat ouvrirait que ok, (comme on prévisualisation sur Mac OS X).
Acrobat n'acceptera plus cela.
Je me suis fait mordre par ça, alors j'espère que ça aidera!
Comment générez-vous cela? On dirait que vous devriez être en mesure de tester rapidement votre hypothèse en générant manuellement un fichier PDF volumineux. – Alex
Lorsque je les génère un à la fois, ils fonctionnent bien. Je peux faire le même lot mais avec des e-mails qui vont à ma propre adresse, donc je peux voir ce qui se passe et bricoler de cette façon. – Matthew