2010-11-12 15 views
0

J'utilise pdftk pour concaténer des fichiers PDF à la volée en faisant un exec() appeler comme ceci:PDFTK appelé via exec() échoue silencieusement

exec("/path/to/pdftk /path/to/file1.pdf /path/to/file2.pdf cat output path/to/output.pdf", $execoutput); 

Tout cela fonctionne parfaitement dans un environnement Linux, mais lorsqu'il est exécuté localement sur nos environnements de développement (un mélange de Windows/Uniform Server et OSX/MAMP) cela semble échouer silencieusement. $ execoutput est un tableau vide.

Si la commande envoyée à exec() est copiée et collée sur la ligne de commande dans Windows ou OSX, elle a la sortie souhaitée et le fichier concaténé est généré. Chaque machine de développement a pdftk installé et il peut être démontré qu'il est entièrement fonctionnel à partir de la ligne de commande.

Cela me fait actuellement perplexe. Je n'arrive pas à expliquer pourquoi cela se produit.

Répondre

5

J'ai finalement compris ce qui se passait. Comme un noob, j'avais supposé que chaque machine fonctionnait avec la dernière version de pdftk. Ils n'étaient pas.

Il semblerait que le problème décrit ci-dessus se rapporte à un bug connu qui a été corrigé dans la version 1.43

De http://www.pdflabs.com/docs/pdftk-version-history/

« Effacer le masque de signal comme solution de contournement pour les environnements désactiver les signaux Avant d'appeler pdftk, ce problème est connu pour bloquer pdftk dans certaines configurations web Python ainsi que dans PHP. "

Devinez qui était la configuration que pour exécuter une version> = 1,43 ;-)

Mise à jour chaque environnement de développement à la dernière version de pdftk (actuellement 1,44) a résolu le problème

1

Cette peut également se produire si pdftk n'a pas l'autorisation d'ajouter la sortie dans le dossier désiré. Vous pouvez voir cela se produire si vous imprimez le $ execoutput (avec 'verbose' dans la commande) et voyez que la dernière entrée sera 'Creating Output'. La ligne suivante devrait indiquer que la sortie est en cours d'exécution, mais elle se terminera juste là. Cela m'a eu pendant un certain temps (comme cela fonctionne si vous exécutez directement sur la ligne de commande).