龚哥哥 爱生活、做自己!
PHP文件生成模块
发表于 2015-9-1 | 浏览(1728) | PHP
<?php
 /*
 *    描    述    :    把数据写入文件
 */
 namespace Model\Backend;
 class FilePutModel
 {
    /* 关闭自动连接数据库 */
    protected $autoCheckFields = false;
    private $m_DirName;  //目录地址
    private $m_FileName;  //文件名称
    private $m_Suffis;  //文件后缀名
    private $m_DataArray;  //需要写入文件的数据
    /*
     *    构造方法
     */
    public function __construct($DirName, $FileName, $DataArray, $Suffis = null)
    {
        $this->m_DirName = null;
        $this->m_FileName = null;
        $this->m_FileSuffix = null;
        $this->m_DataArray = array();
        /* 基础数据设置 */
        $this->m_DirName = $DirName;
        $this->m_FileName = $FileName;
        $this->m_FileSuffix = $Suffis;
        $this->m_DataArray = $DataArray;
        
        /* 基础数据处理 */
        $this->IsDirThere();
        $this->IsFileSuffix();
    }
    /*
     *    数据处理
     */
    public function SetFileData()
    {
        if(false == empty($this->m_FileName) && false == empty($this->m_DataArray)) {
            $Statu = file_put_contents(PATH_PHP_FILE.$this->m_FileName.'.'.$this->m_FileSuffix, "<?php\n\rreturn ".var_export($this->m_DataArray, true).";\n\r?>");
            if(false != $Statu) {
                return true;
            } else {
                return false;
            }
        } else {
            return '数据不能为空!';
        }
    }
    
    /*
     *    判断目录是否存在
     */
    private function IsDirThere()
    {
        if(false == is_dir($this->m_DirName)) {
            mkdir($this->m_DirName, 0777, true);
        }
    }
    
    /*
     *    判断后缀名是否存在
     */
    private function IsFileSuffix()
    {
        if(true == empty($this->m_FileSuffix)) {
            $this->m_FileSuffix = 'php';
        }
    }
}
 ?>
//使用说明
$FilePutObj = new \Model\Backend\FilePutModel('路径',文件名称,'数据','文件后缀名');
        if(true == $FilePutObj->SetFileData()) {
            //成功
        }

阅读全文

javascript常用的属性修改样式操作
发表于 2015-9-1 | 浏览(1396) | 前端

用JS修改CSS样式

今天修改项目的一个页面,涉及到通过js来修改css样式。自己盲目的试了好几种语法,结果都是错的。

看来还是要求助度娘啊。

突然发现在我们公司做开发,包你的js水平和css水平提高,为什么,因为公司只有一个美工,qie~~

1、添加样式

document.getElementById("id").className="div_class";

2、添加背景图片

document.getElementById("id").style.backgroundImage ="url(../images/tab_bg1.gif)";
也可以填网址

3、添加颜色

document.getElementById("id").style.color = "#fff";

4、设置字体大小

document.getElementById("id").style.fontSize = "30px";

5、设置背景色

document.getElementById("id").style.backgroundColor = "blue";

6、设置边框

document.getElementById("id").style.border = "2px solid #333333";
参数分别为宽度,样式,颜色

7、设置宽度

document.getElementById("id").style.width = "40%";

8、居中显示

document.getElementById("id").style.textAlign = "center";

阅读全文

在html中实现两个html文件交互传递数据的方法
发表于 2015-9-1 | 浏览(1595) | 前端

a.html 文件 代码如下

<html>
	<head>
	</head>
	<body>
		<input type = "text" id = "inputid">
		<input type = "button" onclick="submit('3')" value = "提交">
	</body>
</html>
<script>
function submit(e) {
	var input1 = document.getElementById("inputid");
	var age = e.elements[1].value;
	window.open("b.html?inputstr="+age);  //传入参数
}
</script>

b.html 文件  代码如下

<html>
	<head>
	</head>
	<body>
	</body>
</html>
<script>
	//获得参数的方法
	var request = {
		QueryString : function(val) {
			var uri = window.location.search;
			var re = new RegExp("" +val+ "=([^&?]*)", "ig");
			return ((uri.match(re))?(uri.match(re)[0].substr(val.length+1)):null);
		}
	}

	//调用方法获得参数
	var rt = request.QueryString("inputstr");
	alert(rt);
</script>

新建两个 a.html  和 b.html 文件,将代码直接拷贝进去就可以正常测试看见结果了

阅读全文

PHP中常见的字符编码设置,截取字符部分
发表于 2015-9-1 | 浏览(1683) | PHP
echo mb_substr('你aa好啊反反复复', 0, 6, 'utf-8').'<br />';   //mb_substr— 获取字符串的部分
  你aa好啊反

echo mb_strlen('ww刚好刚').'<br />';
  11

echo $str = '我好啊';  // 一个字符 3 字节
  我好啊

echo '<br />';
echo $ff = mb_detect_encoding($str).'<br />';   //mb_detect_encoding 检测字符的编码
  UTF-8

$ret = mb_convert_encoding($str, 'GBK', 'UTF-8');   //mb_convert_encoding— 转换字符的编码
  echo mb_strlen($str).'<br />';   //mb_strlen— 获取字符串的长度
    9
  echo mb_strlen($ret).'<br />';
    6

$a = "翻盖手机,MOTO,you like it?";
  echo mb_substr($a,0,6,"UTF-8");
    翻盖手机,M

阅读全文

CentOS yum -y upgrade 和 yum -y update 区别
发表于 2015-9-1 | 浏览(1441) | 服务器

分别测试yum -y upgrade和yum -y update

原始

系统版本:  centos5.5
内核版本:  2.6.18-194.el5

升级前做过简单配置文件修改

升级后

yum -y upgrade
  系统版本:    centos5.7
  内核版本:  2.6.18-194.el5

系统和软件配置不做修改
yum -y update    升级后
  系统版本:    centos5.7
  内核版本:    2.6.18-238.el5

系统和软件配置文件更新

结论

升级所有包,改变软件设置和系统设置,系统版本内核都升级
  yum -y update 

升级所有包,不改变软件设置和系统设置,系统版本升级,内核不改变
  yum -y upgrade

阅读全文

CentOS防火墙配置
发表于 2015-9-1 | 浏览(1350) | 服务器

vim /etc/sysconfig/iptables

# Generated by iptables-save v1.4.7 on Fri Jan 16 15:48:49 2015
*filter
:INPUT ACCEPT [7:626]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [5:605]

-A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
-A INPUT -p icmp -j ACCEPT
-A INPUT -i lo -j ACCEPT

# fpt数据上传 20端口
-A INPUT -m state --state NEW -m tcp -p tcp --dport 20 -j ACCEPT

# ftp 21端口
-A INPUT -m state --state NEW -m tcp -p tcp --dport 21 -j ACCEPT

# ssh 22端口
-A INPUT -m state --state NEW -m tcp -p tcp --dport 22 -j ACCEPT

# email 25端口
-A INPUT -m state --state NEW -m tcp -p tcp --dport 25 -j ACCEPT

# http 80端口
-A INPUT -m state --state NEW -m tcp -p tcp --dport 80 -j ACCEPT

# https 443端口
-A INPUT -m state --state NEW -m tcp -p tcp --dport 443 -j ACCEPT

# mysql 3306端口
-A INPUT -m state --state NEW -m tcp -p tcp --dport 3306 -j ACCEPT

# memcached 11211端口,-s指定只能被此ip访问有效
#-A INPUT -m state --state NEW -m tcp -p tcp -s 218.1.38.194 --dport 11211 -j ACCEPT
-A INPUT -j REJECT --reject-with icmp-host-prohibited
-A FORWARD -j REJECT --reject-with icmp-host-prohibited

COMMIT
# Completed on Fri Jan 16 15:48:49 2015

如果 /etc/sysconfig/iptables 文件不存在

原因一般是没有配置过防火墙,在安装linux系统时也已经禁掉了防火墙。

解决:随便写一条iptables命令配置个防火墙规则

iptables -P OUTPUT ACCEPT

然后用命令:service iptables save进行保存,默认就保存到/etc/sysconfig/iptables文件里。这时既有了这个文件。防火墙也可以启动了。接下来要写策略,也可以直接写在/etc/sysconfig/iptables 里了。

操控防火墙命令

启动:service iptables start
关闭:service iptables stop
重启:service iptables restart
查看状态:service iptables status
永久关闭:chkconfig iptables off 
永久关闭后启用:chkconfig iptables on

CentOS7下使用iptables

一直用CentOS 6 习惯了,一下没适应过来。防火墙配置后执行service iptables save 出现”Failed to restart iptables.service: Unit iptables.service failed to load: No such file or directory.”错误,在CentOS 7或RHEL 7或Fedora中防火墙由firewalld来管理,当然你可以还原传统的管理方式。或则使用新的命令进行管理。

假如采用传统请执行一下命令

systemctl stop firewalld
systemctl mask firewalld

并且安装iptables-services

yum install iptables-services

设置开机启动

systemctl enable iptables

防火墙状态操作命令

systemctl [stop|start|restart] iptables
或
service iptables [stop|start|restart]

初始化配置文件

service iptables save
或
/usr/libexec/iptables/iptables.init save

配置文件所在位置,规则配置同上

/etc/sysconfig/iptables

阅读全文

CentOS邮件自动发送 Email
发表于 2015-9-1 | 浏览(1452) | 服务器

CentOS安装sendmail、yum安装

yum -y install sendmail

以上命令执行完成后,启动sendmail

systemctl start sendmail
start(启动) , restart(重启), stop(停止)

CentOS使用外部smtp发送邮件的基本配置

设置 /etc/mail.rc 添加如下内容(保存退出,测试即可)

set from=xxxxxx@163.com smtp=smtp.163.com
set smtp-auth-user=xxxxxx@163.com smtp-auth-password=xxxxxx smtp-auth=login

下面来测试看看

1、发送一个文件里面的内容

echo "hello" > message
mail -s 'Test mail Title' fuxiang.gong@qq.com < message

2、发送字符串

echo helloWord | mail -v -s "Test Title" fuxiang.gong@qq.com

3、发送多个人(加 -c)

mail -s 'Test mail Title' -c fuxiang.gong@qq.com fuxiang.gong@qualifes.com < message

4、发送带附件(加 -a,空格后跟着附件地址)

mail -s 'Test mail Title' -a index.php fuxiang.gong@qq.com < message

5、前面一个是抄送人,后面两个是收件人

mail -s 'Test mail Title' -c fuxiang.gong@qualifes.com 386392432@qq.com fuxiang.gong@qq.com < message

6、前面两个是抄送人,后面两个是收件人(带附件+带文件里面的内容)

mail -s 'Test mail Title标题' -a doc.zip -c fuxiang.gong@qualifes.com -c 17091959688@163.com 386392432@qq.com fuxiang.gong@qq.com < message

7、前面两个是抄送人,后面两个是收件人(带附件+直接添加文本内容)

echo helloWord | mail -s 'Test mail Title标题' -a doc.zip -c fuxiang.gong@qualifes.com -c 17091959688@163.com 386392432@qq.com fuxiang.gong@qq.com

如果mail提示命令不存在

-bash: mail: command not found

解决方案
  yum install mailx -y

阅读全文

CentOS安装Git服务器 Centos 6.4 + Git 1.8.2.2 + gitosis
发表于 2015-9-1 | 浏览(1556) | 服务器
================ git服务器安装 ====================

CentOS安装Git服务器 Centos 6.4 + Git 1.8.2.2 + gitosis##

	1.查看Linux系统服务器系统版本

	    cat /etc/redhat-release   # 查看系统版本
	    
	    CentOS release 6.4 (Final)
	    
	    ifconfig                 # 查看服务器的IP
	    eth0      
	          Link encap:Ethernet  HWaddr 00:23:8B:FA:78:92  
	          inet addr:192.168.100.202  Bcast:192.168.100.255  Mask:255.255.255.0
	          inet6 addr: fe80::223:8bff:fefa:7892/64 Scope:Link
	          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
	          RX packets:543645 errors:0 dropped:0 overruns:0 frame:0
	          TX packets:157155 errors:0 dropped:0 overruns:0 carrier:0
	          collisions:0 txqueuelen:1000
	          RX bytes:383527379 (365.7 MiB)  TX bytes:13270106 (12.6 MiB)
	          Interrupt:16

	lo        Link encap:Local Loopback  
	          inet addr:127.0.0.1  Mask:255.0.0.0
	          inet6 addr: ::1/128 Scope:Host
	          UP LOOPBACK RUNNING  MTU:16436  Metric:1
	          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
	          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
	          collisions:0 txqueuelen:0
	          RX bytes:0 (0.0 b)  TX bytes:0 (0.0 b)


	2.在服务器上安装git及做些操作

	 - 执行命令
	sudo yum install curl-devel expat-devel gettext-devel openssl-devel zlib-devel perl-devel

	 - 同时下载git-1.8.2.2.tar.gz文件,然后将其`mv` 到`/usr/local/src`目录。[git-1.8.2.2.tar.gz安装包下载地址][1]


	cd /usr/local/src
	sudo tar -zvxf git-1.8.2.2.tar.gz
	cd git-1.8.2.2

	sudo make prefix=/usr/local/git all
	sudo make prefix=/usr/local/git install


	 - 增加软连接
	
	sudo ln -s /usr/local/git/bin/* /usr/bin/

	git --version  #如果能显示版本号,即表示成功`

	

	3.在服务器安装gitosis
	
	sudo yum install python python-setuptools

	cd /usr/local/src

	git clone git://github.com/res0nat0r/gitosis.git

	cd gitosis

	python setup.py install  

	#显示Finished processing dependencies for gitosis==0.2即表示成功


================ 上面是别人的列子 ====================



我们这里使用一台服务器当做git服务器和客户端,操作git饿时候需要切换到git用户
================ git服务器端配置 ====================

服务器:安装git工具【root】/home
	yum install -y python python-setuptools git-core
	git clone git://github.com/res0nat0r/gitosis.git
	cd gitosis
	python setup.py install

	这样提示表示安装成功:
		Using /usr/lib/python2.6/site-packages
		Finished processing dependencies for gitosis==0.2


服务器:新建一个git用户并创建管理git:【root】/home
	useradd -m git
	su - git


服务器:使用客户端ssh生成git管理【root切换git】/home
	ssh-keygen -t rsa
	scp ~/.ssh/id_rsa.pub root@服务器地址:/tmp/
		生成ssh:
			ssh-keygen -t rsa -C "devil@meila.com"


客户端:使用客户端ssh生成git管理【git】/home
	gitosis-init<~/.ssh/id_rsa.pub

	这样会在/home/git下面生成gitosis和repositories两个目录,后者即为存放公共库的目录。确保/home/git/repositories/gitosis-admin.git/hooks/post-update具有执行权限(755)。



客户端:下面需要在开发机克隆gitosis-admin.git项目,它是用来管理所有git项目及用户的。/home/git/data(目录没有则手动创建)
	git clone git@112.124.14.126:gitosis-admin.git  //因为是同一台机器,所以可以用localhost


客户端:为什么这里可以直接通过clone命令克隆项目,就是因为gitosis-init初始化的时候使用了客户端生成的公钥。在gitosis-admin项目下有一个gitosis.conf文件和一个keydir目录。gitosis.conf用来配置git项目和用户,keydir存放用户的公钥,这里的公钥对命名有严格要求,要是 用户名.pub,必须以.pub后缀结尾。gitosis.conf的格式如下:
	[gitosis]

	[group gitosis-admin]
	writable = gitosis-admin
	members = username #对应keydir下有一个 username.pub 公钥文件


客户端:现在可以按照这个格式增加新的项目。
	[gitosis]
 
	[group gitosis-admin]
	writable = gitosis-admin
	members = username #对应keydir下有一个 username.pub 公钥文件
	 
	[group XXX]
	writable = XXX
	members = user1 user2 ... #多个用户用空格分开

	假如这里新增了一个新的XXX项目:
		同样用新用户的ssh-keygen命令生成公钥和私钥,并把公钥上传到keydir目录下,重命名为user1.pub,更新gigosis-admin项目


客户端:更新项目在CentOS机器上克隆的gitosis-admin项目下执行下面的命令
	git add .
	git commit -a -m "add newuser"
	git push

	完成之后,服务器就已经做好了接受新项目的准备。这个时候服务器端还不会生成new-project.git项目,等PC端push之后会自动生成。



客户端:创建新建的项目目录并添加
	mkdir XXX
	cd XXX
	git init
	touch hello.txt  //创建一个空文件 才能提交成功
	git add hello.txt
	git commit -am '添加新项目'
	git remote add origin git@192.168.1.115:XXX.git
	git push origin master
	git push origin master  //执行两遍


	以上完成后看,XXX/.git/config文件里面是否有,如果没有增加或者执行命令
		[branch "master"]
		    remote = origin
		    merge = refs/heads/master

		 命令:(因此通过git config进行如下配置)
		 	git config branch.master.remote origin
			git config branch.master.merge refs/heads/master 



个人电脑:克隆项目
	git clone git@192.168.1.115:XXX.git
	


个人电脑提交代码后服务器同步更新:(添加自动更新)
	文件位置:home/git/repositories/ecshop.git/hooks/post-receive
	#自动更新提交的代码到仓库 start
	cd /home/git/data/ecshop/ #ecshop是服务器客户端管理项目位置
	unset GIT_DIR #cd解决后还是在hoot目录下
	git pull origin master
	#自动更新提交的代码到仓库 end
	
	说明:
		hook脚本执行了cd之后,继续执行git语句拉取的时候还是在hooks文件夹下,而不是cd的文件路径。
		上面主要是添加了unset GIT_DIR ,git的hooks里面默认有一些环境变量,会导致无论在哪个语句之后执行git命令都会有一个默认的环境路径,既然这样unset 掉默认的GIT环境变量就可以了。


======================== 常见问题 ===========================

首先确定 /home/git/repositories/gitosis-admin.git/hooks/post-update 为可执行即属性为 0755
1. git操作需要输入密码

原因
公密未找到
解决
上传id_pub.rsa到keydir并改为'gitosis帐号.pub'形式,如miao.pub。扩展名.pub不可省略
2. ERROR:gitosis.serve.main:Repository read access denied

原因
gitosis.conf中的members与keydir中的用户名不一致,如gitosis中的members = foo@bar,但keydir中的公密名却叫foo.pub
解决
使keydir的名称与gitosis中members所指的名称一致。
改为members = foo 或 公密名称改为foo@bar.pub

阅读全文

2015最新微信支付APP 服务端处理
发表于 2015-9-1 | 浏览(2333) | PHP
<?php

/**
 * 微信支付驱动
 * @author  Devil
 * @version v_1.0.0
 */
class WeiXin
{
    private $config;

    /**
     * [__construct 从数据库读取微信申请的密钥]
     */
    public function __construct() 
    {
        $this->config = array(
                'partner_id'        =>  '',
                'partner_key'       =>  '',
                'appid'             =>  '',
                'secret'            =>  '',
                'pay_sign_key'      =>  '',
                'notify_url'        =>  '',
            );
    }

    /**
     * [Get_App_Code 生成支付信息]
     * @param  [array] $order   [订单数据]
     * @return [string]         [支付信息]
     */
    public function Get_App_Code($order)
    {
        /* 标题空格处理 */
        if(!empty($order['subject'])) $order['subject'] = str_replace(array(' ', "\n", "\r"), '', $order['subject']);

        $access_token = $this->Get_Access_Token();
        $param = array(
            'appid'         =>  $this->config['appid'],
            'traceid'       =>  $order['out_trade_no'],
            'noncestr'      =>  md5(time().rand()),
            'package'       =>  $this->GetParamData($order),
            'timestamp'     =>  time(),
            'sign_method'   =>  'sha1',
        );

        /* 获取支付签名 */
        $param['app_signature'] = $this->GetAppSign($param);

        /* 生成预支付 */
        $data = $this->GenprePayInsert($param, $access_token);

        /* 生成支付信息 */
        if(!empty($data['prepayid']) && !empty($data['errmsg']) && $data['errmsg'] == 'Success')
        {
            $pay = array(
                    'appid'         =>  $this->config['appid'],
                    'noncestr'      =>  $param['noncestr'],
                    'package'       =>  'Sign=WXPay',
                    'partnerid'     =>  $this->config['partner_id'],
                    'prepayid'      =>  $data['prepayid'],
                    'timestamp'     =>  $param['timestamp']
                );
            $pay['sign'] = $this->GetAppSign($pay);
            return $pay;
        }
        return '';
    }

    /**
     * [GenprePayInsert 生成预支付]
     * @param [array] $param        [请求参数]
     * @param [token] $access_token [token]
     */
    private function GenprePayInsert($param, $access_token)
    {
        return json_decode($this->Curl_Post('https://api.weixin.qq.com/pay/genprepay?access_token='.$access_token, json_encode($param)), true);
    }

    /**
     * [GetAppSign signature签名生成]
     * @param [array] $param    [参数数据]
     */
    private function GetAppSign($param)
    {
        unset($param['sign_method']);
        $param['appkey'] = $this->config['pay_sign_key'];
        ksort($param);
        return sha1($this->SetParam($param));
    }

    /**
     * [GetParamData 获取参数数据]
     * @param  [array] $data    [订单数据]
     * @return [array]          [参数和sign]
     */
    private function GetParamData($data)
    {
        $order = array(
            'bank_type'         =>  'WX',
            'body'              =>  $data['subject'],
            'total_fee'         =>  $data['total_fee']*100, /* 微信要求需要乘以100 */
            'spbill_create_ip'  =>  $GLOBALS['pz_log']->Getip(),
            'out_trade_no'      =>  $data['out_trade_no'],
            'notify_url'        =>  $this->config['notify_url'],
            'partner'           =>  $this->config['partner_id'],
            'fee_type'          =>  1,
            'input_charset'     =>  'UTF-8',
            'attach'            =>  'weixin',
        );
        ksort($order);

        $sgin = strtoupper(md5($this->SetParam($order).'&key='.$this->config['partner_key']));
        return $this->SetParam($order, true).'&sign='.$sgin;
    }

    /**
     * [Curl_Post curl模拟post]
     * @param  [string] $url  [请求地址]
     * @param  [array] $post  [发送的post数据]
     */
    private function Curl_Post($url, $post) {
        $options = array(
            CURLOPT_RETURNTRANSFER => true,
            CURLOPT_HEADER         => false,
            CURLOPT_POST           => true,
            CURLOPT_POSTFIELDS     => $post,
        );

        $ch = curl_init($url);
        curl_setopt_array($ch, $options);
        $result = curl_exec($ch);
        curl_close($ch);
        return $result;
    }

    /**
     * [SetParam url模式字符串拼接]
     * @param [array]  $param         [需要拼接的参数]
     * @param [boolean] $is_urlencode [是否urlencode转义value]
     */
    private function SetParam($param, $is_urlencode = false)
    {
        $str = '';
        foreach($param as $k=>$v) 
        {
            if($is_urlencode)
            {
                $str .= $k.'='.urlencode($v).'&';
            } else {
                $str .= $k.'='.$v.'&';
            }
        }
        return substr($str, 0, -1);
    }

    /**
     * [Get_Access_Token 获取微信支付token]
     * @return [string]         [token]
     */
    private function Get_Access_Token()
    {   
        if(file_exists('/tmp/weixin_pay_token.json'))
        {
            $temp = json_decode(file_get_contents('/tmp/weixin_pay_token.json'), true);
            if($temp['time'] > time()) $token = $temp['token'];
        }
        if(empty($token)) $token = $this->Set_Access_Token();
        return $token;
    }

    /**
     * [Set_Access_Token token设置]
     * @return [string]     [token]
     */
    private function Set_Access_Token()
    {
        $temp = json_decode(file_get_contents('https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid='.$this->config["appid"].'&secret='.$this->config['secret']), true);
        if(!empty($temp['access_token']))
        {
            $data = array(
                    'token' =>  $temp['access_token'],
                    'time'  =>  time()+7000
                );
            if(!is_dir('/tmp')) mkdir('/tmp');
            file_put_contents('/tmp/weixin_pay_token.json', json_encode($data));
            return $temp['access_token'];
        }
        return '';
    }

    /**
     * [Respond 响应操作]
     * @return [string] [响应处理结果]
     */
    public function Respond()
    {
        $param = $_GET;
        if(empty($param)) return;
        $param_sign = $param['sign']; unset($param['sign']);

        ksort($param);
        $sign = strtoupper(md5($this->SetParam($param).'&key='.$this->config['partner_key']));
        if($param_sign != $sign) return;

        /* check_money方法 价格校验是否一致 */
        if(isset($param['trade_state']) && $param['trade_state'] == 0 && check_money($param['out_trade_no'], $param['total_fee']/100))
        {
            //如果成功这里就可以处理自己的订单了,标识符是 $param['out_trade_no']
        }
    }
}

?>

阅读全文

PHP单例模式 设计模式 面向对象
发表于 2015-9-1 | 浏览(1824) | PHP
<?php

/**
 * 单例模式
 * @author  Devil
 * @version v_0.0.1
 */
class Singleton
{
	private $parem;

	/**
	 * [__construct 构造方法]
	 * @param [mixed] $param [参数]
	 */
	private function __construct($param)
	{
		$this->param = $param;
	}

	/**
	 * [Instantiate 静态方法, 用于实例化类]
	 * @param  [mixed] $param [参数]
	 * @return [object]   [类对象]
	 */
	public static function Instantiate($param)
	{
		static $object = null;
		if(!is_object($object)) $object = new self($param);
		return $object;
	}

	/**
	 * [Show 测试方法]
	 */
	public function Show()
	{
		print_r($this->param);
	}
}



/**
 * 使用列子
 */
$param = array('test', 'demo', 'devil');
$obj = Singleton::Instantiate($param);
$obj->Show();

/**
 * $obj = Singleton::Instantiate($param);
 * 不管在项目中多少次这么对类进行实例化,都不会重复创建类对象。
 * $object 被定义成静态变量,不能被第二次赋值。
 * 只要$object是一个对象就直接返回当前对象,则进行实例化并返回。
 *
 * 单例模式可以防止重复创建对象,减轻内存开销。
 */

?>

阅读全文

TOP