- 1 == 'a'、0 == 'a'、97 == '97a'?这里边牵涉到的是默认数据类型转换。
// 无输出 if ('0') { echo "'0' is true\n"; } //'a' is true if ('a') { echo "'a' is true\n"; } // 无输出 if (1 == 'a') { echo "1 == 'a' is true\n"; } //0 == 'a' is true if (0 == 'a') { echo "0 == 'a' is true\n"; } //97 == '97a' is true if (97 == '97a') { echo "97 == '97a' is true\n"; }
- 多次 ++ 与 -- :
$n = 5; echo $n++ * $n--;//30
- count / strlen / mb_strlen :count用于统计数组元素或对象属性个数,但不能用于字串长度统计(否则总是返回1);strlen用于获取字符串字节长度,而非字符数;mb_strlen获取多字节编码字符串的长度。
- mysqlnd:当使用mysqlnd而非libmysqlclient作为MySQL客户端库时,buffered queries是默认模式;故要使用unbuffered queries模式,无论使用mysqli、pdo_mysql、mysql三种中的任何一种API都要手动开启,特别是做大数据集查询的时候。
$pdo = new PDO("mysql:host=localhost;dbname=world", 'my_user', 'my_pass'); $pdo->setAttribute(PDO::MYSQL_ATTR_USE_BUFFERED_QUERY, false); $uresult = $pdo->query("SELECT Name FROM City"); if ($uresult) { while ($row = $uresult->fetch(PDO::FETCH_ASSOC)) { echo $row['Name'] . PHP_EOL; } }
-
Zend Guard:用于对PHP代码加密与混淆,服务端需要安装Zend Guard Loader库来解密。在Ubuntu 64位系统上还需要安装 lib32z1、libglu1-mesa两个库
sudo apt-get install lib32z1 libglu1-mesa:i386
-
OpenSSL对称加密: openssl 1.0.1版本后,运行时期自动检测是否支持 AES-NI (Advanced Encryption Standard New Instructions,基本上2010年之后的Intel CPU都支持,另外AMD和ARM的一些型号也支持)。查看处理器是否支持 AES-NI 执行 cat /proc/cpuinfo | grep aes | wc -l
1) OpenSSL采用PKCS7 CBC填充,而mcrypt无填充。
2)OpenSSL AES-256相当于MCRYPT_RIJNDAEL_128(32位key),但mcrypt已被废弃。
3)先加密,后认证(Message Authenticity,HMAC),防止被篡改的消息仍然被解密。
4)AES-128、AES-192、AES-256密钥长度分别是128、192、256位,AES-128和AES-256加密处理轮数分别是10、14轮。
5)AES基于数据块(16字节,不足则填充)加密,包括ECB(Electronic Code Book,电子密码本)、CBC(Cipher Block Chaining,加密块链)、CFB(Cipher FeedBack,加密反馈)、OFB(Output FeedBack,输出反馈)、CTR(Counter,计数)五种加密模式。
6)在OpenSSL模块中有三种资源类型:第一种是一个 pkey(公钥或私钥)标识符,第二种是一个X509证书标识符,第三种是 CSR (证书签名请求) 标识符。OPENSSL_ZERO_PADDING、OPENSSL_NO_PADDING选项不能用于CBC、CTR。
7)AES-256-CBC vs AES-256-CTR:CTR加解密均可并行,CBC解密可并行;CTR能避免Padding Oracle Attacks。
8)OpenSSL与JAVA AES/ECB/PKCS5Padding问题:https://blog.csdn.net/kikajack/article/details/79273612。
9)Java AES/ECB/PCKS5Padding:<?php class Aes { public $method = 'AES-128-ECB'; private $key; public function __construct($key) { $this->key = substr(openssl_digest(openssl_digest($key, 'sha1', true), 'sha1', true), 0, 16); } /** * 密文解密 * @return string */ public function decrypt($content) { return $this->_pkcs5Unpad(openssl_decrypt($content, $this->method, $this->key, OPENSSL_ZERO_PADDING), 16); } /** * */ public function encrypt($content) { $content = $this->_pkcs5Pad($content, 16); return openssl_encrypt($content, $this->method, $this->key, OPENSSL_ZERO_PADDING); } //PKCS5Padding 补码方式 private function _pkcs5Pad($text, $blockSize) { $pad = $blockSize - (strlen($text) % $blockSize); return $text . str_repeat(chr($pad), $pad); } private function _pkcs5Unpad($text) { $end = substr($text, -1); $last = ord($end); $len = strlen($text) - $last; if (substr($text, $len) == str_repeat($end, $last)) { return substr($text, 0, $len); } return false; } }
- parse_url():解析 URL,返回其组成部分
$url = 'http://username:passwo