Archive for the 'PHP' Category

十大流行PHP开发框架介绍

第10位 Speedphp

Speedphp是国产框架,特别推荐初学者使用和学习,中文手册让初学者阅读起来也很容易。当然可以用来做各种复杂度的项目。同时他也支持新浪应用引擎(SAE)。

第9位 DooPHP

DooPHP自称为最快的PHP框架,对于高在线需求的网站不妨考虑一下DooPHP,不过目前面临文档过少,社区支持困难的问题。如果你是一位追求速度的高级的PHP开发者,也可以试试究竟有没有作者自称的那么快。

第8位 Drupal

Drupal,你可以把他当作一个CMS来使用,功能强大到让你难以想象,可是你又可以当作框架。做二次开发的好东西,如果你想做欧美外包,不了解Drupal是绝对不行的。值得一提的是,Drupal的社区氛围非常好,你几乎可以在官方论坛上解决任何问题。 Continue reading ‘十大流行PHP开发框架介绍’

PHP二维数组排序函数

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
  // 二维数组排序函数
  function sysSortArray($ArrayData,$KeyName1,$SortOrder1 = "SORT_ASC",$SortType1 = "SORT_REGULAR")
  {
    if(!is_array($ArrayData))
    {
      return $ArrayData;
    }    
    // Get args number.
    $ArgCount = func_num_args();
    // Get keys to sort by and put them to SortRule array.
    for($I = 1;$I < $ArgCount;$I ++)
    {
      $Arg = func_get_arg($I);
      if(!eregi("SORT",$Arg))
      {
        $KeyNameList[] = $Arg;
        $SortRule[]    = '$'.$Arg;
      }
      else
      {
        $SortRule[]    = $Arg;
      }
    }
    // Get the values according to the keys and put them to array.
    foreach($ArrayData AS $Key => $Info)
    {
      foreach($KeyNameList AS $KeyName)
      {
        ${$KeyName}[$Key] = $Info[$KeyName];
      }
    }
   
    // Create the eval string and eval it.
    $EvalString = 'array_multisort('.join(",",$SortRule).',$ArrayData);';
    eval ($EvalString);
    return $ArrayData;
  }

PHP组合排列数组函数

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
  private function combination($ar,   $num)   {
    $control   =   range(0,   $num-1);
    $k   =   false;
    $total   =   count($ar);
    while($control[0]   <   $total-($num-1))   {
      $t   =   array();
      for($i=0;   $i <$num;   $i++)   $t[]   =   $ar[$control[$i]];
      $r[]   =   $t;

      for($i=$num-1;   $i>=0;   $i--)   {
              $control[$i]++;
              for($j=$i;   $j <$num-1;   $j++)   $control[$j+1]   =   $control[$j]+1;
              if($control[$i]   <   $total-($num-$i-1))   break;
      }
    }
    return   $r;
  } private function combination($ar,   $num)   {
    $control   =   range(0,   $num-1);
    $k   =   false;
    $total   =   count($ar);
    while($control[0]   <   $total-($num-1))   {
      $t   =   array();
      for($i=0;   $i <$num;   $i++)   $t[]   =   $ar[$control[$i]];
      $r[]   =   $t;

      for($i=$num-1;   $i>=0;   $i--)   {
              $control[$i]++;
              for($j=$i;   $j <$num-1;   $j++)   $control[$j+1]   =   $control[$j]+1;
              if($control[$i]   <   $total-($num-$i-1))   break;
      }
    }
    return   $r;
  }

精通php的十大要点

1. 在合适的时候使用PHP – Rasmus Lerdorf

没有谁比PHP的创建者Rasmus Lerdorf明白PHP用在什么地方是更合理的, 他于1995年发布了PHP这门语言,从那时起,PHP就像燎原之火,烧遍了整个开发阵营,改变了互联网的世界。 可是, Rasmus并不是因此而创建PHP的 PHP是为了解决web开发者的实际问题而诞生的。

和许多开源项目一样,PHP变得流行,流行的动机并不能用正常的哲学来进行解释,甚至流行得有些孤芳自赏。它完全可以作为一个案例,一个解决各种web问题的工具需求所引起的案例,因此当PHP刚出现的时候,这种工具需求全部聚焦到PHP的身上。

但是,你不能奢望PHP可以解决所有问题。Lerdorf是第一个承认PHP只是一种工具的人,并且PHP也有很多力所不能及的情况。

根据工作的不同来选择合适的工具。我跑了很多家公司,为了说服他们部署和使用PHP,但是这并不意味着PHP对所有问题都适用。它只是可以一个解决大部分问题的front-end脚步语言。

作为一个web开发者,尝试用PHP解决所有问题是不科学的,同时也会浪费你的时间。当PHP玩不转的时候,不要犹豫,试用一下其他的语言吧。 Continue reading ‘精通php的十大要点’

服务器端PHP多进程编程实战

最近比较PHP跟python, Erlang 的特性,发现PHP有很多人们不常用到的特性。用PHP CLI可以实现很多不错的应用。比如做爬虫, 长期运行的计算脚本, 完全可以取代其他语言来做 服务器的运维。这对于熟悉PHP的人来说如虎添翼。

为什么PHP多进程很好? 网游服务器大部分都使用多线程而不是多进程的原因也在于进程比线程更加稳定。而且多线程适合现在多核服务器的应用场景,更能发挥多核运算的能力。进程的维护可以用很多操作系统级别的工具。Message Queue解决了多大部分线程通信问题。所以PHP多进程很适合做服务器端的计算密集型的应用。

据一家越南IT公司介绍,他们成功的把PHP后台多进程用在法律文件的分发、处理银行账户的金额这样的企业级的应用上。
Continue reading ‘服务器端PHP多进程编程实战’

PHP加Shell实现多进程

看到这个标题,大家可能要说我没常识,php根本不支持多线程啊,没错,php本身是不支持多线程,但是别忘了php的好搭档,apache和linux可是支持的,呵呵,lamp才是最佳组合,还在使用win服务器的现在知道为什么要用linux吧?好久没在phpchina说教了,今天水一帖,写个简单的代码演示下如何借助shell脚本实现多线程。

先写个简单的php代码,这里为了让脚本执行时间更长,方便看效果,sleep一下,呵呵!先看下test.php的代码:

<?php
for ($i=0;$i<10;$i++) {
echo $i;
sleep(10);
}

在看下shell脚本的代码,非常简单

#!/bin/bash
for i in 1 2 3 4 5 6 7 8 9 10
do
/usr/bin/php -q /var/www/html/test.php &
done

注意到在请求php代码的那行有一个&符号吗,这个是关键,不加的话是不能进行多线程的,&表示讲服务推送到后台执行,因此,在shell的每次的循环中不必等php的代码全部执行完在请求下一个文件,而是同时进行的,这样就实现了多线程,下面运行下shell看下效果,这里你将看到10个test.php进程再跑,再利用linux的定时器,定时请求这个shell,在处理一些需要多线程的任务,例如,批量下载时,非常好用!

Emacs PHP 数组缩进问题解决

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
(add-hook 'php-mode-hook
          (lambda ()
            (c-set-style "bsd")
            (setq c-indent-level 4)
            (setq c-continued-statement-offset 4)
            (setq c-brace-offset -4)
            (setq c-argdecl-indent 0)
            (setq c-label-offset -4)
            (setq c-basic-offset 4)
            (setq tab-width 4)
            (setq indent-tabs-mode nil)
            (c-set-offset 'case-label '+)
            (c-set-offset 'arglist-close 'c-lineup-arglist-operators)
            (c-set-offset 'arglist-intro '+)
            (c-set-offset 'arglist-cont-nonempty 'c-lineup-math)))

Facebook后台技术探秘

今天我们一起来了解Facebook背后的软件,看看作为当今世界上访问量最大的网站之一,Facebook是如何保证5亿用户的系统一直稳定可靠的运行。

Facebook的扩展性挑战

在我们讨论细节之前,这里有一些Facebook已经做的软件规模:

  • Facebook有570000000000每月页面浏览量 (据Google Ad Planner)
  • Facebook的照片量比其他所有图片网站加起来还多(包括Flickr等网站)
  • 每个月超过30亿张照片被上传
  • Facebook的系统服务每秒处理120万张照片,这不包括CDN服务中处理的照片
  • 每月超过25亿条的内容 (状态更新,评论等)被共享
  • Facebook有超过30,000服务器(这个数字是去年的)

Continue reading ‘Facebook后台技术探秘’

Poppen.de网站架构

在了解过世界最大的PHP站点,Facebook的后台技术后,今天我们来了解一个百万级PHP站点的网站架构:Poppen.de。Poppen.de是德国的一个社交网站,相对Facebook、Flickr来说是一个很小的网站,但它有一个很好的架构,融合了很多技术,如 Nigix、MySql、CouchDB、Erlang、Memcached、RabbitMQ、PHP、Graphite、Red5以及Tsung。

Poppen.de目前有200万注册用户数、2万并发用户数、每天20万条私有消息、每天25万登录次数。而项目团队有11个开发人员,两个设计,两个系统管理员。该站点的商业模式采用免费增值模式,用户可以使用搜索用户、给好友发送消息、上载图片和视频等功能。

如果用户想享受不受限制发送消息和上载图片,那么就得根据需要支付不同类型的会员服务,视频聊天及网站其他服务也采用同样的策略。 Continue reading ‘Poppen.de网站架构’

How to get current controller name and action name in Yii

To get current controller name/id inside your controller, or view

1
2
3
$controllerId = Yii::app()->controller->id;
//or
$controllerId = $this->getId();

To get current action name/id being executed, if you are inside beforeAction() or afterAction(), use the received CAction argument

1
2
3
4
5
//inside beforeAction or afterAction
public function beforeAction($action)
{
  $actionId = $action->id;
...

or just elsewhere inside your controller

1
$actionId = $this->getAction()->getId();