# Imagick php exec()

**URL:** <https://www.debian-fr.org/t/imagick-php-exec/34077>\
**Category:** Programmation\
**Created:** [Février 21, 2016, 3:31 UTC](https://www.debian-fr.org/t/imagick-php-exec/34077 "2016-02-21T03:31:25Z")\
**Posts on this page:** 8\
**Page:** 1

<div class="post-metadata">

**Author:** ![kyript](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/k/edb3f5/32.png) [@kyript](https://www.debian-fr.org/u/kyript)\
**Post date:** [Février 21, 2016, 3:31 UTC](https://www.debian-fr.org/t/imagick-php-exec/34077/1 "2016-02-21T03:31:25Z")

</div>

Bonjour à tous,

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

```auto
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:

```auto
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:

```auto

```

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

Merci bien  
++

---

<div class="post-metadata">

**Author:** ![Totor](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/t/58f4c7/32.png) [@Totor](https://www.debian-fr.org/u/Totor)\
**Post date:** [Février 21, 2016, 3:31 UTC](https://www.debian-fr.org/t/imagick-php-exec/34077/2 "2016-02-21T03:31:27Z")

</div>

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”.

---

<div class="post-metadata">

**Author:** ![kyript](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/k/edb3f5/32.png) [@kyript](https://www.debian-fr.org/u/kyript)\
**Post date:** [Février 21, 2016, 3:31 UTC](https://www.debian-fr.org/t/imagick-php-exec/34077/3 "2016-02-21T03:31:30Z")

</div>

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

---

<div class="post-metadata">

**Author:** ![Totor](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/t/58f4c7/32.png) [@Totor](https://www.debian-fr.org/u/Totor)\
**Post date:** [Février 21, 2016, 3:31 UTC](https://www.debian-fr.org/t/imagick-php-exec/34077/4 "2016-02-21T03:31:30Z")

</div>

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

---

<div class="post-metadata">

**Author:** ![fran.b](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/f/d78d45/32.png) [@fran.b](https://www.debian-fr.org/u/fran.b)\
**Post date:** [Février 21, 2016, 3:31 UTC](https://www.debian-fr.org/t/imagick-php-exec/34077/5 "2016-02-21T03:31:31Z")

</div>

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

---

<div class="post-metadata">

**Author:** ![kyript](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/k/edb3f5/32.png) [@kyript](https://www.debian-fr.org/u/kyript)\
**Post date:** [Février 21, 2016, 3:31 UTC](https://www.debian-fr.org/t/imagick-php-exec/34077/6 "2016-02-21T03:31:31Z")

</div>

Voici les résultats des différents test:

Avec ce script lancé depuis le web:

```auto
#!/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 image`test.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é !! 😃

---

<div class="post-metadata">

**Author:** ![fran.b](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/f/d78d45/32.png) [@fran.b](https://www.debian-fr.org/u/fran.b)\
**Post date:** [Février 21, 2016, 3:31 UTC](https://www.debian-fr.org/t/imagick-php-exec/34077/7 "2016-02-21T03:31:33Z")

</div>

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

---

<div class="post-metadata">

**Author:** ![kyript](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/k/edb3f5/32.png) [@kyript](https://www.debian-fr.org/u/kyript)\
**Post date:** [Février 21, 2016, 3:31 UTC](https://www.debian-fr.org/t/imagick-php-exec/34077/8 "2016-02-21T03:31:40Z")

</div>

Ok merci je vais regarder ça !

++
