分页: 81/196 第一页 上页 76 77 78 79 80 81 82 83 84 85 下页 最后页 [ 显示模式: 摘要 | 列表 ]
Feb 26
也有一些内建变量是支持改写的,其中一个例子是 $args. 这个变量在读取时返回当前请求的 URL 参数串(即请求 URL 中问号后面的部分,如果有的话 ),而在赋值时可以直接修改参数串。我们来看一个例子:

    location /test {
        set $orig_args $args;
        set $args "a=3&b=4";
        echo "original args: $orig_args";
        echo "args: $args";
    }

这里我们把原始的 URL 参数串先保存在 $orig_args 变量中,然后通过改写 $args 变量来修改当前的 URL 参数串,最后我们用 echo 指令分别输出 $orig_args 和 $args 变量的值。接下来我们这样来测试这个 /test 接口:

    $ curl 'http://localhost:8080/test'
    original args:
    args: a=3&b=4

    $ curl 'http://localhost:8080/test?a=0&b=1&c=2'
    original args: a=0&b=1&c=2
    args: a=3&b=4

在第一次测试中,我们没有设置任何 URL 参数串,所以输出 $orig_args 变量的值时便得到空。而在第一次和第二次测试中,无论我们是否提供 URL 参数串,参数串都会在 location /test 中被强行改写成 a=3&b=4.
需要特别指出的是,这里的 $args 变量和 $arg_XXX 一样,也不再使用属于自己的存放值的容器。当我们读取 $args 时,Nginx 会执行一小段代码,从 Nginx 核心中专门存放当前 URL 参数串的位置去读取数据;而当我们改写 $args 时,Nginx 会执行另一小段代码,对相同位置进行改写。Nginx 的其他部分在需要当前 URL 参数串的时候,都会从那个位置去读数据,所以我们对 $args 的修改会影响到所有部分的功能。我们来看一个例子:

    location /test {
        set $orig_a $arg_a;
        set $args "a=5";
        echo "original a: $orig_a";
        echo "a: $arg_a";
    }

这里我们先把内建变量 $arg_a 的值,即原始请求的 URL 参数 a 的值,保存在用户变量 $orig_a 中,然后通过对内建变量 $args 进行赋值,把当前请求的参数串改写为 a=5 ,最后再用 echo 指令分别输出 $orig_a 和 $arg_a 变量的值。因为对内建变量 $args 的修改会直接导致当前请求的 URL 参数串发生变化,因此内建变量 $arg_XXX 自然也会随之变化。测试的结果证实了这一点:

    $ curl 'http://localhost:8080/test?a=3'
    original a: 3
    a: 5

我们看到,因为原始请求的 URL 参数串是 a=3, 所以 $arg_a 最初的值为 3, 但随后通过改写 $args 变量,将 URL 参数串又强行修改为 a=5, 所以最终 $arg_a 的值又自动变为了 5.
我们再来看一个通过修改 $args 变量影响标准的 HTTP 代理模块 ngx_proxy 的例子:

    server {
        listen 8080;

        location /test {
            set $args "foo=1&bar=2";
            proxy_pass http://127.0.0.1:8081/args;
        }
    }

    server {

        listen 8081;
        location /args {
            echo "args: $args";
        }
    }

这里我们在 http 配置块中定义了两个虚拟主机。第一个虚拟主机监听 8080 端口,其 /test 接口自己通过改写 $args 变量,将当前请求的 URL 参数串无条件地修改为 foo=1&bar=2. 然后 /test 接口再通过 ngx_proxy 模块的 proxy_pass 指令配置了一个反向代理,指向本机的 8081 端口上的 HTTP 服务 /args. 默认情况下,ngx_proxy 模块在转发 HTTP 请求到远方 HTTP 服务的时候,会自动把当前请求的 URL 参数串也转发到远方。
而本机的 8081 端口上的 HTTP 服务正是由我们定义的第二个虚拟主机来提供的。我们在第二个虚拟主机的 location /args 中利用 echo 指令输出当前请求的 URL 参数串,以检查 /test 接口通过 ngx_proxy 模块实际转发过来的 URL 请求参数串。
我们来实际访问一下第一个虚拟主机的 /test 接口:

    $ curl 'http://localhost:8080/test?blah=7'
    args: foo=1&bar=2

我们看到,虽然请求自己提供了 URL 参数串 blah=7,但在 location /test 中,参数串被强行改写成了 foo=1&bar=2. 接着经由 proxy_pass 指令将我们被改写掉的参数串转发给了第二个虚拟主机上配置的 /args 接口,然后再把 /args 接口的 URL 参数串输出。事实证明,我们对 $args 变量的赋值操作,也成功影响到了 ngx_proxy 模块的行为。
在读取变量时执行的这段特殊代码,在 Nginx 中被称为“取处理程序”(get handler);而改写变量时执行的这段特殊代码,则被称为“存处理程序”(set handler)。不同的 Nginx 模块一般会为它们的变量准备不同的“存取处理程序”,从而让这些变量的行为充满魔法。
其实这种技巧在计算世界并不鲜见。比如在面向对象编程中,类的设计者一般不会把类的成员变量直接暴露给类的用户,而是另行提供两个方法(method),分别用于该成员变量的读操作和写操作,这两个方法常常被称为“存取器”(accessor)。下面是 C++ 语言中的一个例子:

    #include <string>
    using namespace std;
    class Person {
    public:
        const string get_name() {
            return m_name;
        }

        void set_name(const string name) {
            m_name = name;
        }

    private:
        string m_name;
    };

在这个名叫 Person 的 C++ 类中,我们提供了 get_name 和 set_name 这两个公共方法,以作为私有成员变量 m_name 的“存取器”。
这样设计的好处是显而易见的。类的设计者可以在“存取器”中执行任意代码,以实现所需的业务逻辑以及“副作用”,比如自动更新与当前成员变量存在依赖关系的其他成员变量,抑或是直接修改某个与当前对象相关联的数据库表中的对应字段。而对于后一种情况,也许“存取器”所对应的成员变量压根就不存在,或者即使存在,也顶多扮演着数据缓存的角色,以缓解被代理数据库的访问压力。
与面向对象编程中的“存取器”概念相对应,Nginx 变量也是支持绑定“存取处理程序”的。Nginx 模块在创建变量时,可以选择是否为变量分配存放值的容器,以及是否自己提供与读写操作相对应的“存取处理程序”。
不是所有的 Nginx 变量都拥有存放值的容器。拥有值容器的变量在 Nginx 核心中被称为“被索引的”(indexed);反之,则被称为“未索引的”(non-indexed)。
我们前面在 (二) 中已经知道,像 $arg_XXX 这样具有无数变种的变量群,是“未索引的”。当读取这样的变量时,其实是它的“取处理程序”在起作用,即实时扫描当前请求的 URL 参数串,提取出变量名所指定的 URL 参数的值。很多新手都会对 $arg_XXX 的实现方式产生误解,以为 Nginx 会事先解析好当前请求的所有 URL 参数,并且把相关的 $arg_XXX 变量的值都事先设置好。然而事实并非如此,Nginx 根本不会事先就解析好 URL 参数串,而是在用户读取某个 $arg_XXX 变量时,调用其“取处理程序”,即时去扫描 URL 参数串。类似地,内建变量 $cookie_XXX 也是通过它的“取处理程序”,即时去扫描 Cookie 请求头中的相关定义的。
Tags:
Feb 26
关于 Nginx 变量的另一个常见误区是认为变量容器的生命期,是与 location 配置块绑定的。其实不然。我们来看一个涉及“内部跳转”的例子:

    server {
        listen 8080;

        location /foo {
            set $a hello;
            echo_exec /bar;
        }

        location /bar {
            echo "a = [$a]";
        }
    }

这里我们在 location /foo 中,使用第三方模块 ngx_echo 提供的 echo_exec 配置指令,发起到 location /bar 的“内部跳转”。所谓“内部跳转”,就是在处理请求的过程中,于服务器内部,从一个 location 跳转到另一个 location 的过程。这不同于利用 HTTP 状态码 301 和 302 所进行的“外部跳转”,因为后者是由 HTTP 客户端配合进行跳转的,而且在客户端,用户可以通过浏览器地址栏这样的界面,看到请求的 URL 地址发生了变化。内部跳转和 Bourne Shell(或 Bash)中的 exec 命令很像,都是“有去无回”。另一个相近的例子是 C 语言中的 goto 语句。
既然是内部跳转,当前正在处理的请求就还是原来那个,只是当前的 location 发生了变化,所以还是原来的那一套 Nginx 变量的容器副本。对应到上例,如果我们请求的是 /foo 这个接口,那么整个工作流程是这样的:先在 location /foo 中通过 set 指令将 $a 变量的值赋为字符串 hello,然后通过 echo_exec 指令发起内部跳转,又进入到 location /bar 中,再输出 $a 变量的值。因为 $a 还是原来的 $a,所以我们可以期望得到 hello 这行输出。测试证实了这一点:

$ curl localhost:8080/foo
a = [hello]

但如果我们从客户端直接访问 /bar 接口,就会得到空的 $a 变量的值,因为它依赖于 location /foo 来对 $a 进行初始化。
从上面这个例子我们看到,一个请求在其处理过程中,即使经历多个不同的 location 配置块,它使用的还是同一套 Nginx 变量的副本。这里,我们也首次涉及到了“内部跳转”这个概念。值得一提的是,标准 ngx_rewrite 模块的 rewrite 配置指令其实也可以发起“内部跳转”,例如上面那个例子用 rewrite 配置指令可以改写成下面这样的形式:

    server {

        listen 8080;

        location /foo {
            set $a hello;
            rewrite ^ /bar;
        }

        location /bar {
            echo "a = [$a]";
        }
    }

其效果和使用 echo_exec 是完全相同的。后面我们还会专门介绍这个 rewrite 指令的更多用法,比如发起 301 和 302 这样的“外部跳转”。
从上面这个例子我们看到,Nginx 变量值容器的生命期是与当前正在处理的请求绑定的,而与 location 无关。
前面我们接触到的都是通过 set 指令隐式创建的 Nginx 变量。这些变量我们一般称为“用户自定义变量”,或者更简单一些,“用户变量”。既然有“用户自定义变量”,自然也就有由 Nginx 核心和各个 Nginx 模块提供的“预定义变量”,或者说“内建变量”(builtin variables)。
Nginx 内建变量最常见的用途就是获取关于请求或响应的各种信息。例如由 ngx_http_core 模块提供的内建变量 $uri,可以用来获取当前请求的 URI(经过解码,并且不含请求参数),而 $request_uri 则用来获取请求最原始的 URI (未经解码,并且包含请求参数)。请看下面这个例子:

    location /test {
        echo "uri = $uri";
        echo "request_uri = $request_uri";
    }

这里为了简单起见,连 server 配置块也省略了,和前面所有示例一样,我们监听的依然是 8080 端口。在这个例子里,我们把 $uri 和 $request_uri 的值输出到响应体中去。下面我们用不同的请求来测试一下这个 /test 接口:

$ curl 'http://localhost:8080/test'
uri = /test
request_uri = /test

$ curl 'http://localhost:8080/test?a=3&b=4'
uri = /test
request_uri = /test?a=3&b=4

$ curl 'http://localhost:8080/test/hello%20world?a=3&b=4'
uri = /test/hello world
request_uri = /test/hello%20world?a=3&b=4

另一个特别常用的内建变量其实并不是单独一个变量,而是有无限多变种的一群变量,即名字以 arg_ 开头的所有变量,我们估且称之为 $arg_XXX 变量群。一个例子是 $arg_name,这个变量的值是当前请求名为 name 的 URI 参数的值,而且还是未解码的原始形式的值。我们来看一个比较完整的示例:

    location /test {
        echo "name: $arg_name";
        echo "class: $arg_class";
    }

然后在命令行上使用各种参数组合去请求这个 /test 接口:

    $ curl 'http://localhost:8080/test'
    name:
    class:

    $ curl 'http://localhost:8080/test?name=Tom&class=3'
    name: Tom
    class: 3

    $ curl 'http://localhost:8080/test?name=hello%20world&class=9'
    name: hello%20world
    class: 9

其实 $arg_name 不仅可以匹配 name 参数,也可以匹配 NAME 参数,抑或是 Name,等等:

    $ curl 'http://localhost:8080/test?NAME=Marry'
    name: Marry
    class:

    $ curl 'http://localhost:8080/test?Name=Jimmy'
    name: Jimmy
    class:

Nginx 会在匹配参数名之前,自动把原始请求中的参数名调整为全部小写的形式。
如果你想对 URI 参数值中的 %XX 这样的编码序列进行解码,可以使用第三方 ngx_set_misc 模块提供的 set_unescape_uri 配置指令:

    location /test {
        set_unescape_uri $name $arg_name;
        set_unescape_uri $class $arg_class;
        echo "name: $name";
        echo "class: $class";
    }

现在我们再看一下效果:

$ curl 'http://localhost:8080/test?name=hello%20world&class=9'
name: hello world
class: 9

空格果然被解码出来了!
从这个例子我们同时可以看到,这个 set_unescape_uri 指令也像 set 指令那样,拥有自动创建 Nginx 变量的功能。后面我们还会专门介绍到 ngx_set_misc 模块。
像 $arg_XXX 这种类型的变量拥有无穷无尽种可能的名字,所以它们并不对应任何存放值的容器。而且这种变量在 Nginx 核心中是经过特别处理的,第三方 Nginx 模块是不能提供这样充满魔法的内建变量的。
类似 $arg_XXX 的内建变量还有不少,比如用来取 cookie 值的 $cookie_XXX 变量群,用来取请求头的 $http_XXX 变量群,以及用来取响应头的 $sent_http_XXX 变量群。这里就不一一介绍了,感兴趣的读者可以参考 ngx_http_core 模块的官方文档。
需要指出的是,许多内建变量都是只读的,比如我们刚才介绍的 $uri 和 $request_uri. 对只读变量进行赋值是应当绝对避免的,因为会有意想不到的后果,比如:

    $ curl 'http://localhost:8080/test?name=hello%20world&class=9'
    name: hello world
    class: 9

这个有问题的配置会让 Nginx 在启动的时候报出一条令人匪夷所思的错误:
  
[emerg] the duplicate "uri" variable in ...

如果你尝试改写另外一些只读的内建变量,比如 $arg_XXX 变量,在某些 Nginx 的版本中甚至可能导致进程崩溃。
Tags:
Feb 23
在IIS6上使用FastCGI PHP5(应该是目前Win性能最好的PHP支持方法)
1.下载FastCGI For IIS6
http://www.microsoft.com/downloads/details.aspx?FamilyID=2d481579-9a7c-4632-b6e6-dee9097f9dc5&displaylang=en
下载之后,双击运行进行安装即可. 安装后C:\WINDOWS\system32\inetsrv目录下有这几个文件
点击在新窗口中浏览此图片
2、下载PHP5免安装版本,
http://www.php.net/downloads
解压到C:\PHP目录下
要确保IIS启动帐号对C:\PHP\*有读取执行权限
3、注册PHP到FastCGI
cscript fcgiconfig.js -add -section:"PHP" -extension:php -path:"C:\PHP\php-cgi.exe"
4、做一些性能和安全设置
C:\PHP\php.ini-recommended重命名为为C:\PHP\php.ini
打开C:\PHP\php.ini,修改:
extension_dir = "C:\PHP\ext"
fastcgi.impersonate = 1
cgi.fix_pathinfo=1
cgi.force_redirect = 0
执行:
cscript fcgiconfig.js -set -section:"PHP" -InstanceMaxRequests:10000
cscript fcgiconfig.js -set -section:"PHP" -EnvironmentVars:PHP_FCGI_MAX_REQUESTS:10000
以上两项设置最大池和响应连接数,可以根据自己的硬件配置、使用情况修改

5:配置 IIS & PHP
开始,运行,inetmgr依次展开,选中要配置的站点,右键,属性。切换到“主目录”选项卡,“配置”,“添加”,“浏览” 选中 C:\WINDOWS\system32\inetsrv\fcgiext.dll ,“确定”扩展名填入“.php”,勾选“脚本引擎”及“检查文件是否存在”,确定。
点击在新窗口中浏览此图片
一切完毕之后重启IIS,赶紧写一个测试页试一下吧.
重启IIS后,打开测试页出现如下提示:
FastCGI Error
The FastCGI Handler was unable to process the request.
--------------------------------------------------------------------------------
Error Details:
Error Number: 5 (0x80070005).
Error Description: 拒绝访问。
HTTP Error 500 - Server Error.
Internet Information Services (IIS)
这个错误是由于在解压PHP之后,没有对IIS启动帐户赋予该目录的读取和运行权限.修改文件夹安全属性,问题可以解决.
第二种简单的方法就是:
打开C:\WINDOWS\system32\inetsrv\fcgiext.ini 在[Types]下面加上下面这几行
引用
php=PHP
[PHP]
ExePath=C:\php\php-cgi.exe
InstanceMaxRequests=500
EnvironmentVars=PHP_FCGI_MAX_REQUESTS:10000

点击在新窗口中浏览此图片
如果你的系统是windows server 2003 SP2的话安装好FastCGI之后WEB服务扩展里面就有FastCGI Handler的扩展了,
点击在新窗口中浏览此图片
在你把上面的几行保存到fcgiext.ini之后,重启IIS就可以了,ISAPI扩展不用你添加就自动添加好了。
Tags: , ,
Feb 23
(一) 喜欢
  上大学时就迷恋咖啡,每次放假回家都要缠着父母买一点咖啡带到学校里面去。同学们说我玩洋,可每当咖啡的香气飘荡在宿舍的时候,她们都会笑着过来每人尝一口。我就是抵挡不住咖啡的那种苦苦的滋味对我的诱惑,褐色的液体里仿佛包含着人生所有的苦涩。那时喝咖啡从不加糖,我想,只有浓浓的苦咖啡才能让人生的滋味常驻心田,尽管我并不懂人生的滋味到底是什么。

  大学毕业后用一种老掉牙的方式认识了杜杰,从此我的世界里有个叫杜杰的男孩,一个高大,谦逊温和又傻傻的男孩。和他相处的时候,我依然喝着单一味道的咖啡,不加糖,而且只在家中喝,咖啡的品牌是雀巢。杜杰很少喝咖啡,他说太苦的味道他不喜欢。我曾经有意无意地问他,哪天陪我去咖啡厅喝杯咖啡吧?他说,好啊!

  日子在忙忙碌碌中一天天过去,对于那杯咖啡的承诺,我们仿佛都忘到了脑后。我不再奢求,他也没再说起过。雀巢咖啡的苦苦的味道仍然留在我一个人的心里。

  那一天是周末,杜杰接我下班,在办公楼下他急匆匆地拉着我的手,将我塞进他的车,话也没说开了就走。我用余光看到他的眼睛,那里分明闪烁着钻石一样的光芒。

  车终于在上岛咖啡店门口停了下来,我高兴得一直张着嘴,半天都没有合拢。他轻轻地拉着我的手,说,走吧,我陪你喝咖啡。其实我知道那杯咖啡的名字叫摩卡,可我偏偏想叫它:勿忘我。当然,这是我给它起的名字,因为我觉得这个名字更适合那杯加了糖的咖啡。在我的人生里,第一次尝到另一种滋味的咖啡,这种滋味永永远远地沁入了我的心扉。

  他说,以后别一个人喝咖啡了,一个人的咖啡是苦的,两个人的咖啡才是甜的,好吗?

  为什么不好呢?我想杜杰是我可以永远依赖的人,我可以因为有他而幸福一生。

  很多个日子都是那样平淡的过去的,但平淡中有爱,有杜杰细心的呵护,虽然他不善言辞,却让我感到温暖。我经常笑他傻,轻骂他连温柔的话都不会说,他只微微的咧开嘴微笑说,行动比语言来得更实际哦!

  (二) 爱

  杜杰对我的求婚简直是这个世界上最笨最傻也是最令我感动的求婚。

  我是单位的中层主管,一个人需要处理一大堆的事情,到年底忙得晕头转向,好不容易抽出时间休息,约了杜杰去咖啡厅,为了散散心。

  要的咖啡是卡布基诺,两杯。

  我搅着那浓浓的泡沫,心里一会儿想着工作,一会儿又想着其它的事情。

  杜杰的手机总是响着,不知他怎么会那么忙。我的心情开始郁闷。

  “怎么了?”

  ……

  “别哭了,慢慢说。”

  ……

  “嗯,好啦,没事的,我有时间去看你。”

  ……

  “乖,听话,好好照顾自己啊。回头我给你打电话。”

  听着杜杰的电话,有点气不打一处来,所有的不愉快都指向他。

  “谁呀?”

  “表妹。”

  “表姐妹还挺多的哦。”

  “是燕子啊。”

  “是家燕还是野燕呢?”眼泪差点流出。

  “欣欣,别瞎扯啊!”

  “我算什么?你就和你的家燕啊野燕啊的温柔去吧!!!”

  不知哪里来的那么大的气,拿了自己的衣服和皮包便跑了出去。

  眼泪流出。心想,不再理他。

  北方冬天的风冷得刺骨,可我全然不知,泪被风吹干,我就那样在大街上走着。

  仅仅五分钟而已,杜杰的车嘎的停在我身边。他下车,不顾我的不情愿,把我硬抱进了车里。我不理他,一个人生着气。

  后来,又笑,笑得止不住。那个地方根本不能停车,他被罚款一百块。

  我想,真是报应!

  到了楼下,仍不肯理他。

  “欣欣,还生气?”

  嘟着嘴不理他。

  杜杰关了车门,站在我面前。

  “你真是小姐脾气啊,都说了是表妹小燕啊,不信你打电话啦。”

  他真的拿出手机打通了塞到我手里。

  “表哥。”话筒里传来声音说。

  “我是欣欣。”

  “表嫂你好啊!”……

  燕子从我和杜杰认识没有三个月的时候就这样叫我。后来知道她失恋了,心情不好,打了电话向表哥杜杰诉苦。

  其实我不是不相信杜杰,只是心里太爱,所以怕失去。

  “信了吗?”杜杰一脸邪笑的对我说。

  “谁信你?”我撒娇。

  ……

  “欣欣,我不太会说话,但你知道我是爱你的,嫁给我好吗?我想照顾你一辈子。”

  以为自己听错了话,诧异!

  不知杜杰从哪里拿出一支玫瑰花,送给我,“我们结婚吧!”

  仔细看了那玫瑰,花瓣已掉了几片。

  “哪里来的?”

  “嘘……,别让人知道,结帐时从咖啡厅的花瓶里拿的。”

  “哈哈……想做小偷啊?”

  “才怪呢?只是想表达我对你的爱!”

  “你……真的……很爱我吗?”

  “欣欣,除了爱你还能爱谁?”

  我扑到杜杰的怀里,幸福的笑,同时带下爱的眼泪。这是世界上最傻的求爱吧?

  

  (三) 远离

  一直以为拥有了杜杰就是拥有了全世界,因为他爱我,我也深爱着他。我以为他永远都不会离开我,他说过的,会照顾我一辈子。我信!

  手机短信中我说道:

  “如果有一天我提早离开了你,你会不会想我?会不会爱我永远?”

  “当做会。”

  “我会爱你一生一世,你能爱我多久?”

  “山无棱角海水干!”我的泪已流下。

  “如果你还爱我……”

  “当然爱你!不爱你还能爱谁!”

  “我写了文章发表在帖子里,他们说我很幸福,我想我的确幸福,你呢,我的爱人?”

  “我也一样!爱你不变!”

  “夜深人静的时候,也许想你是我唯一生存的理由!爱你!最心爱的人!”我说。

  “傻瓜,爱你永远!睡吧!”

  结婚的日子订在6月16日,挺热,却也热闹非凡。

  杜杰很实在,实在的喝酒喝到脸红。

  晚上躺在杜杰温暖的怀里,小心的责怪他:喝那么多酒干什么?

  他吻了我,说,小傻瓜,娶了你幸福啊!

  “去你的,就捡好听的说!”我娇 嗲着。

  “本来就是嘛!”杜杰捏着我的鼻子说,然后呼呼睡去。

  我不喜欢回忆,但是如今回忆起,我是那样依恋杜杰温暖的怀抱,所以每次他出门,都要用他你的双手环绕我的腰,等待他温柔的吻过我,才肯放手离去。有时我想也许是我懦弱吧,怕杜杰放手之后,我便再也不属于他,所以我想将他一辈子牵绊住!

  不知杜杰是不是也不舍得离开我?离开我他是不是也会心痛?不然,为什么每次的拥抱后他将我搂得那样紧?

  终于,杜杰的世界不再属于我,尽管,在他离开以前,我们爱着,深爱着!

  离开的那天,他抱了我,说,宝贝,好好照顾自己。又对妈妈说,您老也多保重!

  然后杜杰就轻轻的一转身,走了!

  杜杰去北京没有开车,是单位的车送去的。我不太信命,但那天杜杰走后,我的眼跳了许久许久。

  上午十点左右,我在不知不觉中被判了死刑!一个熟悉的电话打来,却不是杜杰。对方说了很多,可我只听见一句,杜杰走了!

  我不信,我的眼泪也不相信,杜杰走了??????可是我只看见一抹白,盖在我爱的人的身上。那么的刺眼,那么的惹人心碎。

  醒来时是第二天的午后,妈妈在一旁哭肿了眼睛。我不顾阻力的跑到灵前,想去把他喊醒,想去抓住他,哪怕只是他的衣角!然而,杜杰在给了我最后的一个拥抱后,再也听不见我的声音,他走了,走远了,远到我今生今世再也看不清他的样子。

  我抱着黑白相片问,杜杰你骗了我知道吗?你说会照顾我一辈子的,为什么你就这样走了,为什么不带着我?为什么?

  我一个人在这里,你不会想我吗?没有你我能爱谁?

  杜杰你知道吗,我宁愿有一天我也如同你一样离开了这里,去往那个有你的世界,去陪你!

  夜夜我这样哭着说,夜夜哭醒。妈妈便劝说,“傻孩子,杜杰那么疼你,是不希望你这样为他流泪的,在另一个世界,他也许只想看见你的笑!”

  我就是你的一滴泪,可是泪干了,亲爱的,你会回来吗?

  会回来吗?……

  我一千一万次的问!

  

  (四)笑

  烟水流逝的过程里,我四处张望,然而最后,你不是我的,我不是你的。我回首望着过去,仿佛看到了那无数美丽的烟花,无数温情的笑容。我仍然不停的问着自己,亲爱的,你会回来吗?明知不可能!!!

  我每天重复着亿万次的呼吸,杜杰被值在我内心的最深处,不碰则已,一碰便痛彻心扉。每次因想起杜杰而流泪时,我都用手接住,握在掌心里,直到化为乌有。

  两年了,我一直活在和杜杰的回忆里,不肯离去。朋友们同事们开始给我张罗着找男朋友,以前他们是不敢这样的,因为一听到他们说杜杰我便会哭个不停。而如今我学会把泪流在无人的角落。

  认识李森是在我们系统的经验交流会上。我代表分公司上台发言,那两天胃酸过高,疼时只能靠吃止痛片维持。好不容易念完了稿子,下台时已脸色苍白,汗顺着脸颊流下来。

  李森端着一杯热水递给我,问,田欣你病了吗?

  我说胃疼。他开车送我回家。他是会议组委会的,有义务照顾好每一个与会人员,他说。

  睡了两个小时起来,妈妈用异样的眼光问,欣欣,刚才那人是谁?又回来了一趟,买了许多胃药,还有水果。

  不认识,是我们一个系统的。妈说我骗她!我却别过脸去看和杜杰的结婚照,懒得理这位可爱的老太太。

  转天接到问候的电话,顺便也知道了他叫李森,在总公司组织部工作。

  后来,我发现李森和我一样喜欢文字,他给我看他写的诗和散文,那其中淡淡的忧伤就像我在诉说着心情,想念杜杰的痛苦紧紧的向我缠绕过来,我哭。李森不知所措,只轻轻地拍着我的肩说对不起。

  两年了,我没有向别人说起我和杜杰的故事,那天却迎着心痛,告诉了李森。李森沉默,一句话不说,只抽烟。

  走时李森说,周六如果没事的话,请你喝咖啡好吗?

  两年了,因为杜杰的离开,我没有进过咖啡厅半步,戒了咖啡,其实是想忘了杜杰。

  我笑着看他,看着眼前比我小半年的孩子般的他,说好。

  两年了,我没有真正发自内心的笑过。

  

  (五)逃避

  可是我是一个倔强的女子,杜杰走了,我便一直认为我的心也跟他走了,去向另一个世界,不再回来。我对杜杰的眼泪和疼痛不让人知道,不让人看到,只留在心底。

  李森在认识我半年后,在他那间干净的小屋里,对我说,欣欣,我想照顾你一辈子,可以吗?

  突然想起杜杰,他也对我说过一样的话。刹那间以为杜杰在眼前,可看到的是李森。

  我疯一般的从那间小屋逃走,飞奔在大街上,泪,随风飞舞……

  这样的举动伤了李森,他辞职走了,不知道去了哪里。

  “欣欣:

  你不应该永远活在记忆里,我相信杜杰也不希望你这样。你爱他爱到痴狂,爱到心痛,可我对你的爱也一样,你明白吗?我以为你会淡忘了那个属于你和他的年代,我以为因为我的存在,那个年代会在记忆里被销蚀了。可是我错了!我对你的爱也让自己心痛!

  你保重,别让我担心!

  李森”

  这是李森留给我的最后一封邮件。

  我就这样用自己的任性把李森给丢掉了,我不知道去哪里能把他找回来,我不知道!

  然而对李森记忆的深刻远远超乎了我的想象。我伤到别人的同时也伤到了自己。他离开以后,才发现自己的伤口。

  想起某天和李森简单的拉着手,从路的这头走到路的那头。

  想起他曾柔柔的抚摸我的长发。

  想起他的眼神从未离开过我的视线,总是那样深情的看着我。

  想起他的手,他说话的口吻,和他对我的呵护。

  ……

  不能忍受没有李森的日子,就如同当初不能忍受没有杜杰的日子一样。我去打听他的消息。我知道,我想念他,想念到了底限。

  我想,李森的心一定被我伤得很疼,因为每当我想起他时,心也会疼的厉害。

  入夜,做了一个梦,梦见杜杰,笑笑的摸着我的头说,欣欣,别任性了,去找自己的幸福吧。来生我再爱你好吗?

  哭醒。

  亲爱的杜杰,我知道你走远了,再也不会回来。

  可是李森,你知道我在等你吗?

  我多买了一只咖啡杯,因为你说过会陪我喝一生的咖啡的。

  亲爱的李森,你会回来吗?回到那个没有眼泪的温情的年代,所有柔情的眼神和任性的依恋。

  亲爱的,你会回来吗?

  ……
Feb 23
那年,她十六岁,第一次喜欢上一个男生。他不算很高,斯斯文文的,但很喜欢踢足球,有着一把低沉的好嗓音,成绩很好,常是班上的第一名。虽然在当时,早恋已经不是什么大问题,女生追男生也不再是新闻,她更不是那种内向的女孩。但是她从来没有想过要向他表白,只是觉得,能一直这样远远地欣赏他,就很好了。那时,她常常为在路上碰到他,打声招呼高兴个半天,常常放学也不回去,而是上运动场一圈又一圈地慢跑,只为了看他踢球。
  她还学着叠幸运星,每天在那小纸条上写一句想对他说的话,叠成小幸运星,快乐地放在大瓶子里。她常常看着他想,象他那样的男生,应该是会喜欢那种温柔体贴的女孩吧,那种有着一把乌黑的长长直直的头发,有着一双水汪汪的大眼睛,开心的时候会抿嘴一笑的女孩。她的头发很乌黑,但只短短的到耳际边,她有一双大眼睛,但常常因为大笑而眯成一条缝。

  她十九岁,考上一所不算很好但也不差的大学。他正常发挥,考去了另外一所城市的重点大学。她坐着火车离开这个生她养她的小城时,浮上心头的是她点点滴滴与他的回忆。大学生活是以二十几天艰苦的军训生活拉开序幕的。晚上临睡前,其他女生都躲在被窝里偷偷打电话跟男友互诉相思之情,她好多次按完那几个熟悉的数字键,始终没有按下那个呼叫键。十九年来,第一次知道什么叫思念,原来,思念就一种可以让人莫名其妙地掉下眼泪的力量。

  四年的大学生活不算太长,活泼可爱的她身边从来不缺乏追求者,但她却选择单身。好事者问起原因时,她总淡淡一笑, 说:“学业为重嘛。” 她也确实在很努力地学习,只为了考他那所大学的研究生。四年来她的 头发不断变长,她没有再剪短。一次旧同学聚会时,大家看到她时都眼前一亮,一把乌黑的长长直直的头发,水汪汪的大眼睛因恰到好处的眼影而更显光彩,白里透红的皮肤,时不时抿嘴一笑,都忍不出这是昔日的小活宝。他见到她时也不禁心神一动,但当时他的手正挽着另一个女子的纤纤细腰。她看着他身边那个比自己更温柔妩媚的女子,很好地掩饰了心里的一丝失落,只淡淡对他一笑,说,“好久不见了。”

  她二十二岁,以第一名的成绩考上了他那所大学的研究生。他没有继续考研,进了一间外资企业,工作出色,年薪很快就达到了六位数。她继续过着单调甚至枯燥的学生生活,并且坚持单身。一次放假回家,一进门母亲就把她拉过一边,语重心长, 女儿啊,读书是好事。但女人始终是要嫁人生子的,这才是归宿啊。 她点了点头,进房间整理带回来的行李。先从箱子里拿出来的是一瓶满满的幸运星,摆在书架上。书架上一排幸运星的瓶子,都是满满的,刚好六瓶。

  她二十五岁,凭着重点大学的硕士学历和优秀的成绩,很快就找到一份很好的工作,月薪上万。他这时已自己开公司,生意越做越大。第三间分公司开业的时候,他跟一个副市长的千金结婚了,双喜临门。她出席了那场盛大的婚礼,听到旁边的人说起新郎年青有为,一表人才,新娘家世显赫,留洋归来,貌美如花,真是一对璧人。她看着他春风得意的笑脸,心里竟也荡起一种幸福的感觉,莫名的感觉,仿佛他身边那个笑容如花的女子就是自己一样。

  她二十六岁,嫁给了公司的一个同事,两个人从相识到结婚不到半年的时间,短到她都不知道两人是否恋爱过。他们的婚礼在她的极力要求下搞得很简单,只邀请了几个至亲好友。当晚她喝了很多酒,第一次喝那么多酒,没有醉,却吐得一塌糊涂。她在洗手间看着镜子里那张在水汽蒸腾下逐渐模糊的脸,第一次有种想痛哭一场的冲动。但终于,她还是把妆补好后走出去继续扮演幸福新娘的角色。她的外套的衣袋里,有她早上仓促叠好的一颗幸运星,里面写着,“今天,我嫁作他人妇了。可是我知道,我爱的是你。”

  她三十六岁,过着平静的小康生活。一日在街上巧遇一旧同学,闲聊起他,竟得知他生意失败,沉重打击后终日流连酒吧,妻离子散。她在找了好几天后终于在一间小酒吧找到他。她没有骂他,只是递给他一本存折,那里面是她所有的积蓄,然后对他说,“我相信你可以重头再来的。”他打开存折,巨额的数字让他不可置信,那些所谓的亲朋好友在听到他说了“借钱”两个字就冷眼相向避而不见,她不过是一个快让他淡忘名字的老同学,却如此慷慨大方?她依旧淡淡一笑,说,“朋友不是应该互相帮助的吗。”当晚她的丈夫知道了后,一个重重的巴掌立刻甩了过来,大吼道:“上百万一声不吭就全给了他,你是不是看上人家了!”她被那巴掌击倒在地,没流泪也没说话,更没有回答她丈夫的质问。虽然她从来没有向别人承认过她爱他,但她也决不会向别人否认她爱他。

  她四十岁,那年他的公司已经成为同行业里最具竞争力的几间大公司之一。那晚他带着两百万和他的公司的百分之十股份转让书到她家。她的丈夫一边乐呵呵地说,“不必这么客气嘛,朋友之间互相帮助是应该的,”一边在股份转让书上签下名字。她没说什么,只说了句,“不如留下来吃顿饭。”他没有不答应的理由。饭菜端上来时,他惊讶地发现自己最爱吃的几样菜都有。但他抬头看到她一脸恬静地为丈夫儿子夹菜时,心里一下释然,觉得是自己想多了。临走的时候他从口袋里拿出一张请贴,笑笑说:“希望你们到时都可以来。”她以为是他又有分公司开业,不以为意,接过随手放在沙发上。送走他转身回厨房洗碗的时候,突然听到她丈夫大声说,“人一有钱就风流这句话果然没错啊。看你这个旧同学,这么快又娶第二个了。”她的手一颤,被一个破碗的缺口划了一下,血一下子涌了出来,一滴接一滴不停往下滴。她看着那片泛着微红的水,突然想起十五年前那个笑容如花的女子那身婚纱,似乎就是这个颜色。

  她五十五岁,一天突然在家里昏倒,被送去医院。一番检查后,医生脸色沉重,要把她丈夫叫到一边说话。她毕竟是个聪明的女人。叫住医生,她很认真地问,“我还可以活几天?”三个月,电影里的桥段用得多了,没想到真应了人生如戏这句话。执意不肯住院,她回到家里开始为自己准备后事。一个人活了大半辈子,要交代的事多着。收到消息的亲朋好友纷纷赶来见最后一面。他是最后一个。她躺在床上,已经开始神智不清,但一看到他手上那刻幸运星,立刻清醒了过来,这是给我的吗? 她指了指那颗幸运星,脸上竟露出一丝笑容。他连忙回答,“啊,是。是啊。这是我带来给你的。”真是无心插柳,这不过是他刚出机场时碰到那个为红十字筹款的小女孩送的,他当时急着来见她,接过来时都没看清是什么东西就赶着上车了,一路握着也不知觉。她接过那颗幸运星,紧握着放在胸前好一会不放。终于,她指了指旁边的桌子,那上面也放了一颗幸运星,那时她昨晚花了一个多小时才叠好的,缓缓对他说道:“在我以前住的房子里,还有三十九罐幸运星。等我火化的时候,你把那些连同这两颗和我放在一起,好吗?”他还没来得及回答,她已经合上眼睛,一脸安详。

  她火化那天,他按照她的遗愿把那些幸运星撒在她身上,三十罐,不小心滚落一两颗在地也没人发现。他转身要走的时候,忽然发现地上还有两颗。拣起来,他想,算了,就当是留个纪念吧。

  他七十岁。一天,他戴着老花眼镜在花园里看书时。四岁的小孙子突然拿着两张小纸条,兴冲冲跑到他面前,嚷道,“爷爷,爷爷,教我识字。”他扶了扶眼镜,看清第一张小纸条上的字,“杰,你今天穿的那身蓝色球服很好看哦。还有,6这个号码我也很喜欢,呵呵。 ”他皱了皱眉,问孙子, 这两张小纸条你从哪里找来的? 这不是纸条啊,这是你放在书桌上那两颗小星星啊。我拆开它,就发现里面有字了哦! 他一愣,再去看那第二张小纸条,“杰,有一种幸福是有一个能让你不顾一切去爱他一辈子的人。”

  “有一种幸福是有一个能让你不顾一切去爱他一辈子的人。”他念着,念着,泪流满面……
Tags: ,
分页: 81/196 第一页 上页 76 77 78 79 80 81 82 83 84 85 下页 最后页 [ 显示模式: 摘要 | 列表 ]