Bonjour,
je travaille sous Windows 2008 R2, sur lequel j'ai installé PHP 5.6.6 et Python 2.7.9.
J'ai un script PHP, tout ce qu'il y a de plus simple, que voici :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
| <?php
$output="";
$retval="";
$array = array();
if ( isset($_GET["message"]) ){
$msg = $_GET["message"];
}
$cmd = "deploy_to_server.py " . $msg;
$result = exec($cmd,$output,$retval);
if ( $retval == 1 ){
$array['success'] = FALSE;
$array['result'] = $result;
}
else{
$array['success'] = TRUE;
$array['result'] = $result;
}
echo json_encode($array);
?> |
Le script python "deploy_to_server.py" copie les fichiers ayant les noms contenus dans "message". Ces fichiers peuvent être volumineux (environ 1Go maximum).
Lors de la première exécution de mon script PHP, j'ai eu le message :
PHP Fatal error: Maximum execution time of 30 seconds exceeded in deploy_to_server.py ...
J'ai donc modifier les variables dans php.ini, en ayant fait l'estimation que 5min étaient suffisantes pour la copie :
- max_execution_time = 300
- max_input_time = 300
Je n'ai plus le message d'erreur de timeout, par contre je n'ai pas le retour de mon script python ($result).
Mais si la copie prend moins de 30 secondes, j'ai le retour de mon script python.
Et à 32 secondes, je n'ai pas le retour. C'est précis.
D'où viennent ces 30 secondes qui font que j'ai ou non le retour de mon script ?
Existe-t-il une autre configuration pour PHP que j'aurai oublié ?
Sachant que dans les deux cas, mon script est exécuté en intégralité et que PHP rend la main qu'à ce moment là.
J'ai déjà testé également :
ini_set('max_execution_time', 0);
et
1 2 3 4
| $default = ini_get('max_execution_time');
set_time_limit(1000);
//here my exec command
set_time_limit($default); |
Et ça marche pas mieux.
Pour l'instant je n'ai pas inclus ce script dans mon site, je l'exécute en ligne de commande :
php-cgi.exe deploy_to_server.php message="liste fichier"
Mon script python retourne uniquement via "print", qui va dans $result dans le script PHP, et "sys.exit(x)", qui va dans $retval.
Dans n'importe quelle condition j'ai $retval à la bonne valeur. Donc je pourrai à la rigueur me baser que sur ce retour là et pas $result.
Mais j'aimerai bien tout de même avoir $result.
Merci
Sylvain
Partager