Исключить ie6 из php include - PullRequest
0 голосов
/ 29 марта 2011

У меня есть скрипт, который отлично работает во всех браузерах, кроме ie6 (включая ie7 и ie8).Есть ли какой-нибудь полу надежный способ, которым я могу исключить этот гнусный браузер.

Я пробовал это:

<!--[if !IE 6]>
<?php include("fconditionals.php"); ?>
<![endif]-->

и это:

$user_agent = getenv("HTTP_USER_AGENT");
if (preg_match("MSIE 6", $user_agent)) 
{ 
include("fconditionals.php");
}

Ответы [ 3 ]

2 голосов
/ 29 марта 2011

Первая версия никогда не будет работать. PHP заботится только о <?php ?> парах и полностью игнорирует что-либо вне их. Условные комментарии IE используются только браузером, поэтому включение будет выполняться на сервере каждый раз.

Во второй версии логика обратная - вы включаете файл каждый раз, когда IE6 обнаруживается. Вы бы хотели !preg_match вместо. Однако помните, что строка пользовательского агента находится под контролем пользователя и может быть подделана / взломана / подменена. Нет 100% надежного метода обнаружения удаленного браузера, который нельзя каким-либо образом подорвать.

1 голос
/ 29 марта 2011
if (!strstr($_SERVER['HTTP_USER_AGENT'],"MSIE 6") 
{ 
    include("fconditionals.php");
}
1 голос
/ 29 марта 2011

Первое, что вы попробовали (условные комментарии), не сработает, потому что включение выполняется на сервере во время создания страницы, а условные комментарии проверяются браузером только после загрузки страницы.

Условные комментарии не позволят сгенерированному коду отображаться в IE6, но он все равно будет выполняться сервером.

Кроме того, условные комментарии в формате, который вы здесь использовали, будуттакже исключите код из всех браузеров, отличных от IE.Если вы хотите повлиять только на IE, вам нужно переформатировать его, чтобы другие браузеры не обрабатывали код внутри как комментарий, используя синтаксис <![if !IE 6]> вместо <!--[if !IE 6]>.

Этот метод по-прежнему не остановит выполнение кода на сервере.

Второй метод, который вы попробовали, скорее всего будет ближе к тому, что вы на самом деле хотите сделать.Однако обратите внимание, что хотя PHP и получает строку USER_AGENT, в большинстве браузеров возможно подделать USER_AGENT, и некоторые продукты для обеспечения конфиденциальности и безопасности активно удаляют его, как и некоторые веб-прокси.Другими словами, строка USER_AGENT не является на 100% надежным способом определения того, какой браузер кто-то использует.

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

Причина, по которой это не сработало для вас, состоит в том, что ваш код включает только IE6, а не , исключая .Вам необходимо добавить оператор not (!) перед preg_match().

Кстати: в вашем примере кода у вас есть $user_agent = getenv("HTTP_USER_AGENT");.Стоит отметить, что $_SERVER['USER_AGENT'] уже доступна как переменная, вам не нужно использовать getenv ().

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