设为首页 加入收藏

TOP

PHP开发要点与技巧总结(二)(一)
2019-08-23 00:31:36 】 浏览:69
Tags:PHP 开发 要点 技巧 总结
  1. 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";
    }
  2. 多次 ++ 与 -- 
    $n = 5;
    echo $n++ * $n--;//30
  3. count / strlen / mb_strlen :count用于统计数组元素或对象属性个数,但不能用于字串长度统计(否则总是返回1);strlen用于获取字符串字节长度,而非字符数;mb_strlen获取多字节编码字符串的长度。
  4. 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;
       }
    }
  5. Zend Guard:用于对PHP代码加密与混淆,服务端需要安装Zend Guard Loader库来解密。在Ubuntu 64位系统上还需要安装 lib32z1、libglu1-mesa两个库

    sudo apt-get install lib32z1 libglu1-mesa:i386
  6. 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;
        }
    }
  7. parse_url():解析 URL,返回其组成部分
    $url = 'http://username:passwo
首页 上一页 1 2 3 4 下一页 尾页 1/4/4
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇[TCP/IP] 网络层-ARP协议 下一篇PHP基本语法

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目