# Accès a certains binaires impossible depuis apache sur mac



## pixman (25 Septembre 2008)

Bonjour,

J'ai installé MAMP sur mon mac ( léopard )
j'ai également installé la bibliothèque ImageMagick-6.4.3

Cette bibliothèque permet de traiter des images en ligne de commande.

Pour l'utiliser, je passe par un script PHP qui exécute une commande sur le shell.

J'ai un souci très étrange à l'exécution des tests :

Si avec PHP je passe une commande "ls" j'ai bien en retour le contenu du répertoire du script.

Si j'appelle mon binaire "convert" ( c'est lui qui permet de manipuler les images) ça ne marche pas.
Dans les logs apache je lit : " command not found"


J'ai déja effectué les essais suivant :

Réinstallation de ImageMagick ( via macPorts et à la main)
modification du groupe des binaires ImageMagick
modification du groupe des binaires Apache

Modification de PATH dans le fichier ~/.profile et /etc/profile

Le plus déroutant est que en ligne de commande directement dans le terminal ça fonctionne très bien !

Autre chose étrange : Si je fait un "locate convert" dans le terminal je trouve mon  binaire.
si je fait un "locate convert" via la commande "system" sous apache, je ne le trouve pas !

J'ai fait le test avec deux version de apache, PHP4 et PHP5

c'est comme si je ne pouvait pas utiliser ce programme !

J'ai fait la même install sur mon serveur fedora et je n'ai aucun soucis .

Merci pour votre aide


----------



## PA5CAL (25 Septembre 2008)

Bonsoir

"ls" n'est pas un programme, c'est seulement une commande interne du shell. Il est normal qu'on puisse toujours y accéder.

Le module PHP ne trouve pas le programme "convert" parce qu'il n'en connaît pas le chemin. L'affichage du PATH par un script PHP pourrait t'en convaincre. Il faut garder à l'esprit que lorsqu'un programme est exécuté au travers du serveur, il ne l'est pas au nom de l'utilisateur logué sur la session courante.

Il convient donc de paramétrer correctement le serveur afin de pouvoir atteindre le chemin du programme désiré.


----------



## pixman (25 Septembre 2008)

Bonjour,
j'ai bien remarqué que le Path qui est affiché dans mon PHPinfo ne contient pas de liaison vers les dossiers qui contiennent mon binaire et ses dépendances.

C'est pourquoi j'ai tenté de modifier le PATH directement dans les fichiers "profile". Mais cette manip n'intervient que dans le terminal.

Aurait tu des infos concernant la "configuration du serveur" ?

je n'ai rien trouvé dans mon PHP.ini ou dans la configuration de apache concernant le PATH.

J'ai bien sur désactivé le safe_mode de PHP.

Merci


----------



## pixman (26 Septembre 2008)

J'ai fait de nouveaux tests, et je confirme que le souci vient bien de ma variable PATH.

j'ai beau modifier toute la série de fichiers qui fonctionnent avec bash, rien ni fait le serveur ne veux pas aller voir ailleurs que dans les chemins suivant : 	/usr/bin:/bin:/usr/sbin:/sbin

j'ai testé avec mes 2 serveurs : apache par defaut et apache via MAMP

les deux me font le même souci malgré deux groupent différents et deux utilisateurs différents.

Ce n'est pas  logique !

Merci pour votre aide


----------



## PA5CAL (26 Septembre 2008)

pixman a dit:


> j'ai beau modifier toute la série de fichiers qui fonctionnent avec bash, rien ni fait le serveur ne veux pas aller voir ailleurs que dans les chemins suivant : /usr/bin:/bin:/usr/sbin:/sbin
> 
> (...)
> 
> Ce n'est pas  logique !


Si, tout-à-fait au contraire. Le serveur web est lancé avec cette variable environnement. Dans le meilleur des cas il la repasse à PHP sans le modifier. Au pire, il la modifie en fonction de son paramétrage. De même entre PHP et le bash lancé dans le script. Il convient donc de régler le problème en effectuant les paramétrages nécessaires tout au long de la chaîne. Compte tenu des nombreuses possibilités, il ne va pas être simple de donner une réponse de but en blanc...

Toutefois, dans le cas présent, le problème pourrait être simplement réglé en indiquant le chemin complet du programme lors de son appel.



Mais il faut faire très attention.

Le serveur permet à des personnes étrangères d'exécuter des programmes sur la machine. Pour une question évidente de sécurité, l'environnement qui leur est «prêté» doit être cloisonné et réduit au minimum nécessaire. Il n'est pas question de leur donner les mêmes possibilités d'accès qu'à un utilisateur local, voire à un administrateur, sans l'avoir très explicitement autorisé.

Historiquement, les programmes externes utilisés sont copiés dans le dossier spécifié par la directive _safe_mode_exec_dir_ dans _php.ini_. Mais la désactivation du Safe Mode n'est pas une bonne chose. D'ailleurs le Safe Mode est supprimé à partir de PHP 6.0.0. Pour utiliser ImageMagick, il faudra envisager le recours à des modules PHP ad hoc, tels que IMagick (dont voici quelques exemple d'utilisation) ou MagickWand.


----------



## pixman (26 Septembre 2008)

Merci pour ces renseignements.

J'ai bien compris ce qu'implique la désactivation du safe mode. Mais sur une machine locale, j'ai peu de risques.

J'ai déjà tenté d'installer  les bibliothèques Imagick et MagickWand, mais sans succès sur Mac OSX.
c'est peut être lié à MAMP qui a l'air d'être très limité si on veux compiler des modules supplémentaires.

Pour info, j'ai fait mon install Image Magick via macPorts, et j'ai tenté l'install de Imagick via PECL pour php 5 sur MAMP

Je vais peut être chercher un équivalent MAMP plus souple, ou même repartir sur une install propre de AMP à la main.

Merci.

PS: donc pour le PATH sous apache en fait, c'est peut être lié à une histoire de compilation ? car je ne trouve rien pour modifier le path, et les actions sur tous les utilisateurs de la machine ne se répercutent pas sur apache...


----------



## osscour (24 Janvier 2009)

Peut être bientôt la réponse à cette fichue installation d'Imagemagick qui ne veut pas se faire sous MAMP ?

http://forum.macbidouille.com/index.php?showtopic=254569


----------



## heroe (29 Janvier 2009)

L'installation d'imagemagick est indépendante de MAMP, y a pas d'incompatibilité possible si on l'utilise en ligne de commande...

en spécifiant le le chemin complet ça devrait marcher :

exemple avec MacPort :


```
exec("/opt/local/bin convert");
```


----------

