14 九 2009 @ 4:25 下午 

FastCGI 是一个可伸缩、高速的在web server和脚本语言间通迅的接口。关于FastCGI技术的更多信息可以在官方网站Wikipedia看到。

FastCGI 被许多脚本语言所支持,包括 php,如果用 –enable-fastcgi 选项编译的话。

多数流行的web server都支持 FastCGI。包括Apache(mod_fastcgi和mod_fcgid),Zeusnginxlighttpd

FastCGI 的主要优点是把动态语言和 web server 分离开来。这种技术允许 web server 和动态语言运行在不同的主机上。这可以改进可扩展性和安全性而没有大的效率损失。

php-fpm 可以和任何支持外部 FastCGI 技术的 web server 一起使用。

很不幸,官方网站 php.net 上的 php 在将 FastCGI SAPI 用于生产环境方面有许多已知的问题。
下面是关于启用 FastCGI SAPI 时的问题和 php-fpm 是如何解决他们的对比列表。

描述 php自带的 spawn-fcgi + spawn-php.sh + daemontools php-fpm
php守护进程化: pid file, log file, setsid(), setuid(), setgid(), chroot()      (-)       (+)     (+)
进程管理。可以用 “graceful” 来停止并启动 php worker 进程而不会丢失请求。能够平滑地升级配置和二进制程序而不丢失任何请求。     php4 (-), php5    (只有 graceful)       (-)     (+)
严格限制来源请求的 web server 的 ip 地址    php4 (-) php5 (+) (从 5.2.2 开始)       (-)     (+)
根据负载动态调整进程数      (-)       (-)     Todo
用不同的 uid/gid/chroot/environment 和不同的 php.ini 选项启动 worder 进程。你不需要 safe mode 了!      (-)       (-)     (+)
记录 worker 进程 stdout 和 stderr 日志      (-)       (-)     (+)
如果使用优化器,在共享内存意外破坏的情况下紧急重启所有的进程      (-)       (-)     (+)
如果 set_time_limit() 失败,确保进程会结束      (-)       (-)     (+)
特色功能 Error header、优化的上传支持、fastcgi_finish_request()

PHP-FPM 配置起来很简单,但有一点比较有意思的是如何确定 Worker 的数量。PHP-FPM 作者 Andrei Nigmatulin 在新闻组里提到的小技巧如下:

1) 用 Linux top 命令观察 (这个方式比较土)
2) 用 'netstat -np | grep 127.0.0.1:9000' 收集数据。
设置  php-fpm.conf 中的 max_children 的数值使 等待的数量变为最小。

目前使用 PHP-FPM 还只是通过 Patch 方式,然后编译

Posted By: 大宇
Last Edit: 14 九 2009 @ 04:25 下午

EmailPermalinkComments (2)
Tags
Tags: , , , ,
Categories: Linux, php, php技巧
 11 三 2009 @ 2:42 下午 

有时会遇到批量添加数据的问题,但是如果一条条添加对是不实现的因为有些要添的记录是变动的,用循环要是添加多条又会给MYSQL增加很大压力,下面的方法中用一条SQL就可以实现目的了  

//note 得到uid数组
  $insertUidsArr = array_diff($inviteIds,$uids);

  //note 加入记录
  if(count($insertUidsArr)){
   $comma = $val = ”;
   foreach($insertUidsArr as $insertUids){
    $val .= $comma.’(‘.$insertUids.’,’.$uid.’)';
    $comma = ‘,’;
   }
   $db->query(“INSERT INTO {$tablePre}table(uid,to_ids) VALUES $val”);
  }

Posted By: 大宇
Last Edit: 11 三 2009 @ 02:42 下午

EmailPermalinkComments (0)
Tags
Tags:
Categories: mysql, php, php技巧
 11 三 2009 @ 1:59 下午 

遇到有相同查询字段时,一条一条查会浪费不少资源,使用下面的方法只用一条SQL就可以了 

$getTidArr = $db->getAll(“SELECT * FROM {$dbTablePre}user WHERE tid IN (‘$uid’, ‘$toid’)”);
 $getMyPk = $getOtherPk = $userTidArr = $getPkArr = $tempUserTidArr = array();
 foreach($getTidArr as $tidKey=>$tidVal) {
  $tempUserTidArr[$tidVal['tid']][] = $tidVal;
  if($tidVal['tag_pk']) {
   $getPkArr[$tidVal['tid']] = $tidVal;
  }
 }

//note 得到第一个想要的信息数组
 $getMyPk = $getPkArr[$uid];
 //note 得到第二个想要的信息数组
 $getOtherPk = $getPkArr[$toid];

Posted By: 大宇
Last Edit: 11 三 2009 @ 01:59 下午

EmailPermalinkComments (0)
Tags
Tags: ,
Categories: php技巧
 19 十二 2008 @ 1:11 上午 

1.如果一个方法可静态化,就对它做静态声明。速率可提升至4倍。

2.echo 比 print 快。

3.使用echo的多重参数(译注:指用逗号而不是句点)代替字符串连接。

4.在执行for循环之前确定最大循环数,不要每循环一次都计算最大值。

5.注销那些不用的变量尤其是大数组,以便释放内存。

6.尽量避免使用__get,__set,__autoload。

More »

Posted By: 大宇
Last Edit: 19 十二 2008 @ 01:13 上午

EmailPermalinkComments (0)
Tags
Tags: ,
Categories: php, 程序控制

 Last 50 Posts
Change Theme...
  • Users » 1
  • Posts/Pages » 165
  • Comments » 12
Change Theme...
  • VoidVoid « Default
  • LifeLife
  • EarthEarth
  • WindWind
  • WaterWater
  • FireFire
  • LightLight

关于



    No Child Pages.

Linux命令手册



    No Child Pages.

php.ini配置



    No Child Pages.

Memcache协议



    No Child Pages.