file_exists, clearstatcache, sleep et header

bmag
Invité n'ayant pas de compte PHPfrance

03 nov. 2006, 19:08

Voilà, je suis totalement débutant en développement web et je me trouve confronté à 36000 pb sur la fonction que je veux mettre en place :
J'affiche une page à l'écran et attends qu'un autre process dépose un fichier xml sur le serveur. Quand il y est, je veux diriger le visiteur sur une page html qui lui affiche le résultat.

Donc, après plusieurs tentatives, plusieurs méthodes... j'arrive à des solutions de plus en plus dégradées et de moins en moins élégantes.

Voila le script que je mets à la fin de ma page :

<?php
echo "wait";
while(file_exists("resultat.xml") === false)
{
echo ".";
sleep(1);
clearstatcache();
}
echo '<script>document.location = "/resultat.htm";</script>';
?>

Premier point :
Le file_exists refuse obstinément de me donner un résultat correct : il ne capte l'information (présence ou absence du fichier) qu'au chargement initial de la page et même si le fichier est déposé après, file_exists me ramène false. Inversement il me ramène toujours true si le fichier était initialement présent, mêlme s'il est supprimé. La commande clearstatcache ne change rien.

Second point :
La commande Sleep n'a strictement aucun effet. Du coup, comme dans la boucle je fais 'echo "."', les points se cumulent par milliers à la vitesse grand V.

Voili voilou.

bmag
Invité n'ayant pas de compte PHPfrance

05 nov. 2006, 15:35

Je me permets de vous relancer, si au cas ou qqun saurait tester la présence d'un fichier créé durant la même session par un processus extérieur.

Egalement si qqun saurait pourquoi la fonction sleep ne fonctionne pas. Est-ce dû à mon hébergeur ou à la façon ont j'appelle la fonction ?

Eléphant du PHP | 377 Messages

05 nov. 2006, 16:10

je pense que ca ne va pas beaucoup t'aider, mais de mon coté ce code marche :
<?
echo "wait";
while(!file_exists("resultat.xml")) 
{ 
echo ".";
sleep(1);
} 
echo '<br>fin'; 
?> 
sur un serveur LAMP (au cas où ca aurait une incidence quelconque...)
note: pas besoin de faire un clearstatcache() à chaque passage :
Sachez bien que PHP ne met pas en cache les informations concernant un fichier inexistant. Si vous appelez file_exists() sur un fichier qui n'existe pas, la fonction retournera FALSE jusqu'à ce que vous créiez le fichier. Si vous créez le fichier, la fonction retournera TRUE même si vous effacez le fichier.
Petit scarabée deviendra grand