2010-09-17 23 views
1

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

+0

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

+0

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

Répondre

0

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

0

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!