Safe_mode_exec_dir [Résolu]

Signaler
Messages postés
90
Date d'inscription
dimanche 14 septembre 2003
Statut
Membre
Dernière intervention
3 juillet 2008
-
Messages postés
2483
Date d'inscription
jeudi 30 novembre 2006
Statut
Membre
Dernière intervention
14 janvier 2011
-
Bonjour,

J'ai un problème avec la configuration et l'exécution d'un code en utilisant la fonction exec.
En fait j'ai configurer mon fichier PHP.ini en
safe_mode = off
safe_mode_exec_dir = ".;${path}\php\command"  
l'emplacement ou je veux exécuter un fichier tracert.php qui contient le code suivant

exec("tracert www.google.fr", $tableau);
foreach($tableau as $row)
{
echo $row;
echo "
";
}

le problème comment je fait appel à ce fichier, sachant que je veux que le temps d'exécution peut dérouler plusque que 30 seconde, c'est pour cela que j'utilise le safe_mode = off et je spécifie l'emplacement des commandes à exécuter.

Merci.

6 réponses

Messages postés
2483
Date d'inscription
jeudi 30 novembre 2006
Statut
Membre
Dernière intervention
14 janvier 2011
15
Si safe_mode n'est pas activé, exec() peut exécuter un exécutable qui se trouve n'importe où, pour peu que les permissions le permettent.

Le mieux est de ne pas attendre la fin de l'exécution du script, de rediriger la sortie de celui-ci dans un fichier, et d'en vérifier le contenu.

Neige

N'hésitez pas à lire la doc de PHP avant de poser des questions triviales...
Messages postés
2483
Date d'inscription
jeudi 30 novembre 2006
Statut
Membre
Dernière intervention
14 janvier 2011
15
Salut,

Si tu désactives safe_mode, inutile de configurer safe_mode_exec_dir, cette directive ne sera pas prise en compte.

Si tu veux simplement augmenter le temps maximum d'exécution d'un script, il te suffit non pas de désactiver safe_mode.
Quitte à modifier la configuration de PHP, autant simplement augmenter le temps d'exécution : max_execution_time
Si tu veux pouvoir modifier cette valeur dans tes scripts, alors oui, il faut que safe_mode soit désactivé et utiliser la fonction set_time_limit()

Neige

N'hésitez pas à lire la doc de PHP avant de poser des questions triviales...
Messages postés
2483
Date d'inscription
jeudi 30 novembre 2006
Statut
Membre
Dernière intervention
14 janvier 2011
15
Tiens, j'me suis pas relu et y'a une phrase qui veut pas dire grand chose... :/

Neige

N'hésitez pas à lire la doc de PHP avant de poser des questions triviales...
Messages postés
90
Date d'inscription
dimanche 14 septembre 2003
Statut
Membre
Dernière intervention
3 juillet 2008

Merci pour votre reponse, mais je sais pas le temps d'exécution du processus, le processus peut prendre un jours ou meme plus d'exécution, c'est  pour ca que j'ai penser à  configurer le safe_mode_exec_dir et safe_mode = On,  comme décrit dans le manuel de exec ( ici )
Messages postés
2483
Date d'inscription
jeudi 30 novembre 2006
Statut
Membre
Dernière intervention
14 janvier 2011
15
Salut,

Quelques précisions me paraissent nécessaires.

PHP ne permet pas l'exécution d'un script sur une durée illimitée : il y a FORCEMENT une limite de temps, fixée par la configuration. Ca, on ne PEUT PAS y échapper.
Donc : on peut tout à fait autoriser, dans la config de PHP, une durée d'exécution très longue ; mais cette durée est nécessairement déterminée, et ne peut en aucune cas être illimitée

Il est dit dans la doc : "Lorsque le
safe mode est activé, vous pouvez
uniquement exécuter des programmes qui se situent dans le dossier défini par
safe_mode_exec_dir."
Cela ne signifie ABSOUMENT PAS que pour exécuter un programme externe, il faille obligatoirement activer safe_mode ! AU CONTRAIRE ! La doc explique que SI safe_mode est activé, alors seuls les programmes se trouvant dans le répertoire défini par safe_mode_exec_dir dans la configuration de PHP pourront être exécutés.
Si safe_mode n'est pas activé, cette limitation n'existe pas. Sur un hébergement personnel, on peut (on doit ?) désactiver safe_mode pour permettre l'exécution de programmes externes que l'on veut sans contrainte de répertoire.

Neige

N'hésitez pas à lire la doc de PHP avant de poser des questions triviales...
Messages postés
90
Date d'inscription
dimanche 14 septembre 2003
Statut
Membre
Dernière intervention
3 juillet 2008

Ok, la je comprend bien, donc la solution que je propose de faire un script sh qui va faire la tache en arrière plan, mais mon problème c'est ou je doit mettre le script pour que la fonction exec lui fais appel, et aussi comment je peut savoir la fin d'éxecution du script.
exemple :
$id = exec("monscript.sh");
if($id == "0")
// script en cours d'exécution
else
// fin de script