如何将get_browser()从PHP移植到ColdFusion?

如何将get_browser()从PHP移植到ColdFusion?,php,coldfusion,browser-detection,Php,Coldfusion,Browser Detection,取决于的browscap.ini位于 有人知道如何将看似简单的代码移植到CFML吗 谢谢 解决了 这是基于并优化了性能,提高了正确性 它仍然非常慢(~1s),因为使用ColdFusion处理ini文件意味着每个getProfileString()都是磁盘I/O!使用SSD可能会更快。:) 可能会有帮助:@Dagon thx,我依靠browserDetect()来存储一些访客统计数据,但最近它返回了很多(未知)智能手机/平板电脑,这些都是孩子们喜欢尝试的令人兴奋的新东西。perhapsOne尝试:

取决于的
browscap.ini
位于

有人知道如何将看似简单的代码移植到CFML吗


谢谢

解决了

这是基于并优化了性能,提高了正确性

它仍然非常慢(~1s),因为使用ColdFusion处理ini文件意味着每个
getProfileString()
都是磁盘I/O!使用SSD可能会更快。:)


可能会有帮助:@Dagon thx,我依靠
browserDetect()
来存储一些访客统计数据,但最近它返回了很多(未知)智能手机/平板电脑,这些都是孩子们喜欢尝试的令人兴奋的新东西。perhapsOne尝试:那么这种尝试有效吗?:/“如何将[any function]从PHP移植到ColdFusion?”的答案是“查看PHP代码并编写等效的CFML代码”。如果您需要有用的帮助,您需要更精确地了解您遇到的问题是什么……在这里使用自定义INI解析器将其转换为快速的CFC:这需要
browscap.INI
。网站
http://browsers.garykeith.com/
似乎已关闭
github.com
没有示例
function get_browser(user_agent=CGI.HTTP_USER_AGENT, browscap_ini=expandPath("./browscap.ini"))
{
    var result = {};

    // Read wildcard patterns from the INI file
    var browscap_list = getProfileSections(browscap_ini);

    // Seed some variables
    var browser_champion_pattern = "*";

    // Loop through the patterns to find the best match (relative to length of name pattern)
    for (var browser_name_pattern in browscap_list)
    {
        if (len(browser_name_pattern) >= len(browser_champion_pattern))
        {
            // Massage the wildcard into useable regex
            var browser_name_regex = replaceList(browser_name_pattern, ".,*,?,(,),[,]", "\.,.*,.,\(,\),\[,\]");

            if (left(browser_name_pattern, 1) != "*")
                browser_name_regex = "^" & browser_name_regex;

            if (right(browser_name_pattern, 1) != "*")
                browser_name_regex &= "$";

            // Test the resulting regex against the user agent
            if (reFindNoCase(browser_name_regex, user_agent))
                browser_champion_pattern = browser_name_pattern;
        }
    }

    // Set the winning regex patterns
    var browser_name_pattern = browser_champion_pattern;

    // Fetch the winning info
    var keynames = listToArray(browscap_list[browser_champion_pattern]);
    for (var keyname in keynames)
        result[keyname] = getProfileString(browscap_ini, browser_champion_pattern, keyname);

    // Fetch the rest of the info from parents
    while (structKeyExists(result, "parent"))
    {
        var parent = result.parent;

        structDelete(result, "parent");

        var keynames = listToArray(browscap_list[parent]);
        for (var keyname in keynames)
            if (!structKeyExists(result, keyname))
                result[keyname] = getProfileString(browscap_ini, parent, keyname);
    }

    return result;
}