【问题标题】:Determine if a visitor is not a bot/crawler with Smarty使用 Smarty 确定访问者是否不是机器人/爬虫
【发布时间】:2016-06-27 13:42:08
【问题描述】:

我们如何使用 Smarty 的 v3 模板 (.tpl) 文件系统确定访问我们网站的访问者是否不是机器人或爬虫?

以 PHP 为例,一个简单的解决方案是:

if (!preg_match('/bot|proxy|crawl|slurp|spider/i', $_SERVER['HTTP_USER_AGENT'])){ }

是否有任何简单的方法可以直接在 smarty.net 的模板文件中执行此操作?

【问题讨论】:

  • 不可能达到 100% 的准确度
  • 尝试使用验证码。

标签: php smarty smarty3


【解决方案1】:

Smarty 是模板引擎,它的目的是做演示,但它也可以做逻辑,然后,它的意义不大,让你的代码更加依赖,因此更难更改。

你能做什么?

最好的解决办法,就是将经过处理逻辑的模板赋值给Smarty的变量,例如:

PHP:

$smarty->assign('is_bot', preg_match('/bot|proxy|crawl|slurp|spider|^$/i', $_SERVER['HTTP_USER_AGENT'])));

模板:

{if !$is_bot}
    <!-- non bot stuff -->
{/if}

除上述之外,您还可以创建Smarty Plugin。这很容易做到。示例:

Smarty 插件:

<?php
function smarty_function_isBot(array $params, Smarty_Internal_Template $template)
{
    return preg_match('/bot|proxy|crawl|slurp|spider|^$/i', $_SERVER['HTTP_USER_AGENT']));
}
?>

模板:

{isBot}

使用条件

{if isBot}
    <!-- non bot stuff -->
{/if}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-11-23
    • 1970-01-01
    • 2015-11-16
    • 1970-01-01
    • 2012-12-31
    • 2011-02-24
    • 2020-11-03
    相关资源
    最近更新 更多