centos 客户端与PHP扩展oci8安装

2016/08/14 | 星期日 分类:命令文档 | 没有评论 标签: , | 作者: | 1,631 views

##oracle客户端安装一定要选对 版本,是32位还是64位
##32 系统
oracle-instantclient-basic-11.1.0.1-1.i386.rpm
oracle-instantclient-devel-11.1.0.1-1.i386.rpm
##64 系统
oracle-instantclient-devel-11.1.0.1-1.x86_64.rpm
oracle-instantclient-basic-11.1.0.1-1.x86_64.rpm

##复制rpm 到某目录:然后执行安装:
# rpm -ivh *.rpm

##下载Oracle的PHP扩展官方下载
##复制代码 代码如下:

# wget http://pecl.php.net/get/oci8-2.0.11.tgz
# tar zxvf oci8-2.0.11.tgz
# cd oci8-2.0.11
# phpize
##php-config oracle 的路径需要做对应修改
# ./configure –with-php-config=/usr/local/php/bin/php-config –with-oci8=shared,instantclient,/usr/lib/oracle/10.2.0.4/client64/lib/
# make && make install

更改php.ini
复制代码 代码如下:

# vi /etc/php.ini

增加 extension = “oci8.so”重新启动PHP
阅读全文

PHP定时任务全量同步开发方案

2015/01/18 | 星期日 分类:PHP | 没有评论 标签: , | 作者: | 2,177 views

最近开发了几个定时任务,全量同步个人基本信息(Oracle数据同步到MySql),浏览量延迟更新,每日订阅邮件发送,年度统计报表汇总等开发任务,万变不离其宗,几乎一样的业务逻辑,完成任务开发工作。

定时任务有“串行”,“并行”执行,即所谓的单线程与多线程,本文就介绍一种串行的任务开发成多线程执行方法,时间超短的关键场景串行执行,到数据处理(耗时大)并行执行方案,这就好比电脑、手机CPU多核的缘故,瞬间“高大上”。

定时任务使用场景有哪些呢?.seedpaddy.com
系统版本升级,业务数据结构改动,有时不可避免的需要刷相应的全量数据;不同系统之间数据全量同步,比如用户信息全量同步;报表统计,比如年度统计报表等等;

定时任务尽量满足如下条件:

  1. 可单个执行(单数据调试,同步);
  2. 分时、分段执行(避免执行超时或内存溢出);
  3. 可多线程执行(数据量大提高执行效率,避免几天没法完成刷数据或全量同步);
  4. 可重复执行(这个非必须)。

看业务流程图:
timer-corntab

图解,定时任务进程启动,设置Memcache锁,到解除Memcache锁,这一步操作是串行执行,主要耗时在取数据阶段(此时定时任务,对大数据量操作尽量SQL简单,带索引查询哦,减少串行阻塞);只要Memcache没锁,任务往下执行。

有了内存锁,为啥还要文件锁?当任务并发来时,程序就会异常,此时定时任务满足条件4就不影响,否则增加一个文件锁,程序会更加严谨(定时任务可控性,建议多个进程跑时,尽量错开运行)。.seedpaddy.com

为啥有标志位?标志位其实就是为了顺序取数据,或者判断定时任务跑了一个全量,是否循环继续跑定时任务,比如全量同步个人信息,取数据阶段若没取到数据,则可以设置标志位为复位(一般设为0即可)。

解除Memcache锁定后,就到了定时任务的核心(数据处理),此处根据业务需求,酌情开发,不再另阐述。

文章中使用到的知识点:Memcache锁,文件锁请参考另外一篇博客:
PHP文件锁核心类库与Flock锁函数

2015年1月27日,优化版流程图:
timer-corntab-better

PHP与Memcache结合浏览量延迟方案

2015/01/11 | 星期日 分类:PHP | 没有评论 标签: , | 作者: | 2,268 views

这篇干货,适用中小型网站浏览更新频繁,减少mysql服务器(鸭梨),减少服务器io的一种绝佳方案。

平常在工作,开发中设计或做数据统计的时候,习惯把浏览量放在资源表中,一般小网站做法是访问一次更新一次资源浏览量:比如blog系统,访问blog详情页时,blog浏览量增加1,就会做一次数据update,这样的后果是,频繁更新数据库,造成数据库链接过多 + 服务器IQ读写频繁,网站浏览量稍大点服务器就容易宕机。.seedpaddy.com

看图说话,浏览量更新流程图.seedpaddy.com
view-delay

结合上图,解析下流程图:
1.资源浏览量,比如blog详情页的浏览量 views = mysql(数据表的浏览量) + memcache(浏览量) 每次访客访问blog详情页,浏览量就会+1,使用浏览延迟更新,仅更新memcache中的浏览量,并把浏览量缓存的key hash到array中(这很重要),当memcache中的浏览量达到某一值,比如100时,做一次update mysql数据的浏览量,并即时把memcache的浏览量设置为0。

2.由于资源浏览量部分保存在memcache中,重启memcache,或者其他原因,浏览量会丢失,需要额外开发一个定时任务更新缓存的浏览量到mysql中;
阅读全文

PHP之in_array,isset,strpos对比与效率优化

2015/01/10 | 星期六 分类:PHP | 没有评论 标签: , | 作者: | 2,085 views

PHP内部函数有时也有不靠谱的时候,比如:in_array也是一个坑,当自己项目中出现了效率问题后,才不断的追踪,查阅相关资料解决这等难题,才有了这篇文章,转帖加工解决实际难题。

或许这就是一个小公司与大公司的区别,或许一个普通开发与资深的区别,或许这就月薪是拿15K的分水岭,这篇文章绝对干货,值得细细品味。.seedpaddy.com

项目开发中不少地方可能都用过in_array来判断一个数据是否在一个数组中,一般我们的数组可能数据都比较小,对性能没什么影响,所以也就不会太在意,但是如果数组比较大的时候,且频繁或循环调用时性能就会下降厉害,运行效率差,那如果针对在大数组情况下做优化呢,下面说两种方法(都是通过自定义函数+内部函数来实现):

1.数组key与value翻转,通过isset判断key是否存在于数组中

至于为什么不用 array_key_exists 来做判断二用isset呢?.seedpaddy.com
下面看下array_key_exists() 与 isset() 的对比:

isset()对于数组中为NULL的值不会返回TRUE,而array_key_exists()会。

$search_array = array(‘first’ => null, ‘second’ => 4);

isset($search_array[‘first’]);
// return false

array_key_exists(‘first’, $search_array);
// return true

2.用implode连接,直接用strpos判断
用implode函数+逗号连起来,直接用strpos判断。php里面字符串取位置速度非常快,尤其是在大数据量的情况下。需要注意的是首尾都要加”,” ,这样比较严谨。
比如: ,email1,email2,email3,email4,email5, 查找的时候,查,email1,。还有strpos要用!== false,因为第一个会返回0。

关于in_array的执行效率分析可以查看手册+Google+Baidu查看相关文章:.seedpaddy.com
php中的in_array函数效率分析

PHP 链接 Memcached 集群封装类库

2014/11/21 | 星期五 分类:PHP | 一条评论 标签: | 作者: | 2,572 views

近一年多,项目中用到memcache技术,最近写了个小程序,解决了项目中一个难点(流量量频繁更新数据库以致mysql服务连接过多,超负荷运行,干货待下周博文:PHP与Memcache结合浏览量延迟方案,此次抽空先介绍 PHP链接Memcache 集群封装类库 特意有此文,Demo

阅读此文,请务必要关注上一篇文章介绍:PHP链接MEMCACHE安装与概念理解

先上干货,代码注释很详细,不再重复介绍.seedpaddy.com

PHP Memcache 配置调用运行文件

全局函数,这里有玄机,待下篇文章:”PHP与Memcache结合浏览量延迟方案” 回再次介绍.seedpaddy.com

PHP链接Memcache 集群封装类库(真正的干货,都在里边,需要活用).seedpaddy.com
阅读全文

PHP 链接 Memcache 安装与概念理解

2014/11/16 | 星期日 分类:PHP | 2 条评论 标签: | 作者: | 2,310 views

办公上,Linux 服务器 与 Windows7 x64在xampp 之前安装过最新版本php5.6;所以建议都安装最新稳定版本。

但由于家里机器与系统是老的,亦懒得把数据库切换新的xampp,目前使用的是PHP5.3.1 版本,故扩展需要对应php_memcache.dll版本,否则xampp启动不来,安装过程记录如下:.

一、安装memcache的php扩展(用于连接管理memcached)

1. php_memcache.dll 下载:对应的版本php5.3.1
下载地址:php_memcache.zip 官方下载地址: http://pecl.php.net/package/memcache
对于PHP5.3以下的版本,请自行搜索下载,官方地址不提供了。

2. 把php_memcache.dll放到php的ext目录:
例如:D:\xampp\php\ext\php_memcache.dll

3. 打开 php.ini 文件:.
我的php.ini的位置:D:\xampp\php\php.ini

4. 在 php.ini上增加一行:
extension=php_memcache.dll

5. 重启xampp的apache服务,不报错,则版本合适;否则请重新下php_memcache.dll文件;

6.打开phpinfo 运行,搜索memcache 看到如下截图:

php_memcache
即PHP memcache 扩展安装成功。

二、安装memcached

1. Memcached-win64 下载:

a. 下载最新版:memcached 自行搜索下载;

2. 解压放某个盘下面,比如:

D:\Program Files\memcached\memcached.exe

3. 在终端(也即cmd命令界面)下输入以下命令安装windows服务:

D:\Program Files\memcached>memcached.exe -d install

4. 再输入下面命令启动:seedpaddy.com

D:\Program Files\memcached>memcached.exe -d start

这里参数有很多,这里就不介绍了,有兴趣的可以自己去查一下

NOTE: 以后memcached将作为windows的一个服务每次开机时自动启动。.

————— memcache 和 memcached —————

一会 memcache 和 一会 memcached 混淆不清,曾今在脑后中概念模糊,趁这文聊聊:memcache和memcached的区别。

  1. Example : 在自己的新程序中打算全面应用memcached技术,这个很容易理解这是memcached是内存缓存,但是怎么还有memcache呢?
  2. 其实很简单,memcache 是 php 的一个扩展,用于 php 管理 memcached,php-memcache.dll。
  3. 如果安装了 memcached 不安装扩展,那么 php 无法操控 memcached,但是命令行使用起来没有问题;
  4. 如果安装了 memcache扩展 但是没有安装 memcached 服务,那么这个就无法使用;
  5. 只有同时安装了 memcached服务 和 memcache扩展 才可以在PHP中使用 memcached 提高动态网站性能

————— 测试PHP 链接 memcached —————

测试代码如下,打印输出已注释,在高亮代码中显示有bug

你可以看到如下结果

至此,本文结束,下篇:介绍PHP 链接 Memcached 集群封装类库,有内涵哦!

开发方案模板与Rest接口示例文档

2014/11/09 | 星期日 分类:系统架构 | 没有评论 标签: , | 作者: | 1,896 views

工作越久,愈感觉到方案文档的重要性,特别是人员流动大的公司中,在某些公司做开发工作就是帮人埋坑,自己偶尔亦挖坑~在说这话时,感觉自己挺二的(埋坑非自己所愿)。

写方案,能提高自己的语言表达能力,方案写出来条理清晰,让开发人员开得明白,可不单单是会编程那么简单:还要会,

  1. 方案需要做数据表设计;
  2. 表关系,UML图;
  3. 实施流程图;
  4. 实施步骤;

这,可花不少心思,不然怎么会有写方案的比Code拿得多呢?所以写开发方案的人,必定是一个Code人,不然写出来的东西不可用,么人看懂。(哈,其实无因果关系).

以上皆都是废话,重点在两张截图中.

——————– 废话分割线 ——————–

最近在项目中经常要写开发方案,文档,特地整理了开发方案文档,供往后项目中使用,word 文档需要上传下载,因此截图1:

方案模板

最近工作跟Rest接口比较多,既要开发又要完善接口文档,工作上由于信息安全缘故,不能发到Blog中,SO使用本博客资源 “WordPress Rest接口,获取Blog资源列表数据” 示例,在word文章中,直接贴内容样式不好控制,顾直接截图效果逼真写,请看如下截图2:.

restWordPress

Rest接口公私钥接口权限认证请查阅:Rest介绍与Rest接口权限认证概要

PHP之Curl抓取数据与模拟POST核心类库

2014/11/04 | 星期二 分类:PHP | 没有评论 标签: , | 作者: | 6,406 views

本篇文章中主要讲解php curl库的知识,带着如下几个问题:怎么样才能从其他站点获取内容呢?怎么把本站的数据提交到其他服务器?比如完成订单支付接口需要POST数据,并返回处理结果等。

带着这两个问题,通读如下类库,调用CURL核心类,curl 算入门到精通了。.

CULR抓取网页数据,调用简单

CURL引入类库调用类,之后 如下操作 POST数据 .

接收页面(类似网页表单POST处理页),如上的url

CURL核心类

PHP文件锁核心类库与Flock锁函数

2014/10/31 | 星期五 分类:PHP | 一条评论 标签: | 作者: | 2,094 views

本文介绍PHP文件锁核心类库与Flock锁函数调用,文件锁

并发下常见的加锁及锁的PHP具体实现,在最近的项目中有这样的场景:

1.生成文件的时候,由于多用户都有权限进行生成,防止并发下,导致生成的结果出现错误,需要对生成的过程进行加锁,只容许一个用户在一个时间内进行操作,这个时候就需要用到锁了,将这个操作过程锁起来..

2.在用了cache的时候,cache失效可能导致瞬间的多数并发请求穿透到数据库此时也可以得需要用锁在同一并发的过程中将这个操作锁定.

3.串行定时任务,特定场合.

先介绍使用方法如下:

方法一,在非 NFS 以及其它一些网络文件系统,所以此方法有局限性

方法二,任何系统都可以.

具体类如下:.

Rest介绍与Rest接口权限认证概要

2014/10/26 | 星期日 分类:系统架构 | 2 条评论 标签: | 作者: | 2,623 views

What is REST? 什么是REST? REST(Representational State Transfer 表述性状态转移)是一种轻量级的Web Service架构.

REST主旨是让事情尽量的简单化:

  1. 使用HTTP里的方法:GET、POST、DELETE、PUT,而不需要使用URL或请求的内容来指定这个方法;
  2. 使用URL来指明你将要操作什么对象;.
  3. 使用HTTP状态码作为返回值;
  4. 调用产生的HTTP请求内容只是用于服务数据——不是用来指明调用方法,目标对象或返回值的;
  5. 使用REST方法来开发Web Service的关键点是利用HTTP协议的简单性,而不是去扩展这个协议;

Web Service调用最终应该是非常的简单而且非常的易于理解。

REST架构让人们真正理解我们的网络协议HTTP本来面貌,对资源的操作包括获取、创建、修改和删除资源的操作正好对应HTTP协议提供的GET、POST、PUT和DELETE方法,因此REST把HTTP对一个URL资源的操作限制在GET、POST、PUT和DELETE这四个之内。

这种针对网络应用的设计和开发方式,可以降低开发的复杂性,提高系统的可伸缩性。

——————– 分割线 ——————–

既然REST宗旨主要是让事情简单化,那为啥还要做权限认证呢?

  • 想象一下支付接口,用户在购物网站上的每一个订单付款时调用支付宝接口、银行接口,就明白是啥问题啦?REST接口让事情尽量的简单,但也不能无限制开放给予调用,不然支付宝、银行系统早就瘫痪,或者被别有用心的搞瘫痪、宕机不能对外提供服务。.

因此就有了Rest接口权限认证。

REST接口地址,比如:
http://seedpaddy.com/rest/getBlogList?appkey={公钥}×tamp={时间戳}&signature={签名}

参数解释:
appkey               

  • 公钥,一般是默认是请求的 APPID ,唯一性:接口服务器提供方用来查询应用的私钥token

timestamp     

  • 当前时间戳,单位为秒(s),有效性:一般默认10分钟有效,当前请求10分钟内有效,支付宝,微信类接口时效性会更短。

signature      

  • 加密签名,signature结合了应用自动生成(或向开发者填写)的token参数和请求中的timestamp参数链接在一起做加密而成,用来鉴权。常规做法是:md5(token + timestamp) 或者 sh1(token + timestamp) 生成的加密串。.

token                 

  • 私钥,自动生成(或者开发者填写),32位无规则[a-z A-Z 0-9 ~-|]键盘上输入常用字符组合,申请应用的时候,自动生成(或者开发者填写)【此token注意保密,勿外泄,用来生成加密签名,做权限验证私钥】

接口服务器端:会根据请求的appkey,timestamp,signature 做判断,参数是否齐全,请求是否在有效时间内,signature 与服务器端的签名是否一致,来进行下一步操作,比如:获取接口数据,订单付款成功、更新订单状态等REST接口服务。

第 1 页,共 7 页1234567