分享快乐!
无限分类,单分类,都支持,增删改查基于ThinkPHP操作的,如果大家是自己的数据库操作可以改改就可以了,本身模块是不应该把数据层写在模块里面的,但是我的项目 分类基本都是这些操作,增删改查,所以我直接写在里面了,不想重复的再去写增删改查的代码。
我这里顺便把两张表也上传了,表前缀改成您们自己的就可以了。test.php 这段代码,可以在您的项目 Lib 里面的某一个类的嘛的其中一个方法里面就可以直接使用。
我这里顺便把两张表也上传了,表前缀改成您们自己的就可以了。test.php 这段代码,可以在您的项目 Lib 里面的某一个类的嘛的其中一个方法里面就可以直接使用。
<?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()) { //成功 }
用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";
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 文件,将代码直接拷贝进去就可以正常测试看见结果了
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
分别测试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
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安装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
================ 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
<?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'] } } } ?>