PHP实现的一个RC4的加密解密算法

PHP实现的一个RC4的加密解密算法

<?php
/**
 * cr4加密解密
 * @link http://en.wikipedia.org/wiki/RC4
 */
class RC4
{
    /**
     * 加密
     * @param string $key 私匙
     * @param mix $data 需要加密的数据
     * @param boolean $decrypted 是否解密
     * @return 16进制字符串
     */
    static public function Encrypted($key, $data, $decrypted=false)
    {
        $keyLength = strlen($key);
        $S = array();
        for($i = 0; $i < 256; $i++) $S[$i] = $i;
        $j = 0;
        for ($i = 0; $i < 256; $i++)
        {
            $j = ($j + $S[$i] + ord($key[$i % $keyLength])) % 256;
            self::swap($S[$i], $S[$j]);
        }

        $dataLength = strlen($data);
        $output = "";
        for ($a = $j = $i = 0; $i < $dataLength; $i++)
        {
            $a = ($a + 1) % 256;
            $j = ($j + $S[$a]) % 256;
            self::swap($S[$a], $S[$j]);
            $k = $S[(($S[$a] + $S[$j]) % 256)];
            $output .= chr(ord($data[$i]) ^ $k);
        }

        return ($decrypted) ? $output : bin2hex($output);
    }
    /**
     * 解密
     * @param string $a 私匙
     * @param mix $b 需要解密的数据
     * @return 字符串
     */
    static public function Decrypted($a, $b)
    {
        if (function_exists("hex2bin"))
        {
            return self::Encrypted($a, hex2bin($b), true);
        }
        else
        {
            return self::Encrypted($a, pack("H*", $b), true); // hex2bin php5.4才支持
        }
    }

    static private function swap(&$a, &$b)
    {
        $tmp = $a;
        $a = $b;
        $b = $tmp;
    }
}

Continue reading...

一些实用的PHP公共开源的工具

swoole
swoole扩展了PHP很多新的特性,在未来开发游戏和PHP服务端的程序很有帮助

redis
redis是可以集群的高并发的内存缓存组件,需要多了解redis的使用场景
phpredis
rediska
predis
以上三个是php使用redis的客户端,需要了解每个客户端的并发,性能

memcache
key-value的高效内存存储

sphinx
全文检索系统

symfony
目前我们各个项目使用的开源PHP框架,需要掌握可以自定义的方法,性能优化,组件开发的相关知识

siege
ab
简单的测试工具,在进行接口压力测试时使用

xdebug
PHP代码断点和性能分析的扩展

twemproxy
codis
dynomite
以上三个是目前比较流行的redis代理组件,需要掌握每个组件的性能,调优,以及和PHP结合使用

zeromq
高性能的消息队列,具有多种协议

mysqlnd_ms
一个自动化的mysql读写分离的扩展

Continue reading...

逆向思维PHP中判断是否是Unix时间戳

在php中一个有效的时间是从 1970-01-01 07:00:00 – 2038-01-19 03:14:07. 这个的
关于php中unix时间戳的产生

echo strtotime('2038-01-19 03:14:07'); // 2147454847
echo strtotime('1970-01-01 07:00:00'); // 0

官方说明:http://php.net/manual/zh/function.strtotime.php

那如何判断定一个时间戳能顺利返回正确的时间通常有两种方法
逆向思维方法

function is_timestamp($timestamp) {
    if(strtotime(date('m-d-Y H:i:s', $timestamp)) === $timestamp) {
        return $timestamp;
    } else {
        return false;
    }
}

普通的整数范围判断

$is_unixtime = ctype_digit($str) && $str <= 2147483647;

这种方法比较简洁

Continue reading...

PHP mysqlnd插件mysqlnd_ms教程及详细介绍

一、首先,mysqlnd是啥个玩意? 为什么要使用mysqlnd?

原因一: license问题
libmysql是MYSQL AB公司开发的,现在已经是Oracle集团所属的了,它使用MYSQL license发布。
This ultimately led to MySQL support being disabled by default in PHP
mysqlnd 是php的一部分,使用PHP license发布。
从此 licensing 的问题就算是解决了。

原因二:编译问题
使用libmysql的时候,如果要正常编译php,必须首先安装好mysql。
如果是单纯的一台WEB服务器,装个mysql似乎有点浪费了。
mysqlnd的话,就不必安装mysql,直接可用。

原因三:性能问题
由于mysqlnd是一个php扩展,使用了php memory management system,在内存使用方面效率相当高。
举个例子:
使用libmysql的时候,mysql结果集中的每一行都在内存中储存了二次 !
使用mysqlnd,结果集只会储存一次。
而且它还服从于php.ini中memory_limit的设置。
Using MySQL Native Driver leads to comparable or better performance than using MySQL Client Library。

mysqlnd的新特性
1 改进的persistent connection。
2 特殊函数 mysqli_fetch_all()
http://cn2.php.net/manual/en/mysqli-result.fetch-all.php
只有安装了mysqlnd, mysqli中的这个函数才可用。
3 Performance statistics calls: mysqli_get_cache_stats(), mysqli_get_client_stats(), mysqli_get_connection_stats()
在分析性能瓶颈的时候,这些函数还是蛮好用的。
详细文档可以看这里: http://cn2.php.net/manual/en/mysqlnd.stats.php
4 使用mysqlnd之后,mysqli也支持persistent connection了。
这样看起来,mysqli受益最多。
5 PHP 5.3.3 之后,mysqlnd支持SSL。
6 PHP 5.3.2 之后,mysqlnd支持Compressed Protocol
7 PHP 5.3.4 之后,windows系统中的mysqlnd支持Named Pipes。

Continue reading...

APC安装指南

APC简介

Alternative PHP Cache (APC) 中文全称是“可选PHP缓存”,是一种对PHP有效的开放源高速缓冲储存器工具,可用于缓存和优化Web服务器上的PHP代码,改善服务器性能。
APC优势

APC 和 eAccelerator 都是不错的PHP加速缓存,但是为什么在这里要推荐使用 APC 呢?
1、稳定性

根据我们对几个大站点的测试,虽然在低负载的情况下,APC性能略逊于eAccelerator,但是在大流量长期运行的情况下,APC 比 eAccelerator 更为稳定。如果站点出现 PHP 突然假死、无故出现 502 报错的现象,我们建议使用 APC 。
2、技术支持

APC 的发展迅速,自从 FACEBOOK 加入对 APC 的更新后,得到了很大发展,而 eAccelerator 新版本稳定性不佳,功能和代码都被删除了不少。
3、兼容性

Continue reading...



about me

  • 陶之11's Blog Name:陶之11 OICQ:14779023 Site:Pao11.com

分类

快捷入口