Imagick php exec()

Bonjour à tous,

Je tente actuellement d’utiliser la commande Imagemagick via un script bash.

echo début
convert test.svg test.pdf
ls

Ce script fonctionne parfaitement lorsqu’il est lancé depuis le shell.
mais lorsque je le lance depuis php:

exec('sh script', $tab);
print_r($tab);

$tab affiche bien la commande ls mais aucun fichier pdf n’est créer…
La commande semble ne pas s’éxécuter et je n’ai aucun message d’erreur…

J’ai mis les droits des 2 fichiers en rwx pour tout le monde et mon bash est bien dans le même dossier que le php

Parcontre lorsque depuis le shell je tape:

La commande convert est bien exécuté et le fichier pdf créer
Est-ce que quelqu’un peux m’aider svp ?

Merci bien
++

Imagemagick ne doit pas être installé au même endroit que les coreutils (ls & co). Le contexte d’exécution php ne les trouve pas car son “PATH” n’a pas de référence au dossier binaire où se trouve “convert”

A toi de mettre le chemin complet dans exec ou bien de faire en sorte que le PATH du contexte d’exécution “php” le connaisse.

note : si ça marche en shell, c’est parce que ta variable PATH connait le chemin où se trouve “convert”.

Bonsoir et merci de ton aide.

La commande convert semble se trouver dans /usr/bin/

Lorsque j’affiche le $PATH depuis php, ce dossier est bien présent
et lorsque je met le chemin absolu dans le script php, rien ne se passe non plus

Remplace ton script par ceci :

[code]
#!/bin/sh
set -x
exec 2>~/tracephp.log

echo début
convert test.svg test.pdf
ls[/code]

Ainsi, tu auras tous les messages de trace et d’erreur de ton script dans le fichier <dossier_home_php>/tracephp.log
edit : je suppute que convert ne trouve pas test.svg

Qu’y a-t-il dans le error.log sous /var/log/apache2?

Voici les résultats des différents test:

Avec ce script lancé depuis le web:

#!/bin/sh
set -x
exec 2>~/tracephp.log

error.log affiche ceci:
script: 3: cannot create tracephp.log: Permission denied

  • exec

depuis le shell, forcément ca fonctionne bien donc pas d’erreur.

Par contre si j’enlève ce bout de code et que je lance le php.

error.log:
convert: unable to open image test.pdf': \?t? @ error/blob.c/OpenBlob/2489. convert: unable to open imagetest.pdf’: ?o? ? ? ?? ?o?8>? @ error/blob.c/OpenBlob/2489.

Tracephp.log ne pouvant pas être créer par le script php, j’ai pensé que c’était le même problème pour le pdf…

Et la !!, je me suis souvenu que j’avait déplacé le site de /var/www/ vers /home/user/www/
Donc forcement www-data n’avait pas les droits en écriture sur le dossier…

Par contre est t’il correct de donner au dossier www tout les droit pour que www-data puisse écrire dedans ?
ou y’a t’il une autre méthode plus correct ?

Quoi qu’il en soit, Merci beaucoup à vous 2, vous m’avez bien éclrairé !! :smiley:

Met le dossier sur le groupe www-data et fais un chmod 775 de ce dossier.

Ok merci je vais regarder ça !

++