Discussion:
temporisation
(trop ancien pour répondre)
alainL
2013-11-05 18:23:49 UTC
Permalink
Bonsoir,
Je lis un fichier.text de plusieurs lignes (de 5 enreg chacune)et je
voudrais attendre qqs secondes entre les affichages de ces lignes.
J'ai essayé sleep(3) juste avant la fin de la boucle mais le script ne
part plus. Merci pour un conseil !
(mon but est de réaliser un petit diaporama automatique)

Voici le code:
-----------------------------------------
<?php
# détermine le nom du fichier fleurs à utiliser suivant le mois en cours
$mois = array(1=>'janvier', 'février', 'mars', 'avril', 'mai',
'juin', 'juillet', 'août', 'septembre', 'octobre', 'novembre', 'décembre');

$Fnm = 'fleurs_'.$mois[date('n')].'.txt';

$inF=fopen($Fnm,'r');
$tab=file($Fnm);
$nb=count($tab);
fclose($inF);

$inF = fopen($Fnm,'r');

for ($i=1;$i<$nb;$i++)
{
$ligne[$i] = fgets($inF, 4096);
$donneesligne=explode(';',$ligne[$i]);

$numligne=$donneesligne[0];
$imgligne=$donneesligne[1];
$nvligne=htmlspecialchars($donneesligne[2], ENT_QUOTES);
$nfligne=htmlspecialchars($donneesligne[3], ENT_QUOTES);
$nffligne=htmlspecialchars($donneesligne[4], ENT_QUOTES);

echo $imgligne.'<br>';

## sleep(3);
}

fclose($inF);
?>
--------------------------------------
AlainL

http://autourdalos.fr

---
Ce courrier électronique ne contient aucun virus ou logiciel malveillant parce que la protection avast! Antivirus est active.
http://www.avast.com
Olivier Miakinen
2013-11-06 00:19:42 UTC
Permalink
Bonjour,
Post by alainL
Je lis un fichier.text de plusieurs lignes (de 5 enreg chacune)et je
voudrais attendre qqs secondes entre les affichages de ces lignes.
J'ai essayé sleep(3) juste avant la fin de la boucle mais le script ne
part plus. Merci pour un conseil !
(mon but est de réaliser un petit diaporama automatique)
-----------------------------------------
<?php
[...]
echo $imgligne.'<br>';
## sleep(3);
[...]
?>
--------------------------------------
Si ça se trouve, c'est juste que la sortie est « bufferisée » (mise en
tampon), et tu peux essayer de rajouter un « flush() » juste avant le
« sleep(3) ».

Mais attention, ça risque malgré tout de ne pas fonctionner : lis bien
*toute* la description de la page <http://us2.php.net/flush>.
Post by alainL
---
Ce courrier électronique ne contient aucun virus ou logiciel malveillant parce que la protection avast! Antivirus est active.
http://www.avast.com
Merci de désactiver cette pub pour ton antivirus, en arrêtant tous les
agents autres que la protection des fichiers qui est la seule utile.
Cf. les discussions récentes sur fr.comp.securite.virus.
alainL
2013-11-06 10:01:35 UTC
Permalink
Merci.
Avec uniquement flush() j'ai l'appel d'une adresse inconnue.
En ajoutant ob_flush(), ça semble aller mieux.

En local, (wamp) j'ai un blocage après 30s :
---------------message erreur ------------------
( ! ) Fatal error: Maximum execution time of 30 seconds exceeded in
C:\wamp\www\Autourdalos\html\lancediapo1.php on line 38
Call Stack
# Time Memory Function Location
1 0.0007 375696 {main}( ) ..\lancediapo1.php:0
-----------------------------------------------

En distant j'obtiens tout le fichier.
Mais les deux premiers affichages arrivent simultanément. La tempor se
fait ensuite correctement... Testé sur Ffx et IE8...

( En ligne : http://autourdalos.fr/html/lancediapo1.php )

AlainL

http://autourdalos.fr
Post by Olivier Miakinen
Bonjour,
Post by alainL
Je lis un fichier.text de plusieurs lignes (de 5 enreg chacune)et je
voudrais attendre qqs secondes entre les affichages de ces lignes.
J'ai essayé sleep(3) juste avant la fin de la boucle mais le script ne
part plus. Merci pour un conseil !
(mon but est de réaliser un petit diaporama automatique)
-----------------------------------------
<?php
[...]
echo $imgligne.'<br>';
## sleep(3);
[...]
?>
--------------------------------------
Si ça se trouve, c'est juste que la sortie est « bufferisée » (mise en
tampon), et tu peux essayer de rajouter un « flush() » juste avant le
« sleep(3) ».
Mais attention, ça risque malgré tout de ne pas fonctionner : lis bien
*toute* la description de la page <http://us2.php.net/flush>.
Post by alainL
---
Ce courrier électronique ne contient aucun virus ou logiciel malveillant parce que la protection avast! Antivirus est active.
http://www.avast.com
Merci de désactiver cette pub pour ton antivirus, en arrêtant tous les
agents autres que la protection des fichiers qui est la seule utile.
Cf. les discussions récentes sur fr.comp.securite.virus.
Denis Beauregard
2013-11-06 13:34:41 UTC
Permalink
Post by alainL
Merci.
Avec uniquement flush() j'ai l'appel d'une adresse inconnue.
En ajoutant ob_flush(), ça semble aller mieux.
Totu à fait normal, c'est la valeur par défaut.
Post by alainL
---------------message erreur ------------------
( ! ) Fatal error: Maximum execution time of 30 seconds exceeded in
C:\wamp\www\Autourdalos\html\lancediapo1.php on line 38
Call Stack
# Time Memory Function Location
1 0.0007 375696 {main}( ) ..\lancediapo1.php:0
-----------------------------------------------
En distant j'obtiens tout le fichier.
Mais les deux premiers affichages arrivent simultanément. La tempor se
fait ensuite correctement... Testé sur Ffx et IE8...
Sous Windows, le temps d'exécution est le temps réel (ou total) à
partir du début de l'exécution. Donc arrêt après 30 secondes. Sous
Linux etc., c'est le temps passé à interpréter le script en PHP. Si
par exemple on a un accès à du mySQL et que cela prend beaucoup de
temps, ce temps n'est pas compté (alors qu'il le serait sous Windows).
Je ne savais pas que le temps pour la temporisation serait aussi
exclus.

Ceci dit, je pense que ce serait mieux de le faire en javascript qui
me semble plus approprié. En PHP pur, j'ai une autre solution, qui
n'a aucune limite temporelle.


<html>
<head>
<meta http-equiv="refresh" content="30;url=diapo2.php">
<title>Diapo 1</title>
</head>
<body>
page à afficher



Ici, après 30 secondes, on affichera diapo2.php.


Denis
Olivier Miakinen
2013-11-07 10:58:28 UTC
Permalink
Post by Denis Beauregard
Sous Windows, le temps d'exécution est le temps réel (ou total) à
partir du début de l'exécution. Donc arrêt après 30 secondes. Sous
Linux etc., c'est le temps passé à interpréter le script en PHP. Si
par exemple on a un accès à du mySQL et que cela prend beaucoup de
temps, ce temps n'est pas compté (alors qu'il le serait sous Windows).
Oui.
Post by Denis Beauregard
Je ne savais pas que le temps pour la temporisation serait aussi
exclus.
Lors d'un sleep(), le processus est arrêté (généralement il repart
après réception d'un SIGALRM). Il ne consomme donc pas de temps en
mode user et pas de CPU du tout.
Post by Denis Beauregard
Ceci dit, je pense que ce serait mieux de le faire en javascript qui
me semble plus approprié.
Oui.
Post by Denis Beauregard
En PHP pur, j'ai une autre solution, qui
n'a aucune limite temporelle.
<html>
<head>
<meta http-equiv="refresh" content="30;url=diapo2.php">
<title>Diapo 1</title>
</head>
<body>
page à afficher
En PHP encore un peu plus pur :

<?php
header("refresh:30;url=diapo2.php");
...
?>

Otomatic
2013-11-06 16:03:39 UTC
Permalink
Possible remettre à zéro le temps maxi par :

set_time_limit (30);

juste avant sleep(3);
--
Ce n'est pas parce qu'ils sont nombreux à avoir tort
qu'ils ont forcément raison. Coluche
Loading...