Lravel 容器实践

作者: 时间: 2017-04-25 评论: 暂无评论
<?php
interface Model{
    public function run();
}


class SuperMan{
    public $model;
    public function __construct(Model $mode)
    {
        $this->model=$mode;
    }
}
class XPower implements Model{
    public function run(){
        echo '发射X-射线';
    }
}



class Container{
    protected $binds;//绑定
    protected $instances;//实例化

    /**
     * 绑定模块
     * @param $abstract  模块关键字
     * @param $concrete  闭包函数 或 实例
     */
    public function bind($abstract,$concrete)
    {
        //如果是闭包函数
        if($concrete instanceof Closure){
            $this->binds[$abstract]=$concrete;
        }else{
            $this->instances[$abstract]=$concrete;
        }
    }
    //模块实例化脚本
    public function make($abstract,$parameters=[])
    {
        if(isset($this->instances[$abstract])){
            return $this->instances[$abstract];
        }
        array_unshift($parameters,$this);
        return call_user_func_array($this->binds[$abstract],$parameters);
    }
}

$container=new Container(); //模块工厂
// 工厂初始化
$container->bind('superman', function($container, $moduleName) {
    return new SuperMan($container->make($moduleName));
});
$container->bind('x-power',function($container){
    return new XPower;
});
echo '<pre>';
$superman = $container->make('superman', ['x-power']);
var_dump($superman);
echo '</pre>';

php 利用openssl加密解密

作者: 时间: 2017-02-14 评论: 暂无评论

参考了别人的文章,自己做了笔记

①准备工作
找到php.ini 去掉openssl.dll前面的';'。
找到openssl.cnf的位置,我的在D:xamppapacheconf。
配置apache以支持SSL:打开apache的配置文件conf/httpd.conf
LoadModule ssl_module modules/mod_ssl.so、Include conf/extra/httpd-ssl.conf
去掉两行前面的#
注意修改httpd-ssl.conf 文件里的两个字段:
SSLCertificateFile "C:/Apache2.2/conf/server.crt"
SSLCertificateKeyFile "C:/Apache2.2/conf/server.key"

② 代码

<?php
$config = array(
    "private_key_bits" => 1024,                     //字节数    512 1024  2048   4096 等
    "private_key_type" => OPENSSL_KEYTYPE_RSA,     //加密类型
    "config" => "D:/xampp/apache/conf/openssl.cnf"
);

$privkeypass = '123456789'; //私钥密码
$numberofdays = 365;     //有效时长
$cerpath = "./test.cer"; //生成证书路径
$pfxpath = "./test.pfx"; //密钥文件路径

$dn = array(
    "countryName" => "UK",
    "stateOrProvinceName" => "Somerset",
    "localityName" => "Glastonbury",
    "organizationName" => "The Brain Room Limited",
    "organizationalUnitName" => "PHP Documentation Team",
    "commonName" => "Wez Furlong",
    "emailAddress" => "wez@example.com"
);
// 生成公钥私钥资源
$res = openssl_pkey_new($config);

// 导出私钥 $priKey
openssl_pkey_export($res, $priKey,null,$config);

//  导出公钥 $pubKey
$pubKey = openssl_pkey_get_details($res);
$pubKey = $pubKey["key"];
//print_r($priKey); 私钥
//print_r($pubKey); 公钥
//直接测试私钥 公钥
$data = '直接测试成功!';
// 加密
openssl_public_encrypt($data, $encrypted, $pubKey);
// 解密
openssl_private_decrypt($encrypted, $decrypted, $priKey);
echo $decrypted;


//生成文件
$csr = openssl_csr_new($dn, $priKey,$config); //基于$dn生成新的 CSR (证书签名请求)
$sscert = openssl_csr_sign($csr, null, $priKey, 365,$config);//根据配置对证书进行签名
openssl_x509_export($sscert, $csrkey); //将公钥 证书存储到一个文件$sscert,由 PEM 编码格式命名。
openssl_pkcs12_export($sscert, $privatekey, $priKey, $privkeypass); //将私钥存储到名为的出 PKCS12 文件格式的字符串。 导出密钥$privatekey

//生成证书文件
$fp = fopen($cerpath, "w");
fwrite($fp, $csrkey);
fclose($fp);
//生成密钥文件
$fp = fopen($pfxpath, "w");
fwrite($fp, $privatekey);
fclose($fp);




// 测试私钥 秘钥
$privkeypass = '123456789'; //私钥密码
$pfxpath = "./test.pfx"; //密钥文件路径
$priv_key = file_get_contents($pfxpath); //获取密钥文件内容
$data = "测试数据!"; //加密数据测试test
//私钥加密
openssl_pkcs12_read($priv_key, $certs, $privkeypass); //读取公钥、私钥
$prikeyid = $certs['pkey']; //私钥
openssl_sign($data, $signMsg, $prikeyid,OPENSSL_ALGO_SHA1); //注册生成加密信息
$signMsg = base64_encode($signMsg); //base64转码加密信息


//公钥解密
$unsignMsg=base64_decode($signMsg);//base64解码加密信息
openssl_pkcs12_read($priv_key, $certs, $privkeypass); //读取公钥、私钥
$pubkeyid = $certs['cert']; //公钥
$res = openssl_verify($data, $unsignMsg, $pubkeyid); //验证
echo $res?'证书测试成功!':'证书测试失败!';; //输出验证结果,1:验证成功,0:验证失败

ps. 如果用txt编辑器建的密钥文件,记得去掉bom头

附带一篇错误集锦
http://blog.sina.com.cn/s/blog_8da982ac0101lqh1.html

php简单生成excel

作者: 时间: 2016-05-24 评论: 暂无评论
class Excel
{
    /**
     * 生成excel表格
     * @param array $title  表格的 th
     * @param array $data   表格数据 td
     */
    public static function getExcel($title=array(), $data=array())
    {
        header("Content-type:application/vnd.ms-excel");
        header("Content-Disposition:filename=" . date('Y年m月d日') . ".xls");
        header('Pragma: no-cache');
        header('Expires: 0');

       // echo iconv('utf-8', 'gbk', implode("\t", $title)), "\n"; 转码需要权限 chmod -R 777
        echo  implode("\t", $title), "\n";
        foreach ($data as $value) {
            echo implode("\t", $value), "\n";
        }
    }
}

(转)php 配置 redis

作者: 时间: 2016-05-16 评论: 暂无评论

http://jingyan.baidu.com/article/9989c74631873bf648ecfed4.html

php curl get post方法

作者: 时间: 2016-04-20 评论: 暂无评论

一、GET

$res=file_get_contents('http://www.vocp.cn')

二、POST
1.初始化

$ch=curl_init();

2.设置变量

//curl_setopt($ch,XXX)
curl_setopt($ch, CURLOPT_URL, "http://www.vocp.cn"); //指定url地址
curl_setopt($ch,CURLOPT_POST,1); //指定post方法,不指定就是get方法
curl_setopt($ch,CURLOPT_RETURNTRANSFER,1);//直接返回的内容作为变量储存,而不是直接输出
curl_setopt($ch,CURLOPT_POSTFIELDS,array('name'=>'Lilei','sex'=>'man')) //参数

3.执行获取结果

$res=curl_exec($ch)

4.释放句柄

curl_close($ch)