Page 1 sur 1

Execution fopen trop longue

Posté : 16 mai 2006, 15:03
par Sasuke
Bonjour,

J'ai crée un petit programme, qui execute une commande windows, et qui traite le resultat de cette commande.

Mais un peu de code vaut mieux qu'un long discour ^^
<?
.
.
.
17	$k='c';
18	$q='g';

19	$temp=0;
20	$temp2=0;
21	while($k<$q){
22		$cmd= "freedisk /S $serveur /U $user /P $mdp /D $k: >  $filename";
23		$cmd2="freedisk /S $serveur /D $k: > $filename";
24		shell_exec($cmd2);
25		$ouvre = fopen($filename,"r");
26		$p = 0;
27		while ($p < 2){
28			// on recupère la ligne courante
29			$temp = fgets($ouvre);
30			$p++;
31		}
.
.
.
?>
Voici le contenu du fichier :


INFO: 35ÿ273ÿ080ÿ832 bytes free on current volume.
Lors de l'execution du programme il me dit que j'ai exedé le temps d'execution de 30 secondes.
=> Fatal error: Maximum execution time of 30 seconds exceeded in ... on line 25

Comme vous le voyé c'est le fopen qui semble prendre trop de temps.
Quand j'execute la commande dans l'invite de commande ms dos cela marche tout de suite, sauf si j'interroge un serveur distant au quel cas, si je ne peut pas m'y connecter, cela prend environ une dixaine de seconde.

Ce qui me parait bizarre c'est que le script ne bloque pas au niveau de l'execution de la commande mais de l'ouverture du fichier.

Le fichier n'est pas en lecture seul, j'ai bien les droits, bref je ne vois pas pourquoi ca bloque a cet endroit.

Merci

Posté : 18 juin 2006, 20:02
par L`OcuS
Il faut augmenter le temps d'éxécution maximum :
set_time_limit(120);
Par défaut, la valeur est 30.
Pour un temps d'éxécution "infini", il faut mettre 0.

http://php.net/set_time_limit

Posté : 18 juin 2006, 21:50
par Ripat
Il y a quelque chose qui m'échappe. Tu inscris le résultat d'une commande dans un fichier local. Tu dois donc le retrouver sur le serveur qui exécute ton code php. Faut pas aller le chercher ailleurs!

Ceci dit, il est possible d'imposer un timeout sur le flux fopen() moyennant quelques contorsions sur les sockets.