Обнаружение Javascript внутри браузера PHP

#php #javascript #cookies

#php #javascript #файлы cookie

Вопрос:

Кто-нибудь может сказать мне, почему я продолжаю получать else и alert вообще не срабатывает? Файл cookie устанавливается только при открытом браузере.

 <?php
$setcookie = setcookie('version', 'nova');
$browser = get_browser(null, true);
    if(!isset($setcookie)){
        if($browser["MSIE"] < 8.0){
        // display message or alert!

               echo "<script language="JavaScript">n"; 
               echo 'alert("Please upgrade to version 8.0  in order to view this site.");';
               echo "</script>";
        }
       }

        else

        {
            echo "Browser is current:";
        }

?>
  

Комментарии:

1. Это требует базовой отладки. Что $browser содержит? Выполните print_r($browser); и опубликуйте результаты здесь (если они еще не ответили на ваш вопрос)

2. попробуйте использовать < 8 вместо 8.0 и выполните var_dump($browser) вместо print_r, чтобы увидеть, какой тип переменной он вернет.

3. print_r ничего не возвращает. var_dump возвращает значение bool(false). Спасибо

Ответ №1:

Ваше if условие неверно. Вы хотите проверить $_COOKIE массив, а не возвращаемое значение setcookie .

 if(!isset($_COOKIE['version'])) {
  ...
}
  

Ответ №2:

Я не думаю, что get_browser() возвращает то, что, по вашему мнению, возвращает? Смотрите руководство:http://php.net/manual/en/function.get-browser.php

Вы хотите взглянуть на поля [browser] и [version] .

Ответ №3:

Метод PHP get_browser() работает очень медленно. Лучше использовать что-то вроде

 $useragent = $_SERVER['HTTP_USER_AGENT']; 
  

затем вы можете выполнить некоторое preg_match, как показано ниже

 if(preg_match('/MSIE/i',$useragent)){
    //echo something here
}
else{
    //do something else
}
  

Комментарии:

1. по-прежнему отображается текущий браузер. насколько сильно это может мигать. очевидно, что моя логика if где-то неверна, но я не могу ее увидеть. Спасибо

2. правильно ли это для версии браузера в вашем коде? if(preg_match(‘/MSIE 7.0/i’,$useragent)) спасибо

3. зависит от того, какой вывод выдает $ useragent. вам нужно будет экранировать пробел как MSIE 7.0

4. это то, что я использую. if(preg_match(‘/MSIE 7.0 /i’,$useragent)) есть ли способ протестировать разные версии. ie6 / 7 / 8 и т.д. спасибо

5. Протестируйте вывод $ useragent в разных браузерах, найдите шаблон ie6 / ie7 / ie8. Я уверен, что немного погуглив, вы получите то, что хотите.