Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

temporisation

5 réponses
Avatar
alainL
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

5 réponses

Avatar
Olivier Miakinen
Bonjour,

Le 05/11/2013 19:23, alainL a écrit :

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
[...]
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>.

---
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.
Avatar
alainL
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:wampwwwAutourdaloshtmllancediapo1.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

Le 06/11/2013 01:19, Olivier Miakinen a écrit :
Bonjour,

Le 05/11/2013 19:23, alainL a écrit :

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
[...]
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>.

---
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.

Avatar
Denis Beauregard
Le Wed, 06 Nov 2013 11:01:35 +0100, alainL
écrivait dans fr.comp.lang.php:

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 :



Totu à fait normal, c'est la valeur par défaut.

---------------message erreur ------------------
( ! ) Fatal error: Maximum execution time of 30 seconds exceeded in
C:wampwwwAutourdaloshtmllancediapo1.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
Avatar
Otomatic
alainL écrivait :

En local, (wamp) j'ai un blocage après 30s :


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
Avatar
Olivier Miakinen
Le 06/11/2013 14:34, Denis Beauregard répondait à alainL :

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.

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.

Ceci dit, je pense que ce serait mieux de le faire en javascript qui
me semble plus approprié.



Oui.

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");
...
?>