Heredoc技术,也叫字符串输出技术,在正规的PHP文档中和技术书籍中一般没有详细讲述,只是提到了这是一种Perl风格的字符串输出技术。之前在研究PW模板中经常发现,但一直不明白原理,其实这就是一种大量字符串输出的技术,这种技术不仅能大量输出字符串,而且还能实现了界面与代码的准分离,phpwind模板就是巧妙了使用这种技术,一个典型的例子!
举个简单的例子:

echo EOT<<<;
<span id="name" class="use">My name is Tom</span>
EOT;

这样就输出一段span 可以看出里面照样可以使用双引号。也就是说在EOT«<与EOT之间字符串可以按照HTML格式写,不需要转义,而且易于阅读。

既然有这么方便的东西,不是就可以当作模板吗?看下下面这个模板页面name.html

<!--<?php
$name = 'Tom';
print <<<EOT
-->
<html> 
<head> 
<meta http-equiv="Content-Type" content="text/html; charset=gb2312" /> 
<title>Untitled Document</title> 
</head> 
<body> 
Hello,$name! 
</body> 
</html>
<!--<?php
EOT;
?>-->

如果采用php页面include ‘name.html’;结果输出Hello,Tom;
而如果直接访问HTML;输出Hello,说明PHP部分被注释了。

但是使用heredoc要注意几点:

1.以«<EOT开始标记开始,开始标记后面不能有空格,以EOT;结束标记结束,结束标记必须顶头写,不能有缩进和空格,且在结束标记末尾要有分号。之前因为养成了良好的缩进情况,一直无法正常解析,百思不得其解。。开始标记和开始标记相同,比如常用大写的EOT、EOD、EOF来表示,但是不只限于那几个,只要保证开始标记和结束标记不在正文中出现即可。

2.位于开始标记和结束标记之间的变量可以被正常解析,但是函数则不可以。在heredoc中,变量不需要用连接符.或,来拼接,如果是数组需使用{}:如’Hi’$name, {$arrSet[‘name’]}。

Nginx 自动禁止爬虫IP采集

### 背景最近我们有一个公开服务提供给客户查询关键词的热度值,由于这个API做在官方网站上,自然没有用户登陆,也没有很高查询成本,所以设计上没有任何鉴权无法进行身份认定,于是就被一个爬虫开了超高并发请求,直接后端的AWS Tomcat CPU被用尽,导致无法响应。爬虫显然...… Continue reading

Redis原子性事务Lua应用

Published on June 28, 2020