Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/254.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
Javascript OS检测-空变量_Javascript_Php - Fatal编程技术网

Javascript OS检测-空变量

Javascript OS检测-空变量,javascript,php,Javascript,Php,我试图实现的是触发基于用户操作系统的自动文件下载。通过下面的代码,我得到了空字符串(而文件应该有url)和页面刷新循环 e、 g 有人能告诉我我做错了什么吗 操作系统检测: <?php $user_agent = $_SERVER['HTTP_USER_AGENT']; function getOS() { global $user_agent; $os_platform = "Unknown OS Platform"; $os_array =

我试图实现的是触发基于用户操作系统的自动文件下载。通过下面的代码,我得到了空字符串(而文件应该有url)和页面刷新循环

e、 g

有人能告诉我我做错了什么吗

操作系统检测:

<?php 
$user_agent = $_SERVER['HTTP_USER_AGENT'];

function getOS() { 

    global $user_agent;

    $os_platform  = "Unknown OS Platform";

    $os_array     = array(
                          '/windows nt 10/i'      =>  'Windows 10',
                          '/windows nt 6.3/i'     =>  'Windows 8.1',
                          '/windows nt 6.2/i'     =>  'Windows 8',
                          '/windows nt 6.1/i'     =>  'Windows 7',
                          '/windows nt 6.0/i'     =>  'Windows Vista',
                          '/windows nt 5.2/i'     =>  'Windows Server 2003/XP x64',
                          '/windows nt 5.1/i'     =>  'Windows XP',
                          '/windows xp/i'         =>  'Windows XP',
                          '/windows nt 5.0/i'     =>  'Windows 2000',
                          '/windows me/i'         =>  'Windows ME',
                          '/win98/i'              =>  'Windows 98',
                          '/win95/i'              =>  'Windows 95',
                          '/win16/i'              =>  'Windows 3.11',
                          '/macintosh|mac os x/i' =>  'Mac OS X',
                          '/mac_powerpc/i'        =>  'Mac OS 9',
                          '/linux/i'              =>  'Linux',
                          '/ubuntu/i'             =>  'Ubuntu',
                          '/iphone/i'             =>  'iPhone',
                          '/ipod/i'               =>  'iPod',
                          '/ipad/i'               =>  'iPad',
                    );

    foreach ($os_array as $regex => $value)
        if (preg_match($regex, $user_agent))
            $os_platform = $value;

    return $os_platform;
}

if( substr(getOS(), 0, 6) === 'Windows' ){
    $file = 'https://path-to-file.exe';
}
else if( substr(getOS(), 0, 2) === 'Mac'  ){
    $file = 'https://path-to-file.dmg';
}
else if( substr(getOS(), 0, 4) === 'Linux'  ){
    $file = 'https://path.air';
}
else{
}
?>

自动下载触发器:

var downloadTimeout = setTimeout(function () {
    window.location = '<?php echo $file; ?>';
}, 500);
var downloadTimeout=setTimeout(函数(){
window.location='';
}, 500);

我找到了一个适合我的小方法。没什么特别的,只是个想法


getOS()运行良好,与我的操作系统相呼应;基于$os_数组中的选项,因此我将链接放在了我的文件上,而不是放在了os名称上,并使用了getOS而不是$file变量。丑陋,但至少可以工作

那么,
$file
在哪里初始化并返回?你的
.php
决定了操作系统,但是没有向客户端发送URL来重新定位。我认为你的浏览器嗅探解决方案非常好。虽然所有这些if-else语句都可以简化为一个很好的switch-statement.OT,但是:为什么要经历这么多麻烦,只给我一个我可能根本不想要的文件呢?我可能只是来下载一个系统的文件,使用另一个。。。在一个简单的链接列表和适当的描述会做得更好的情况下,你会使事情变得过于复杂,并从本质上降低用户体验。可能建议或突出显示最可能需要的文件,但保留其他选项,所有选项由用户选择。@CBroe据我们所知,用户在单击“将我带到操作系统的相应下载页”的链接后到达此页面.@Barmar听起来像我刚开始说的。这个答案真的很难理解。演示如何重写代码以解决问题。
var downloadTimeout = setTimeout(function () {
    window.location = '<?php echo $file; ?>';
}, 500);