当前位置:  编程技术>php
本页文章导读:
    ▪PHP OPCode缓存 APC详细介绍       APC的介绍 The Alternative PHP Cache (APC) is a free and open opcode cache for PHP. Its goal is to provide a free, open, and robust framework for caching and optimizing PHP intermediate code. APC官方网站:http://www.php.net/manual/en/book.apc.ph.........
    ▪并发下常见的加锁及锁的PHP具体实现代码       在最近的项目中有这样的场景 1.生成文件的时候,由于多用户都有权限进行生成,防止并发下,导致生成的结果出现错误,需要对生成的过程进行加锁,只容许一个用户在一个时间内进行操作,这个.........
    ▪PHP开发的一些注意点总结       Linux系统的使用 现在标配的系统是 Linux + Nginx + PHP + MySQL ,这样的配置越来越多的大公司在用的了说到配置不同的是一个公司的规约,比如说挂载一般分为2个盘, / 下面划分为系统用的分区10G 足.........

[1]PHP OPCode缓存 APC详细介绍
    来源: 互联网  发布时间: 2013-11-30
APC的介绍

The Alternative PHP Cache (APC) is a free and open opcode cache for PHP. Its goal is to provide a free, open, and robust framework for caching and optimizing PHP intermediate code.

APC官方网站:http://www.php.net/manual/en/book.apc.php

WIN下最新版本的下载地址:http://downloads.php.net/pierre/

下载连接:http://downloads.php.net/pierre/php_apc-3.1.4-5.3-VC6-x86.zip 根据自己的PHP编译版本使用相对应的DLL

APC配置

APC配置主要讲解在WIN下的配置,类linux下的配置网上文章比较多

1.下载php_apc.dll 到PHP的ext目录下

2.修改php.ini 添加extension=php_apc.dll

在php.ini尾部添加配置项

; APC Setting
[APC]
;开启stat会报错
;apc.stat=0
apc.enabled=”1″
apc.shm_segments=”1″
;这里的问题,这里修改了默认内存配置WIN7下出错,不知道大家遇到没的?
;apc.shm_size=”128″
; apc.ttl=7200
; apc.user_ttl=7200
; 修正參數
apc.ttl=”300″
apc.user_ttl=”300″
apc.num_files_hint=”1024″
apc.mmap_file_mask=”E:/Wamp/tmp/apc.XXXXXX”
apc.enable_cli=”1″

3.重新启动apache服务器,查看phpinfo中是否有apc的配置项目,有的话就配置成功了.

APC控制面板,控制文件来自APC-3.1.4.tgz

未使用缓存之前

使用缓存后

常见问题:

1.在fcgi下的OPCode的缓存清除问题?


    
[2]并发下常见的加锁及锁的PHP具体实现代码
    来源: 互联网  发布时间: 2013-11-30
在最近的项目中有这样的场景
1.生成文件的时候,由于多用户都有权限进行生成,防止并发下,导致生成的结果出现错误,需要对生成的过程进行加锁,只容许一个用户在一个时间内进行操作,这个时候就需要用到锁了,将这个操作过程锁起来.
2.在用了cache的时候,cache失效可能导致瞬间的多数并发请求穿透到数据库此时也可以得需要用锁在同一并发的过程中将这个操作锁定.

针对以上的2种情况,现在的解决方法是对处理过程进行锁机制,通过PHP实现如下
用到了Eaccelerator的内存锁 和 文件锁,原理如下
判断系统中是否安了EAccelerator 如果有则使用内存锁,如果不存在,则进行文件锁
根据带入的key的不同可以实现多个锁直接的并行处理,类似Innodb的行级锁

使用如下:
$lock = new CacheLock('key_name');
$lock->lock();
//logic here
$lock->unlock();
//使用过程中需要注意下文件锁所在路径需要有写权限.
具体类如下:
代码如下:

<?php
/**
* CacheLock 进程锁,主要用来进行cache失效时的单进程cache获取,防止过多的SQL请求穿透到数据库
* 用于解决PHP在并发时候的锁控制,通过文件/eaccelerator进行进程间锁定
* 如果没有使用eaccelerator则进行进行文件锁处理,会做对应目录下产生对应粒度的锁
* 使用了eaccelerator则在内存中处理,性能相对较高
* 不同的锁之间并行执行,类似mysql innodb的行级锁
* 本类在sunli的phplock的基础上做了少许修改 http://code.google.com/p/phplock
* @author yangxinqi
*
*/
class CacheLock
{
//文件锁存放路径
private $path = null;
//文件句柄
private $fp = null;
//锁粒度,设置越大粒度越小
private $hashNum = 100;
//cache key
private $name;
//是否存在eaccelerator标志
private $eAccelerator = false;
/**
* 构造函数
* 传入锁的存放路径,及cache key的名称,这样可以进行并发
* @param string $path 锁的存放目录,以"/"结尾
* @param string $name cache key
*/
public function __construct($name,$path='lock\\')
{
//判断是否存在eAccelerator,这里启用了eAccelerator之后可以进行内存锁提高效率
$this->eAccelerator = function_exists("eaccelerator_lock");
if(!$this->eAccelerator)
{
$this->path = $path.($this->_mycrc32($name) % $this->hashNum).'.txt';
}
$this->name = $name;
}
/**
* crc32
* crc32封装
* @param int $string
* @return int
*/
private function _mycrc32($string)
{
$crc = abs (crc32($string));
if ($crc & 0x80000000) {
$crc ^= 0xffffffff;
$crc += 1;
}
return $crc;
}
/**
* 加锁
* Enter description here ...
*/
public function lock()
{
//如果无法开启ea内存锁,则开启文件锁
if(!$this->eAccelerator)
{
//配置目录权限可写
$this->fp = fopen($this->path, 'w+');
if($this->fp === false)
{
return false;
}
return flock($this->fp, LOCK_EX);
}else{
return eaccelerator_lock($this->name);
}
}
/**
* 解锁
* Enter description here ...
*/
public function unlock()
{
if(!$this->eAccelerator)
{
if($this->fp !== false)
{
flock($this->fp, LOCK_UN);
clearstatcache();
}
//进行关闭
fclose($this->fp);
}else{
return eaccelerator_unlock($this->name);
}
}
}

本类在孙立同学的类的基础上做了小点改进的了.具体可以看 http://code.google.com/p/phplock 感谢孙同学的分享精神!

    
[3]PHP开发的一些注意点总结
    来源: 互联网  发布时间: 2013-11-30
Linux系统的使用

现在标配的系统是 Linux + Nginx + PHP + MySQL ,这样的配置越来越多的大公司在用的了说到配置不同的是一个公司的规约,比如说挂载一般分为2个盘, / 下面划分为系统用的分区10G 足够 剩余空间划给/home的了.这点我感觉比较好的,原来我划的太多的了,其次是对于系统的安全登陆,现在小公司或者个人的做法是通过网络,直接使用帐号或者密码直接登陆而相对大公司的做法是,先登陆relay中转服务器,然后通过中转服务器登陆到目标服务器,这样帐号会被记录,安全性比较高,现在一般用了TOKEN,RSASecurID进行密码登陆,提高了整体的安全性了.



PHP调用shell命令

在之前没有使用到php调用到shell来执行一些额外的任务,现在会经常用到的了,这样就可以做脚本之外的事情了,这点感觉比较方便

编码习惯上对于编码习惯,每个公司和团队往往使用的都不同,特别是编程IDE的不同导致了编码规范的不同而约定也就不同的了,不过对于整体的习惯经过团队全体人员的决议,就定下来了,这点在原来的小公司没有要求的很严格,现在也是这样的,看来这个和团队文化还是有很大关系的了,这点团队的人相处久了,自然就熟悉的了.


函数返回值

一般对于获取失败的返回值都返回的是false,对于出现的多种情况,返回int的数值,如果是数据则返回的是array或者其他,对于现在的函数由于memcache的使用,现在用了很多的函数内的cache操作,返回值也是先从cache取得,如果没有在到数据库中取得,然后写入cache,然后返回数据

对于处理数据写入原来的写法是在$_POST && $_GET 过来的数据,然后进行addslashes处理,现在的做法是直接接收,然后进行数据判断是否符合要求,然后在拼接sql,然后对sql语句进行mysql_escape_string处理,然后在读出数据的时候,使用htmlspecialchars进行处理,这样显示就没有问题的了.



锁机制的PHP实现

前段时间写过一篇文章并发下常见的加锁及锁的PHP具体实现



关于队列的分发问题

使用了MQ进行Memcache数据的分发,这点还没弄明白,具体的实现,得在请教的了



关于PHP的错误级别的认识

原来对于错误级别,在开发的时候用的都是比较轻的E_ALL | E_STRICT 现在换成了E_ALL & ~E_STRICT 养成变量定义的好习惯,使用时候初始化是比较必要的.


对于防止用户发表违法信息及广告的控制及用户行为频率的控制

对于用户发布的广告,违法信息都用SPAM系统进行了控制,防止出现问题,对于用户行为进行了限制,防止用户过多的控制资源,对于系统中的变量不能使用自增的唯一ID,需要进行加密处理,返回系统信息被其他人获得.包括用户ID,数据信息ID的加密处理

    
最新技术文章:
▪PHP函数microtime()时间戳的定义与用法
▪PHP单一入口之apache配置内容
▪PHP数组排序方法总结(收藏)
▪php数组排序方法大全(脚本学堂整理奉献)
▪php数组排序的几个函数(附实例)
▪php二维数组排序(实例)
▪php根据键值对二维数组排序的小例子
▪php验证码(附截图)
▪php数组长度的获取方法(三个实例)
▪php获取数组长度的方法举例
▪判断php数组维度(php数组长度)的方法
▪php获取图片的exif信息的示例代码
▪PHP 数组key长度对性能的影响实例分析
▪php函数指定默认值的方法示例
▪php提交表单到当前页面、提交表单后页面重定...
▪php四舍五入的三种实现方法
▪php获得数组长度(元素个数)的方法
▪php日期函数的简单示例代码
Web服务器/前端 iis7站长之家
▪php字符串函数的简单示例代码
▪php文件下载代码(多浏览器兼容、支持中文文...
▪php实现文件下载、支持中文文件名的示例代码...
▪php文件下载(防止中文文件名乱码)的示例代码
▪解决PHP文件下载时中文文件名乱码的问题
▪php数组去重(一维、二维数组去重)的简单示例
▪php小数点后取两位的三种实现方法
▪php Redis 队列服务的简单示例
▪PHP导出excel时数字变为科学计数的解决方法
▪PHP数组根据值获取Key的简单示例
▪php数组去重的函数代码示例
 


站内导航:


特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

©2012-2021,,E-mail:www_#163.com(请将#改为@)

浙ICP备11055608号-3