пытаясь перенаправить на внешний сайт с php - PullRequest
0 голосов
/ 18 января 2010

Я пытаюсь перенаправить мобильных пользователей и пытаюсь выполнить следующее, но на самом деле это вообще не перенаправляет ...

$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;
    }

}

Ответы [ 2 ]

2 голосов
/ 18 января 2010

Возможно, вы захотите сначала повторить Attempting to Redirect вместо заголовка, чтобы вы могли увидеть, пытается ли он кого-то перенаправить. Таким образом, вы можете проверить, работает ли первая половина функции.

Вот сообщение в блоге о чем-то очень похожем на то, что вы делаете, в котором вместо stg_match используется strpos, что, вероятно, более просто.

Если это не «перенаправление», AKA, функция header, похоже, не работает, у вас есть другая проблема.


Если функция header не работает, попробуйте добавить Firefox в список браузеров для перенаправления, а затем используйте Firebug для проверки заголовков, отправляемых в браузер.

Возможно, проблема в том, как взаимодействуют PHP и Apache.

Есть вероятность, что у вас error_reporting выключен. Если вы это сделаете, PHP может попытаться вывести ошибку, которая говорит, что перед вашей командой заголовка есть пробелы.

Перед командой header(), попробуйте установить error_reporting(E_ALL); и проверьте, не выдает ли она сообщения об ошибках, чтобы воспользоваться

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

В основном, если вы отправляете какой-либо HTML, пробел или какой-либо другой вывод перед командой header(), PHP выдаст ошибку, так как заголовки должны быть отправлены до содержимого страницы. После отправки первого пробела отправляются заголовки, и вы больше не можете отправлять

Вы можете проверить, отправляются ли заголовки, используя header_sent()

if(headers_sent()){ echo "Headers Sent"; }
0 голосов
/ 18 января 2010

Убедитесь, что ответ еще не зафиксирован на текущей странице, прежде чем выполнять этот вызов заголовка. Это произошло бы, если какой-либо текст уже был записан в выходной поток ... текст, пробел и т. Д.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...