2010-07-28 5 views
1

Je compile actuellement une classe en PHP qui génère des documents PDF en utilisant l'application de ligne de commande WKHTMLTOPDF. Pour ce faire, j'utilise un appel à shell_exec pour appeler l'exécutable WKHTMLTOPDF. Cependant, cet appel particulier ne semble pas être exécuté; il renvoie NULL presque instantanément.shell_exec() en PHP n'exécute pas ma commande spécifique

Un petit test je l'ai fait m'a donné les résultats suivants:

var_dump(shell_exec('ping nu.nl')); 
// This prints a string, containting the expected output of the ping command 
var_dump(shell_exec('"c:/wkhtmltopdf/wkhtmltopdf.exe" --orientation "Landscape" --page-size "A2" --margin-top "25mm" --margin-left "20mm" --margin-bottom "20mm" --margin-right "20mm" "http://www.nu.nl/" "C:/Temp/1280310218.pdf"')); 
// This prints NULL 

Ainsi, shell_exec() semble fonctionner, aussi safe_mode est désactivé, et coller la commande complète dans cmd.exe ne exécutez la commande correctement.

Si le problème ne se trouve pas dans l'un des cas ci-dessus (mode sans échec, commande erronée ou shell_exec() lui-même), que peut-il être d'autre? Tout ce que je peux penser est un problème de droits d'utilisateur, mais à la fois l'exécutable et le répertoire dans lequel il se trouve ont des paramètres d'accès complet pour chaque groupe d'utilisateurs sur mon système. (Note: Bien que je développe sur une machine Windows, ce code fonctionnera sur un serveur Linux en production.Par conséquent, les solutions Windows seulement ne sont pas ce que je cherche, à moins bien sûr que ce problème tourne lui-même out être lié à Windows)

+0

Avez-vous essayé d'écrire 'manuellement' dans 'c:/temp /' pour vous assurer que le propriétaire du processus php a le droit d'y écrire? –

+0

@Dennis Haarbrink: Juste testé cela, et cela fonctionne parfaitement. Mais même si ce n'était pas le cas, je m'attendrais à voir cela dans la chaîne de résultats retournée par 'shell_exec()', puisque WKHTMLTOPDF m'avertit si les fichiers ne sont pas lisibles/inscriptibles. – Duroth

Répondre

0

Vérifiez les autorisations en créant un fichier à l'aide de fopen() dans temp dir. Crée-t-il un fichier PDF? Peut-être que ce programme ne sort pas à stdout, mais stderr même que ffmpeg par exemple. Essayez d'ajouter "2> & 1" après votre commande.

Ou, ce logiciel utilise certains fichiers dans le répertoire où est installé. Essayez d'abord changer de répertoire en ajoutant quelque chose comme "cd c: \ wkhtmltopdf; YOUR_COMMAND"

+0

Votre première suggestion a fait l'affaire; Apparemment, les guillemets autour de la commande à exécuter ('" c: /wkhtmltopdf/wkhtmltopdf.exe ") ne sont pas autorisés, et cette erreur était en effet stockée dans stderr. Et pour penser que j'ai seulement ajouté ces citations parce que l'application a été installée dans 'Program Files /' en premier lieu! – Duroth

0

Vous pouvez utiliser une bibliothèque php pour cela, ce qui serait plus efficace et intégré. Il y a par exemple html2pdf.

+0

La raison pour laquelle j'ai choisi une application CLI, et non une bibliothèque PHP, c'est parce qu'aucun de ceux que j'ai vérifiés ne nous offre toutes les options dont nous avons besoin; FPDF, DOMPDF, TCPDF entre autres, tous manquaient d'une manière ou d'une autre. WKHTMLTOPDF est de loin la solution la meilleure et la plus complète. Si cela fonctionne, c'est. – Duroth

-1

supprimer ces paramètres variables d'environnement >>

"DYLD_LIBRARY_PATH="/Applications/MAMP/Library/lib:$DYLD_LIBRARY_PATH" 

#export DYLD_LIBRARY_PATH 

et cela devrait fonctionner.

+1

Pourriez-vous élaborer votre réponse sur pourquoi vous pensez que cela devrait fonctionner et comment cela correspond à la réponse, quels problèmes cela résout en supprimant ces paramètres variables d'environnement? – dbf

+0

il développe dans Win et va se déployer sur Linux donc pas de Mamp ici – Paolo