2010-01-18 10 views
0

J'essaie de rediriger les utilisateurs mobiles et je tente ce qui suit, mais il ne redirige pas vraiment du tout ...essayant de rediriger vers un site externe avec php

$ua = strtolower($_SERVER['HTTP_USER_AGENT']); 
//print $ua; 

$search = array('windows ce', 'avantgo', 'mazingo', 'mobile', 'iphone', 't68', 'syncalot', 'blazer'); 

foreach($search as $sk => $sv) { 
    if(preg_match('/\b'.$sv.'\b/i', $ua)) { 
     header("Location: http://m.example.com"); 
     exit; 
    } 

} 

Répondre

2

Vous pouvez d'abord essayer juste en écho Attempting to Redirect à la place de l'en-tête, de sorte que vous pouvez ensuite voir si il essaie de rediriger quelqu'un. De cette façon, vous pouvez vérifier si la première moitié de la fonction fonctionne.

Voici un blog post sur quelque chose de très similaire à ce que vous faites, qui utilise strpos au lieu de preg_match, ce qui est probablement plus simple.

Si ce n'est pas 'rediriger', AKA, la fonction header ne semble pas fonctionner, vous avez un tout autre problème.


Si la fonction header ne fonctionne pas, essayez d'ajouter Firefox à la liste des navigateurs pour rediriger, puis utiliser Firebug pour vérifier les en-têtes envoyés au navigateur.

Cela peut poser un problème avec PHP et Apache.

Il est possible que error_reporting soit désactivé. Si vous le faites, PHP essaie peut-être de générer une erreur indiquant que des espaces sont envoyés avant votre commande d'en-tête.

Avant la commande header(), en essayant la mise error_reporting(E_ALL);, et vérifier si elle donne un message d'erreur au succès de

Headers could not be sent. Headers have already been sent on file.php line 1. 

Fondamentalement, si vous envoyez un code HTML, Whitespace, ou à peu près toute sorte de sortie avant la commande header(), PHP va erreur car les en-têtes doivent être envoyés avant le contenu de la page. Après le premier envoi des espaces, les en-têtes sont envoyés, et vous ne pouvez plus envoyer

Vous pouvez vérifier si les en-têtes sont envoyés à l'aide header_sent()

if(headers_sent()){ echo "Headers Sent"; } 
+0

Je l'ai fait, et je reçois le message de 'redirection', donc je sais qu'il essaie de le faire. .. – phpN00b

0

Assurez-vous que la réponse n'a pas encore été engagée à la page en cours avant de faire cet appel d'en-tête. Cela se produirait si un texte quelconque avait déjà été écrit dans le flux de sortie ... texte, espace, etc.

Questions connexes