Bind DNS forward

options {
listen-on port 53 { any; };
listen-on-v6 port 53 { any; };
directory “/var/named”;
dump-file “/var/named/data/cache_dump.db”;
statistics-file “/var/named/data/named_stats.txt”;
memstatistics-file “/var/named/data/named_mem_stats.txt”;
secroots-file “/var/named/data/named.secroots”;
recursing-file “/var/named/data/named.recursing”;
allow-query { any; };

/*
– If you are building an AUTHORITATIVE DNS server, do NOT enable recursion.
– If you are building a RECURSIVE (caching) DNS server, you need to enable
recursion.
– If your recursive DNS server has a public IP address, you MUST enable access
control to limit queries to your legitimate users. Failing to do so will
cause your server to become part of large scale DNS amplification
attacks. Implementing BCP38 within your network would greatly
reduce such attack surface
*/
recursion yes;

forward only;
forwarders {192.168.3.1;192.168.2.1;192.168.1.1;180.76.76.76;};

dnssec-enable no;
dnssec-validation no;

managed-keys-directory “/var/named/dynamic”;

pid-file “/run/named/named.pid”;
session-keyfile “/run/named/session.key”;

/* https://fedoraproject.org/wiki/Changes/CryptoPolicy */
include “/etc/crypto-policies/back-ends/bind.config”;
};

屏幕放大缩小及标注神器【Zommit】

Zoomit是一个非常实用的电脑屏幕放大镜与屏幕缩放绘图注释工具,可用于投影演示辅助,通过Zoomit,可以运行热键激活放大与直接在屏幕上划线的功能。Zoomit唯有一个exe文件,完全免费、易于使用。通过快捷键可以很方便地调用Zoomit三项功能: 屏幕放大、屏幕注释、定时提醒。

功能1:屏幕缩放

按下快捷键(默认Ctrl+1),进入放大模式:

1、用鼠标滚轮或者上下方向键,可以改变放大比例。
2、屏幕内容将放大后(默认2倍)显示。
3、移动光标,放大区域将随之改变。
4、按下Esc键 或 鼠标右键,会退出放大模式。
5、Ctrl+S:保存标注或者放大后的画面。

功能2:屏幕标注

按下快捷键(默认Ctrl+2),或在放大模式下按下鼠标左键,可进入标注模式:

1、按住Ctrl键,使用鼠标滚轮或者上下箭头键调整画笔的粗细。
2、画笔颜色:R红色;G绿色;B蓝色;O橙色;Y黄色;P粉色。
3、不同快捷键可画出不同的形状:
按住Shift键可以画出直线;
按住Ctrl键可以画出长方形;
按住Tab键可以画出椭圆形;
Shift+Ctrl 可以画出箭头
4、Ctrl+Z:撤销最后的标注。
————————————————

下载地址:

https://learn.microsoft.com/zh-cn/sysinternals/downloads/zoomit

或者在这里下载;

https://www.onlinedown.net/soft/1107133.htm

或者从这里下载:

https://live.sysinternals.com/ZoomIt.exe

PhpSpreadsheet直接复制即可用免安装版

在网上找了很久,终于找到一个牛人搞的不用composer,可以直接放到虚拟空间里使用的版本。然后更新成最新的PhpSpreadsheet Master版,打包方便大伙下载。

下载地址:http://cdn.it09.com/wap/PhpSpreadsheet.zip

再送一段可以直接使用的代码:

<?php
//读取所有MYSQL数据输出到Xlsx文件。
namespace PhpOffice;
include( __DIR__ .”/includes/PhpSpreadsheet/PhpOffice/autoload.php”);
use PhpOffice\PhpSpreadsheet\Spreadsheet;
use PhpOffice\PhpSpreadsheet\Style\Alignment;
//use PhpOffice\PhpSpreadsheet\Reader\Xlsx;
use PhpOffice\PhpSpreadsheet\Writer\Xlsx;
use PhpOffice\PhpSpreadsheet\Style\Border;
use PhpOffice\PhpSpreadsheet\Style\Color;
use PhpOffice\PhpSpreadsheet\IOFactory;
//读取模板
$spreadsheet = IOFactory::load( __DIR__ .’/upload/11.xlsx’);
// 读取第一个工作表
$excelSheet = $spreadsheet->getSheet(0);
include( __DIR__ .’/mysql.php’);//这个是数据库连接
$sql=’SELECT * ************;’;//MYSQL查询指令
$result=ReadSQL($sql);
$i=1;
set_time_limit(0);//0表示不限时
foreach($result as $result1)
{
for($j=65;$j<=90;$j++)
{
//$excelSheet->getCell(chr($j).$i)->setValueExplicit($result1[‘Ziduan’.($j-64)],DataType::TvalueYPE_STRING);
if($j==66)
$excelSheet->setCellValue(chr($j).$i, “‘”.$result1[‘Ziduan’.($j-64)]);
//$excelSheet->getStyle(chr($j).$i)->getNumberFormat()->setFormatCode(\PhpOffice\PhpSpreadsheet\Style\NumberFormat::FORMAT_TEXT);//设为文本格式。
else
$excelSheet->setCellValue(chr($j).$i, $result1[‘Ziduan’.($j-64)]);
}$i++;
}
$filename = time().”.xlsx”;
//直接输出到浏览器
ob_end_clean();
header(‘Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet’);
header(‘Content-Disposition: attachment;filename=”‘.$filename.'”‘);
header(‘Cache-Control: max-age=0’);
$writer = \PhpOffice\PhpSpreadsheet\IOFactory::createWriter($spreadsheet , ‘Xlsx’);
$writer->save(‘php://output’);
die;//至此完美解决直接输出到浏览器的问题。

下载地址:http://cdn.it09.com/wap/PhpSpreadsheet.zip

NAT1 NAT2 NAT3 NAT4 四种类型区别

NAT是Network Address Translation的缩写,也就是网络地址转换的意思。NAT是将IP数据包头中的IP地址转换为另一个IP地址的过程。可以简单连接为将局域网转换为公网,只有公网才能在互联网传输。无线路由器就充当了NAT、无线AP和交换机三个功能。

NAT1:

Full Cone NAT,全锥形NAT,这是最宽松的网络环境,你想做什么,基本没啥限制IP和端口都不受限。

NAT2:

Address-Restricted Cone NAT,受限锥型NAT,相比NAT1,NAT2 增加了地址限制,也就是IP受限,而端口不受限。

NAT3:

Port-Restricted Cone NAT,端口受限锥型,相比NAT2,NAT3 又增加了端口限制,也就是说IP、端口都受限

NAT4:

Symmetric NAT,对称型NAT,对称型NAT具有端口受限锥型的受限特性,内部地址每一次请求一个特定的外部地址,都可能会绑定到一个新的端口号。也就是请求不同的外部地址映射的端口号是可能不同的。这种类型基本上就告别 P2P 了。

注意:路由器层数越少越好,这样可能得到NAT1和NAT2两类NAT类型。NAT1是最宽松的网络环境,基本没限制。NAT4是最严格的网络环境,可能会玩不了游戏、下载都没速度,一般,我们家里的上网如果是光猫桥接再用无线路由器拨号上网的基本是NAT2和NAT3对看网页、游戏及下载都没有太多限制。

PHP生成指定个数的EXCEL列名

//生成指定个数的EXCEL列名
function loop($num=150){
$loop = 0;
$charnum = 65;
$arr=array();
for(; $loop < $num; $loop++){ $quotient = intval($loop / 26); $remainder = $loop % 26; $f = $quotient>0? chr($charnum+$quotient-1) : ”;
$s = $remainder>=0? chr($charnum+$remainder) : ”;
$arr[]=$f.$s;
//这是输出校验,不必要时可以删除。
echo $loop .’ | ‘. $quotient .’ | ‘. $remainder .’ | ‘. $f . $s .”
“;
}
return $arr;
}

返回一维数组。

更加安全的PHP——PHP8新特性介绍

随着2020年11月26日开发者峰会的结束,php开发团队也宣布 PHP 8 正式发布。PHP8作为PHP语言的一个主版本更新,带来了相当多的新功能和优化项包括命名参数、联合类型、注解、构造器属性提升、match 表达式、nullsafe 运算符、JIT,并改进了类型系统、错误处理、语法一致性等。其中大部分内容都与安全和性能有关,那就让我们来看一下这个新版本的PHP有何不同吧。

PHP8前的PHP

PHP作为一门已经存在了26年的编程语言,可以说是比较长寿的语言了。但是作为一门长寿的语言,他有些与时代脱节了。在运行效率上,不如C语言java语言这样的编译型语言。在安全性上因为使用的人数比较多,所以被发现漏洞的几率也就越多。同时因为语法宽松,发现的漏洞也就更多了,最近版本的PHP7就曾爆出过重大漏洞,如果对安全有较高要求的话,PHP将不再是首选的语言。鉴于这些原因,PHP8的优化方向主要是性能和安全。

PHP8新特性

接下来我们来介绍一下PHP8的新特性,了解一下它做了什么更新。

 如果你是初学者,不想关注php8的新特性,或者已经知道了这些新特性,可以直接跳过接下来的一大段介绍,但是相信我,看完这些介绍你会对PHP有一个大的改观。

命名参数

在PHP7中,命名参数的写法为:

htmlspecialchars($string, ENT_COMPAT | ENT_HTML401, 'UTF-8', false);

在PHP8中,命名参数优化为:

htmlspecialchars($string, double_encode: false);
  • 仅仅指定必填参数,跳过可选参数。
  • 参数的顺序无关、自己就是文档(self-documented)

注解

在PHP7中,注解的写法为:

class PostsController
{
    /**
     * @Route("/api/posts/{id}", methods={"GET"})
     */
    public function get($id) { /* ... */ }
}

在PHP8中,注解写法优化为:

class PostsController
{
    #[Route("/api/posts/{id}", methods: ["GET"])]
    public function get($id) { /* ... */ }
}

现在可以用 PHP 原生语法来使用结构化的元数据,而非 PHPDoc 声明。

构造器属性提升

在PHP7中,构造器的写法为:

class Point {
  public float $x;
  public float $y;
  public float $z;
  public function __construct(
    float $x = 0.0,
    float $y = 0.0,
    float $z = 0.0
  ) {
    $this->x = $x;
    $this->y = $y;
    $this->z = $z;
  }
}

在PHP8中,构造器的写法优化为:

class Point {
  public function __construct(
    public float $x = 0.0,
    public float $y = 0.0,
    public float $z = 0.0,
  ) {}
}

现在可以用更少的样板代码来定义并初始化属性。

联合类型

在PHP7中,联合类型的写法为:

class Number {
  /** @var int|float */
  private $number;
  /**
   * @param float|int $number
   */
  public function __construct($number) {
    $this->number = $number;
  }
}
new Number('NaN'); // Ok

在PHP8中,联合类型的写法优化为:

class Number {
  public function __construct(
    private int|float $number
  ) {}
}
new Number('NaN'); // TypeError

相较于以前的 PHPDoc 声明类型的组合, 现在可以用原生支持的联合类型声明取而代之,并在运行时得到校验。

Match表达式

在PHP7中,match表达式的写法为:

switch (8.0) {
  case '8.0':
    $result = "Oh no!";
    break;
  case 8.0:
    $result = "This is what I expected";
    break;
}
echo $result;
//> Oh no!

在PHP8中,match表达式的写法优化为:

echo match (8.0) {
  '8.0' => "Oh no!",
  8.0 => "This is what I expected",
};
//> This is what I expected

新的 match 类似于 switch,并具有以下功能:

  • Match 是一个表达式,它可以储存到变量中亦可以直接返回。
  • Match 分支仅支持单行,它不需要一个 break; 语句。
  • Match 使用严格比较。

Nullsafe运算符

在PHP7中,nullsafe运算符的写法为:

$country =  null;
if ($session !== null) {
  $user = $session->user;
  if ($user !== null) {
    $address = $user->getAddress();
 
    if ($address !== null) {
      $country = $address->country;
    }
  }
}

在PHP8中,Nullsafe运算符的写法优化为:

$country = $session?->user?->getAddress()?->country;

现在可以用新的 nullsafe 运算符链式调用,而不需要条件检查 null。 如果链条中的一个元素失败了,整个链条会中止并认定为 Null。

字符串与数字的比较逻辑

在PHP7中,字符串与数字的比较逻辑是这样的:

0 == 'foobar' // true

在PHP8中,字符串与数字的比较逻辑是这样的:

0 == 'foobar' // false

PHP 8 比较数字字符串(numeric string)时,会按数字进行比较。 不是数字字符串时,将数字转化为字符串,按字符串比较。

内部函数类型错误的一致性

在PHP7中,内部函数类型错误是这样的:

strlen([]); // Warning: strlen() expects parameter 1 to be string, array given
array_chunk([], -1); // Warning: array_chunk(): Size parameter expected to be greater than 0

在PHP8中对此进行了优化:

strlen([]); // TypeError: strlen(): Argument #1 ($str) must be of type string, array given
array_chunk([], -1); // ValueError: array_chunk(): Argument #2 ($length) must be greater than 0

现在大多数内部函数在参数验证失败时抛出 Error 级异常。

即时编译

PHP 8 引入了两个即时编译引擎。 Tracing JIT 在两个中更有潜力,它在综合基准测试中显示了三倍的性能, 并在某些长时间运行的程序中显示了 1.5-2 倍的性能改进。 典型的应用性能则和 PHP 7.4 不相上下。

关于 JIT 对 PHP 8 性能的贡献

Just-In-Time compilation

类型系统与错误处理的改进

  • 算术/位运算符更严格的类型检测 RFC
  • Abstract trait 方法的验证 RFC
  • 确保魔术方法签名正确 RFC
  • PHP 引擎 warning 警告的重新分类 RFC
  • 不兼容的方法签名导致 Fatal 错误 RFC
  • 操作符 @ 不再抑制 fatal 错误。
  • 私有方法继承 RFC
  • Mixed 类型 RFC
  • Static 返回类型 RFC
  • 内部函数的类型 Email thread
  • 扩展 Curl、 Gd、 Sockets、 OpenSSL、  XMLWriter、 XML 以 Opaque 对象替换 resource。

其他语法调整和改进

  • 允许参数列表中的末尾逗号 RFC、 闭包 use 列表中的末尾逗号 RFC
  • 无变量捕获的 catch RFC
  • 变量语法的调整 RFC
  • Namespace 名称作为单个 token RFC
  • 现在 throw 是一个表达式 RFC
  • 允许对象的 ::class RFC

新的类、接口、函数

是否升级到PHP8?

PHP 8是一个新的大版本,很多代码的写法都进行了优化,如果要将项目升级为PHP8,代码被破坏的可能性更高,不过如果你使用的是最新版本的PHP,升级起来就会比较轻松,因为其中的大多数重大更改在PHP7中已经弃用。

小结

纵观近年来PHP占有率下滑,既有外部对手强大的原因,也有PHP自身不足的原因。PHP8作为新版本的PHP,它的目标就是让PHP保住市场占有量,所以小编还是很期待PHP8给小编带来的开发体验的。

以上就是关于PHP 8新特性的全部介绍,更多PHP学习内容可以关注W3Cschool

原文地址:https://www.w3cschool.cn/article/41824727.html

学习资源:自相矛盾

自相矛盾,汉语成语,拼音是zì xiāng máo dùn。意思是比喻自己说话做事前后抵触。出自《韩非子·难一》。
出自于《韩非子》,讲的是:有一个楚国人卖矛又卖盾,说他的盾坚固得很,不管是用什么矛都戳不穿,说他的矛锐利得很,不管是什么盾都戳的穿。有个围观的人问道:“用你自己的矛刺你自己的盾会怎么样”时,此人无以对答。后来因为以形容某行事或言语前后不统一。也指不连贯的性格或心情。后因以喻人的语言行动前后抵触、不相应合。 [1]
矛:进攻敌人的刺击武器;盾:保护自己的盾牌。比喻自己说话做事前后抵触。 [2]

成语用法

编辑

主谓式;作谓语、定语。不能用于两方以上,只能用于单方自我抵触。成语用法

示例

  1. 毛泽东论持久战》:“英勇战斗于前,又放弃土地在后,不是自相矛盾吗?”。
  2. 资治通鉴·梁武帝太清二年》:“今二宫危逼,猾寇滔天,臣子当戮力同心,岂可自相矛盾?” [2]

成语出处

编辑

《韩非子·难一》:“楚人有鬻盾与矛者,誉之曰:‘吾盾之坚,物莫之能陷也。’又誉其矛曰:‘吾矛之利,于物无不陷也。’或曰:‘以子之矛陷子之盾,何如?其人弗能应也。夫不可陷之盾与无不陷之矛,不可同世而立。

成语典故

编辑

原文
出自《韩非子·难一》:楚人有鬻盾与矛者,先誉其盾之坚,誉之曰:“吾盾之坚,物莫能陷也。”又誉其矛曰:“吾矛之利,于物无不陷也。”或曰:”以子之矛陷子之盾,何如?”其人弗能应也。众皆笑之。夫不可陷之盾与无不陷之矛,不可同世而立。 [1]
注释
楚人:楚国人
鬻(yù):卖。
誉:称赞,这里有夸耀,吹嘘的意思。
陷:刺破,这里有“穿透”、“刺穿”的意思。
利:锋利。
或:有人,别人
以:用。
弗:不 。
应:回答。
夫(fú):放在句首,表示将发议论。
译文
战国时期,楚国有个卖矛和盾的人,他先夸耀自己的盾很坚硬,说:“无论用什么东西都无法破坏它!”然后,他又夸耀自己的矛很锐利,说:“无论什么东西都能被其破坏!”,市场上的人质问他:“如果用你的矛去刺你的盾,它们将怎么样?”,那个人无法回答。众人嘲笑他。无法被刺穿的盾牌和刺得破所有盾的长矛,是不可能共同存在的。

揭示道理

世上不可能共同存在牢不可破的盾和无坚不摧的矛,这个楚国人片面地夸大了矛与盾的作用,结果出现无法自圆其说的局面。比喻说话做事前后抵触,不能自圆其说。
做事说话皆应三思而后行。 [2]