PHP, exécution .sh, compilation latex

[Résolu/Fermé]
Signaler
Messages postés
165
Date d'inscription
dimanche 16 novembre 2008
Statut
Membre
Dernière intervention
3 février 2015
-
Messages postés
30118
Date d'inscription
jeudi 12 mai 2005
Statut
Modérateur
Dernière intervention
20 septembre 2021
-
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 !

1 réponse

Messages postés
30118
Date d'inscription
jeudi 12 mai 2005
Statut
Modérateur
Dernière intervention
20 septembre 2021
7 173
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
Messages postés
165
Date d'inscription
dimanche 16 novembre 2008
Statut
Membre
Dernière intervention
3 février 2015
5
Merci pour ta réponse. Je vais essayer de voir du coté des droits apache concernant le dossier. Surtout que c'est un peu particulier puisque je suis sûr le dossier ~user courant.
Je te tiens informer.
Messages postés
30118
Date d'inscription
jeudi 12 mai 2005
Statut
Modérateur
Dernière intervention
20 septembre 2021
7 173
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 (genre
sh 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
Messages postés
165
Date d'inscription
dimanche 16 novembre 2008
Statut
Membre
Dernière intervention
3 février 2015
5
Merci pour votre réponse.
Messages postés
30118
Date d'inscription
jeudi 12 mai 2005
Statut
Modérateur
Dernière intervention
20 septembre 2021
7 173
De rien et bonne continuation !