PHP, exécution .sh, compilation latex
Résolu
Bonjour,
Je souhaite lancer un fichier .sh sur une page Internet via une page php :
<?php
exec('compi_latex.sh');
?>
Avec compi_latex.sh qui contient les deux commandes suivantes :
latex rapport.tex
dvipdf rapport.dvi
Aucun message d'erreur lors de l'exécution, rien. Mais pas d'exécution.
Le fichier .sh est bien 744 mais j'ai aussi essayé 777. Il s'écution bien va le terminal.
Merci pour votre aide !
Je souhaite lancer un fichier .sh sur une page Internet via une page php :
<?php
exec('compi_latex.sh');
?>
Avec compi_latex.sh qui contient les deux commandes suivantes :
latex rapport.tex
dvipdf rapport.dvi
Aucun message d'erreur lors de l'exécution, rien. Mais pas d'exécution.
Le fichier .sh est bien 744 mais j'ai aussi essayé 777. Il s'écution bien va le terminal.
Merci pour votre aide !
1 réponse
-
Le problème vient à mon avis est double :
1) Tout d'abord ton script utilise des chemins relatifs, il faudrait être le chemin absolu, ou du moins se positionner contenant les fichiers tex, dvi et sh. Si ce répertoire est en dehors de l'arborescence apache, il y a des chances que ça rate car un serveur ne peut normalement pas de sortir de son RootDirectory pour des raisons de sécurité. Les chemins absolus qu'on passe au script php sont d'ailleurs définis par rapport à ce répertoire.
2) le fichier dvi doit être généré dans un répertoire qui n'appartient pas à l'utilisateur avec lequel ton serveur web tourne. Par exemple apache a des chances de tourner en utilisateur www-data tandis que ton fichier latex et le répertoire dans lequel tu génères le dvi appartiennent à un autre utilisateur.
Bonne chance-
-
Justement, dans ce cas apache ne peut pas aller dans ~user. Il faut copier tes fichiers dans le RootDirectory d'apache. Tu peux y déplacer tes fichiers, et depuis ton home, faire un lien symbolique vers ces fichiers (la réciproque est fausse car apache n'a pas le droit par défaut de suivre les liens symboliques).
En admettant que le RootDirectory de ton vhost apache soit /var/www :
mv ~user/script.sh ~user/fichier.tex /var/www/
cd ~user
ln -s /var/www/script.sh
ln -s /var/www/fichier.tex
Assure-toi qu'apache peut lire ces deux fichiers. S'il correspond à l'utilisateur www-data
chgrp www-data /var/www/fichier.tex /var/www/script.sh
chmod g+r /var/www/fichier.tex
chmod g+r /var/www/script.sh
Ensuite, si ton script est invoqué par apache via un interpréteur shell explicite (genresh script.sh
au lieu de./script.sh
) c'est suffisant. Dans le 2e cas il faut en plus donner les droits en exécution :
chmod g+rx /var/www/script.sh
En tout cas il est important de retenir une chose : il faut éviter d'augmenter les droits d'apache, c'est le meilleur moyen d'avoir un trou de sécurité. Il vaut mieux lui donner les moyens d'accéder avec ses droits à l'information pertinente.
Bonne chance -
-
-