Redirection en php

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

04 nov. 2006, 20:44

Bien sur que tu peux conditionner le meta de la même façon :)
<?php  
if(file_exists("resultat.xml")) 
  echo '<meta http-equiv="refresh" content="0;url=/resultat.htm">'; 
else  
  echo '<meta http-equiv="refresh" content="0;url=/erreur.htm">'; 
?>
bon par contre pour ton header faudrait vraiment voir ton fichier parce que c'est pas normal cette histoire... tu peux le mettre en ligne avec une extension .txt ou dans un zip ? on y verra peut être plus clair...
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

bmag
Invité n'ayant pas de compte PHPfrance

05 nov. 2006, 13:23

ça y est, j'ai identifié la cause !!!!!!!!!


Je modifie le fichier PHP sous notepad de Windows XP Pack 2 et ô surprise, la fenêtre "enregistrer sous..." contient une liste déroulante "codage" qui propose d'enregistrer le fichier texte sous différents formats dont : ANSI, UNICODE et UTF-8. Or, chez moi, c'était sur UTF-8. En ANSI, ça fonctionne correctement.

bmag
Invité n'ayant pas de compte PHPfrance

05 nov. 2006, 16:18

Cela dit, je débute en PHP et pour mon tout petit script que je veux mettre en place, avec une syntaxe correcte, j'ai l'essentiel des fonctions que ne marchent pas ( je suis hébergé par ONLINE)

Pour récapituler :

<?php
echo "wait"; Marche (ouf!)
while(!file_exists("resultat.xml")) Ne marche pas (ne change pas de valeur au cour du temps malgrés clearstatcache)
{
echo "."; marche (encore ouf!)
sleep(1); ne marche pas
clearstatcache(); ne marche pas
}
header("Location:/resultat.htm"); ne marche pas si le fichier a été écrit sous notepad au format UTF-8
?>

Bref, le PHP, à part la fonction echo, je ne vois pas ce qui marche !!!!

ViPHP
ViPHP | 1961 Messages

05 nov. 2006, 16:45

Bonjour,

Pour commencer, tu peux commencer par mettre ton code entre les balises [ PHP] et [/PHP].

Ensuite si tu regardes la doc de file_exists() et celle de clearstatcache() tu devrais comprende que avant l'exécution de file_exists() il faut exécuter clearstatcache(). D'après ce que je vois, c'est pas le cas. Si tu ne rentres pas dans ta boucle, comment veux-tu que sleep() fonctionne si elle n'est pas exécutée ???
Deux choses sont infinies, l'Univers et la sottise humaine!!
Mais je ne suis pas sur de ce que j'affirme au sujet de l'Univers.

A. Einstein

bmag
Invité n'ayant pas de compte PHPfrance

05 nov. 2006, 17:23

Bonjour,

Pour commencer, tu peux commencer par mettre ton code entre les balises [ PHP] et [/PHP].
En effet, mais je voulais mettre mes commentaires (en rouge) qui n'ont rien de PHP.
Ensuite si tu regardes la doc de file_exists() et celle de clearstatcache() tu devrais comprende que avant l'exécution de file_exists() il faut exécuter clearstatcache().
Au premier passage, la valeur est bonne. Le fichier est en principe absent. Donc je rentre dans la boucle (note le petit "!"). Ensuite, File_exists me renvoie toujours la même valeur même lorsque le fichier xml est déposé. Et là, je suis bien dans la boucle puisque une ribanbelle de '.' viennent s'afficher à l'écran à toute vitesse. je passe donc sur la fonction sleep sans que celle-ci n'accomplisse son office de temporisation.
Si tu ne rentres pas dans ta boucle, comment veux-tu que sleep() fonctionne si elle n'est pas exécutée ???
Allez, je suis beau joueur, je veux bien que la fonction sleep ne s'exécute pas si je n'entre pas dans la boucle.... ;)
Mais justement, là j'y rentre !

bmag
Invité n'ayant pas de compte PHPfrance

07 nov. 2006, 13:34

Si ça peut aider certains, l'hébergeur ONLINE (online.net) m'a répondu sur un des incidents : la fonction SLEEP est bel et bien désactivée chez eux. Ils ne proposent pas de fonction de substituition.
Pour l'instant pas encore de réponse concernant file_exists() couplé à clearstatcache() qui est également inopérant.

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

07 nov. 2006, 13:43

Et dans l'autre sens, tu as essayé de faire appel au clear juste avant de tester le fichier comme le suggèes ajoloca ?
(probablement, mais ça coute rien de demander ;))
clearstatcache(); 
while(!file_exists("resultat.xml")) { 
 ...
} 
Pis c'est bon à savoir pour le sleep :)

(pour les balises php, à défaut du rouge, tu peux utiliser des commentaires pour mettre des messages en couleur (en orange c'est moins joli d'accord ;)) et garder un code présentable :))
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

ViPHP
ViPHP | 1961 Messages

07 nov. 2006, 13:53

Bonjour,
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.
Je te conseille d'utiliser is_file() elle aussi couplée avec clearstatcache()

Pour la fonction sleep(), beaucoup d'hébergeurs et FAI la désactivent (Free, club-internet, Neuf-cegetel, ...)
EDIT:

Toujours pour Sleep(), tu peux contourner le PB avec AJAX
Deux choses sont infinies, l'Univers et la sottise humaine!!
Mais je ne suis pas sur de ce que j'affirme au sujet de l'Univers.

A. Einstein

bmag
Invité n'ayant pas de compte PHPfrance

07 nov. 2006, 14:02

Oui, j'ai bien testé le script avec un appel de clearstatcache avant le file_exists.
En fait, plutôt que la boucle, j'ai mis une balise refresh qui boucle sur la même page toutes les 5 secondes avec le test d'existence du fichier eu préambule.
La page attente.php devient donc :
<?php
clearstatcache();
if (is_file("resultat.xml")) 
{
header("Location: /resultat.htm");
}
?>
...
<meta http-equiv="refresh" content="5;url=/attente.php">
...
Seulement, même dans cette configuration, le test se révèle négatif (toujours la même valeur renvoyée, celle du premier test). J'ai également essayé la fonction is_file() mais c'est idem.

ViPHP
ViPHP | 1961 Messages

07 nov. 2006, 15:47

Re,

J'ai repris ton script, j'ai juste changé les url (url complète) et ça fonctionne parfaitement
<?php
clearstatcache();
if (is_file("aaa.txt")){
	header("Location: http://www.domain.eu/info.php");
}
echo date('d-m-Y H:i:s');
?>
<meta http-equiv="refresh" content="5;url=http://www.domain.eu/ess1.php">
Deux choses sont infinies, l'Univers et la sottise humaine!!
Mais je ne suis pas sur de ce que j'affirme au sujet de l'Univers.

A. Einstein

bmag
Invité n'ayant pas de compte PHPfrance

13 nov. 2006, 15:44

Pour la petite histoire, j'ai résolu les problèmes (tous) en créant mon propre serveur php (apache + php). Et là, ça marche