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 :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
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 :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
ini_set('max_execution_time', 0);
et

Code : Sélectionner tout - Visualiser dans une fenêtre à part
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 :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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