博采众长,精于一技。Live for love, work for dream.

igbinary vs serialize vs json_encode

最近看到memcached扩展支持额外的序列化方式 -- igbinary,这是一个未收录到pecl的php扩展,它提供的两个主要方法:

  • igbinary_serialize
  • igbinary_unserialize

据称可以用它来代替php自带的序列化函数serialize,性能更好,而且占用的字节数也更少。下面我就 igbinary ,serialize ,json_encode三者的性能做了一个简单的测试。

继续阅读 »

PHP Curl 多线程实现

使用方法:

$urls = array("http://baidu.com", "http://21andy.com", "http://google.com");
$mp = new MultiHttpRequest($urls);
$mp->start();

下载: class_curl_multi.php
/*
 * Curl 多线程类
 * 使用方法:
 * ========================
$urls = array("http://baidu.com", "http://dzone.com", "http://google.com");
$mp = new MultiHttpRequest($urls);
$mp->start();
 * ========================
 */
class MultiHttpRequest {
    public $urls = array();
    public $curlopt_header = 1;
    public $method = "GET";
 
    function __construct($urls = false) {
        $this->urls = $urls;
    }
 
    function set_urls($urls) {
        $this->urls = $urls;
        return $this;
     }
 
     function is_return_header($b) {
         $this->curlopt_header = $b;
         return $this;
     }
 
     function set_method($m) {
         $this->medthod = strtoupper($m);
         return $this;
     }
 
     function start() {
         if(!is_array($this->urls) or count($this->urls) == 0){
            return false;
         }
         $curl = $text = array();
         $handle = curl_multi_init();
         foreach($this->urls as $k=>$v){
            $curl[$k] = $this->add_handle($handle, $v);
         }
 
         $this->exec_handle($handle);
         foreach($this->urls as $k=>$v){
             curl_multi_getcontent($curl[$k]);
             echo $curl[$k]."\n";
             //$text[$k] =  curl_multi_getcontent($curl[$k]);
             //echo $text[$k], "\n\n";
             curl_multi_remove_handle($handle, $curl[$k]);
         }
         curl_multi_close($handle);
     }
 
     private function add_handle($handle, $url) {
         $curl = curl_init();
         curl_setopt($curl, CURLOPT_URL, $url);
         curl_setopt($curl, CURLOPT_HEADER, $this->curlopt_header);
         curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
         curl_multi_add_handle($handle, $curl);
         return $curl;
     }
 
     private function exec_handle($handle) {
         $flag = null;
         do {
            curl_multi_exec($handle, $flag);
         } while ($flag > 0);
     }
}

PHP 正确匹配 UTF-8 中文的正则

我以前一直用这个

preg_match('~[\x7f-\xff]+~is', $string, $tmp);
今天才发现,上面这个也会匹配到一些欧洲国家的字符

应该用下面这个,注意修正符 u

preg_match('~[\x{4e00}-\x{9fa5}]+~u', $string, $tmp);

浅谈PHP安全防范

由于所在公司对WEB应用程序性的重视,平台开发语言大部分也是PHP,以我在PHP开发上经验列出几项常见的PHP安全问题进行梳理或解决办法。

跨站脚本攻击(CSS or XSS, Cross Site Scripting)

这个是最常见的 POST 都要过滤可以使用

strip_tags, 删除string中所有html标签

htmlspecialchars,只对”<”,”>”,”;”,”’”字符进行转义

htmlentities,对所有html进行转义

继续阅读 »

适用于 PHP 开发人员的 Python 基础知识

您是一名 PHP 开发人员。您在过去 五年(或更长时间)中可能一直都编写应用程序,您已经将许多想像变成了可能 — 电子商务系统、简单内容管理系统、Twitter 和 Facebook 集成以及各种自定义实用工具。您可能还需要维护大量代码 — 从简单的显示页面到包含数千行其他人编写的代码的自定义应用程序,不一而足。
您已经在 PHP 上花费了大量时间,转向另一种语言势在必行。您也知道原地不动就意味着被动挨打。其实,学习新语言就像是去国外旅行:您会接触到新事物,品尝新食物,领略不同的文化,与不同的人对话,了解一切新奇,然后再回到家中体会原来的环境。
本文将带领您前往 Python 的世界遨游一番。本文假定您不具备 Python 编程语言的任何知识,但至少应具备一些基本的编程知识。我们将侧重于对 Python 和 PHP 进行比较 — 并不是为了分出两者孰优孰劣,而是因为一个简单的真理:在学习新知识时参照已有知识会更加轻松。
本文的目标相当简单:简要介绍 Python 的基本知识,为读者自己进行深入搜索打下基础。幸运的是,您将认识到 Python 实际上与您之前所使用的语言并无不同之处。再次以旅游为例,您并不需要到太远的地方,只需要去语言相通的邻国即可。

继续阅读 »

返回顶部