Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/277.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP重定向不工作(基于用户代理字符串)_Php_User Agent - Fatal编程技术网

PHP重定向不工作(基于用户代理字符串)

PHP重定向不工作(基于用户代理字符串),php,user-agent,Php,User Agent,我正在运行以下重定向脚本: <?php $badAgents = array('Mozilla/5.0 (Windows NT 6.1; WOW64; rv:25.0) Gecko/20100101 Firefox/25.0'); if(in_array($_SERVER['HTTP_USER_AGENT'],$badAgents)) { require("1.php"); } else { require("2.php"); } ?> 然而,不管用户代理如何,每个访问者都会被

我正在运行以下重定向脚本:

<?php
$badAgents = array('Mozilla/5.0 (Windows NT 6.1; WOW64; rv:25.0) Gecko/20100101 Firefox/25.0');
if(in_array($_SERVER['HTTP_USER_AGENT'],$badAgents)) {
require("1.php");
} else {
require("2.php");
}
?>

然而,不管用户代理如何,每个访问者都会被发送到“2.php”。例如,我进入Firefox,我进入2.php,我进入InternetExplorer,我看到2.php

请有人告诉我我做错了什么

感谢您抽出时间来检查我们的逻辑

以下是您正在使用的伪逻辑:

  • 如果用户的用户代理不正确,则需要1.php
  • 如果用户没有错误的用户代理,则需要2.php
除非用户使用完全正确的Firefox版本访问您的页面,否则您使用的代码将不会使用1.php

我还建议您按如下方式更改代码:

if (stripos($_SERVER['HTTP_USER_AGENT'], 'firefox') === false) {
    require '2.php';
} else {
    require '1.php';
}

您的字符串有点太长,无法匹配。最好只过滤短而显式的字符串,如Firefox

<?php
if(stripos($_SERVER['HTTP_USER_AGENT'], 'firefox') !== false)) {
    require("1.php");
} else {
    require("2.php");
}
?>

使用该代理字符串太具体了。这个确切的字符串将只匹配Windows7x64上的Firefox25.0(可能在引擎版本中更具体)。尝试扩大搜索范围。查找浏览器搜索字符串以获得最佳方式。我使用了该特定字符串作为示例,以查看在FF中访问时重定向是否对我的计算机有效,但它没有…尝试使用函数
get\u browser
Alexander:请您根据“get\u browser”函数为我重写代码好吗?我的PHP技能甚至不够基本:(你能把
echo'::',$服务器['HTTP\u用户\代理],':',$badAgents[0],“::”,PHP_EOL;
if
之前,向我们展示确切的输出谢谢你的回复和帮助。但是我肯定遗漏了一些东西。正如你所说,我更新了代码,但是现在如果我在FF中访问,我会转到1.PHP,或者如果我在IE中访问,我会转到1.PHP。这两种方式都是相同的PHP重定向。我使用这样一个特定的用户代理的目的只是作为一个例子在我的电脑上,你也可以单独检查“firefox/25.0”,而不仅仅是“firefox”。这并不能解释OPs代码(他使用自己的UA)不起作用的原因。我的声明暗示了这一点:“除非用户使用完全正确的firefox版本访问你的页面,否则你使用的代码将不会使用1.php。”但是,你是对的。我没有直接出来说,“你可能没有检查正确的UA。”谢谢你的回复,但是现在一切都将再次转到2.php,不管我是使用Firefox还是IE。尽管如此……我有7个非常特定的用户代理,我想在我的网站上阻止它们……我不会用它来降低HTTP_user_代理的所有输入。也许你应该实现一些测试输出来查看字符串是否匹配以及输入值是什么。
Mozilla/5.0(Windows;U;Windows NT 5.1;de de;rv:1.7.Gecko/20050511 Firefox/1.0.4
这是一个普通的用户代理字符串。Firefox字符串的末尾是Firefox和版本。是的,很抱歉……我还没有发送我的编辑。in_数组在这里不起作用……如果你真的需要数组,你可以尝试array_搜索。但是使用stripos更容易。