php中Countable 接口,实现该接口的类可自定义count函数行为(默认count函数用来计算数组中的单元数目或对象中的属性个数)

2013-8-2 11:40:18 通过网页

<?php

/*
ArrayAccess Interface(数组式访问接口):给对象提供类似数组访问的方式
ArrayAccess接口包含四个抽象方法,实现此接口的类必须实现这四个方法:

//检查一个偏移位置是否存在
abstract public boolean offsetExists ( mixed $offset )

//检查一个偏移位置是否存在
abstract public mixed offsetGet ( mixed $offset )

//检查一个偏移位置是否存在
abstract public void offsetSet ( mixed $offset , mixed $value )

//检查一个偏移位置是否存在
abstract public void offsetUnset ( mixed $offset )

 */

class objArray implements \ArrayAccess {
    private $data = array();

    public function __construct() {
        $this->data = array(
            'p1'=>1,
            'p2'=>2,
            );
        $this->property1 = 'property1';
    }

    public function has($offset){
        return array_key_exists($offset, $this->data);
    }

    public function get($offset){
        return isset($this->data[$offset]) ? $this->data[$offset] : null;
    }

    public function set($offset,$value){
        $this->data[$offset] = $value;
    }

    public function remove($key)
    {
        unset($this->data[$key]);
    }
    /**
     * Array Access
     */
    public function offsetExists($offset)
    {
        return $this->has($offset);
    }

    public function offsetGet($offset)
    {
        return $this->get($offset);
    }

    public function offsetSet($offset, $value)
    {
        $this->set($offset, $value);
    }

    public function offsetUnset($offset)
    {
        $this->remove($offset);
    }
}

$obj = new objArray();

$obj['settings']="eddy";
echo $obj['settings'];//输出 eddy

echo $obj['p1'];//输出 1
?> 

2013-8-2 11:34:27 通过网页

网盘建立git中心库

1. 在网盘中建立仓库目录:

     >> cd d:/dropbox
     >> mkdir git/myrepo.git
     >> cd git/myrepo.git
     >> git --bare init          #注意这里要用bare参数,不然后面的push会出错

2. 将我们的项目工程用git管理:

     >> cd e:/work/testproject
     >> git init
     >> git add .
     >> git commit -a -m "first commit"
     >> git remote add origin d:/dropbox/git/myrepo.git
     >> git push origin master

3. 在其他的地方(当然安装了网盘的其他机器也是可以的)建立工作目录:

     >> cd f:/test
     >> git clone d:/dropbox/git/myrepo.git
     >> vim test.txt
     >> git add .
     >> git commit -a -m "second commit"
     >> git push origin master

2013-7-29 10:15:06 通过网页

<?php
/**
 * 装饰模式:核心就是在不改变接口的前提下扩展功能,也就是运行时动态扩展
 * Eddy 2013.07.09
 */

/**
 * Component对象
 * 充当抽象接口的角色,不应该去实现具体的行为
 */
abstract class Phone{
abstract public function call();
}

class iPhone extends Phone{
public function call(){
echo 'iPhone call somebody!';
}
}

/**
 * 使用一个或多个Decorator对象来“装饰”一个Component对象,
 * 且装饰后的对象仍然是一个Component对象
 * 从外部来扩展Component类的功能
 */
abstract class DecoratorPhone extends Phone{
protected $_phone;

public function __construct(Phone $phone){
$this->_phone=$phone;
}
}

class DecoratorGPS extends DecoratorPhone{
public function call(){
echo $this->_phone->call() . 'with GPS!';
}
}

class DecoratorWeb extends DecoratorPhone{
public function call(){
echo $this->_phone->call() . 'with Web!';
}
}

//运行时动态的扩展对象功能
$p = new iPhone();
$p->call();
echo '<br />';

$p_gps = new DecoratorGPS($p);
$p_gps->call();
echo '<br />';

$p_web = new DecoratorWeb($p_gps);
$p_web->call();

结果输出:
iPhone call somebody!
iPhone call somebody!with GPS!
iPhone call somebody!with GPS!with Web!

2013-7-9 10:29:35 通过网页

Drupal Coding standards

https://drupal.org/node/318

2013-7-4 16:35:21 通过网页

C#代码:
try
    {
        return true;
    }
    catch (Exception)
    {
        return false;
    }


对应IL代码
Offset OpCode Operand
0 ldc.i4.1
1 stloc.0
2 ldc.i4.0
3 stloc.1
4 ldc.i4.1
5 stloc.2
6 leave.s -> (11) ldloc.2 
8 pop
9 ldc.i4.0
10 stloc.2
11 leave.s -> (11) ldloc.2 
13 ldloc.2
14 ret

2013-7-3 11:51:33 通过网页

Mysql workbench foreign key options [Restrict, Cascade, Set Null, No Action]

For both update and delete :

if you try to update / delete the parent row :

Restrict : Nothing gonna be delete if there is a child row

Cascade : the child row will be delete / update too

Set Null : the child column will be set to null if you delete the parent

No action : The child row will not be concern of the delete / update

2013-6-26 13:49:17 通过网页

下面是PhpStorm的注册码、Key,其license由用户名和License值组成。

User name:

EMBRACE

License key:

===== LICENSE BEGIN =====
43136-12042010
00002UsvSON704l"dILe1PVx3y4"B3
49AU6oSDJrsjE8nMOQh"8HTDJHIUUh
gd1BebYc5U"6OxDbVsALB4Eb10PW8"
===== LICENSE END =====

2013-6-21 15:48:22 通过网页

file_get_contents('../0604/demo2.php');
file_get_contents('sunjianhua44q=.../../../0604/demo2.php');

上述两个路径表示的是相同的意思。。。

2013-6-14 16:02:35 通过网页

在做mysql数据恢复时,直接copydata文件夹,恢复至目标机器,启动mysql出现如下错误:

[ERROR] Plugin 'InnoDB' init function returned error.
Plugin 'InnoDB' registration as a STORAGE ENGINE failed.

一般都是因为配置文件和原机器不同所导致的,innodb_log_file_size这个参数很有可能不一样,检查下^_

2013-6-7 23:59:00 通过网页

linux文件/文件夹移动、复制、删除

移动:mv
复制:cp
删除:rm

递归删除当前目录下的0604目录
rm -r ./0604

复制目录
cp -a ./0604 /home/eddy

移动目录
mv ./0604 /home/eddy

2013-6-6 10:16:59 通过网页

php的windows版本自带了BCMath扩展,但linux下需要自行安装。

在centos中可以用yum安装:yum install php-bcmath

2013-6-6 9:56:48 通过网页

CI框架Email类不能用腾讯邮箱发送邮件

解决办法:
初始化配置时添加以下两项配置信息:
$config['crlf']="\r\n";
$config['newline']="\r\n";

2013-5-23 13:09:57 通过网页

YouPorn网站架构

Stack

    Originally written in Perl (Catalyst application with a DBIx::Class backend)
    Now PHP-FPM (FastCGI Process Manager)  - is an alternative PHP FastCGI
    HAProxy
    ActiveMQ
    Varnish
    Redis
    Nginx
    MySQL
    Syslog-ng
    Symfony2 - a PHP Web Development Framework.

Architecture

    The great switchover. The entire site was rewritten in 2011 to use PHP instead of a complex Perl architecture and Redis instead of MySQL and ActiveMQ.
        Targeted 200+ million daily requests
        Moved  6 years of legacy data without downtime
        New site is 10% faster.
        The process took longer than expected:
            Had to decide on which technologies to use
            Longer than expected learning curve
            Moving and restructuring data from MySQL to Redis
            Staffing
    HAProxy - provides load balancing, intelligent load distribution, and health checks
        Maintain two pools of servers: a write pool with a fail-over to backup-Master and a read pool will servers except the master.
    Varnish - reverse proxy helping speed up the site and reduce server load. Used also for cache management, edge side includes (ESIs), and health check on web servers.
    Syslog-ng - collects data on page views and is used for view counters and related videos.
    Nginx - high performance web server running PHP-FPM and acts as a external CDNs for static files like CSS, images and JS.
    Symfony - fast and feature rich, comes with a large set of libraries.
        Considers Symfony2 + Redis = Rapid Development + Scalable Website - a well balanced equation.
        Loves dependency injection.
        Choosing a web framework doesn't mean killing performances as long as you use a solid architecture in front of it.
    ActiveMQ - message bus designed for large sites, used for writes to MySQL and Redis.
        They found it too rigid for a site undergoing constant changes and the gains did not justify maintaining a separate Java infrastructure.
        Would like a do-over since the problems may have been more the developers than the tech.
    Redis - a fast, open source, KV store, now the primary data source.
        Updated in real-time.
        Sorted sets are used for all lists
        Pipelining,  executing several Redis commands with a single atomic command, is key for performance
        After the switchover additional Redis nodes were added, not because Redis was overworked, but because the network cards couldn't keep up with Redis.
        All reads come from Redis
        MySQL is used to allow the building new sorted sets as requirements change.
        Append-only-file (AOF) format is used for incremental backups and is IO pain free
        Consider using Redis as temporary cache in front of a Redis persistent store as a way to improve performance and reduce load.
    MySQL - in a support role to feed Redis
        Highly normalized because it’s not used directly for the site.
        Some tables have 100+ million rows.
        Used to populate Redis lists with new features
    Both GIT and SVN are used, which doesn’t work well.
    Doctrine is used in their CMS. Great tool that has saved weeks of development.

2013-5-20 11:47:05 通过网页

redis setup for Windows binaries http://t.cn/zTkW3xV 
phpredis win32 binaries for php 5.3 & 5.4 http://t.cn/zTkXeOr

2013-5-16 17:04:43 通过网页

共计:255 条记录 每页:15条12345>17