Redirection en php

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : Redirection en php

par bmag » 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

par Ajoloca » 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">

par bmag » 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.

par Ajoloca » 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

par Ryle » 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 :))

par bmag » 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.

par bmag » 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 !

par Ajoloca » 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 ???

par bmag » 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 !!!!

par bmag » 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.

par Ryle » 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...

par bmag » 04 nov. 2006, 14:14

Un meta refresh enfin messieurs :P ... au lieu d'un Js.
Si je peux conditionner le meta refresh, je prends. :)
Moi je pense aussi que tu a laisser un saut de ligne en haut de ton fichier .php
Ben non. Je modifie le petit script php avec notepad puis le remonte par un glisser/déposer dans mon espace ftp. Il ne comprends pas d'espace ni de ligne vierge.
[EDIT]: Chez moi ça marche parfaitement : http://ultiny.online.fr/webshare/progra ... ection.php[/quote]
Tu utilises quoi pour éditer ton fichier php ?

par Ultiny » 04 nov. 2006, 00:14

Un meta refresh enfin messieurs :P ... au lieu d'un Js.
Moi je pense aussi que tu a laisser un saut de ligne en haut de ton fichier .php


Par exemple :

Code : Tout sélectionner

<?php header(); ?>
Au lieu de :

Code : Tout sélectionner

<?php header(); ?>
[EDIT]: Chez moi ça marche parfaitement : http://ultiny.online.fr/webshare/progra ... ection.php

par Ryle » 03 nov. 2006, 15:32

Javascript: attention ça peut toujours être désactivité par le visiteur.
C'est sur... mais ça reste quelques 2-3% des gens qui le font, et comme en général ca les empêche de profiter pleinement de 90% des sites internet, ils installent un bon antivirus et ça leur passe vite ;)

Au pire, tu peux rajouter une balise <noscript> et leurs donner le lien en leur adressant un message sévère mais courtois :)

par iclo » 03 nov. 2006, 15:23

Etrange, tu avais regardé le code source html de la page qui renvoyait l'erreur.

Javascript: attention ça peut toujours être désactivité par le visiteur.