Inspirer

文章列表

Laravel Pipeline 组件的实现

Laravel 框架中有一个非常有趣的功能,就是 HTTP 中间件,我们在定义路由的时候,通过中间件对访问进行过滤。来自外部的请求首先经过全局中间件,若通过,则会继续穿过层层路由组所设置的中间件,在到达目的路由,当然,目的路由也可能定义了个中间件,通过后,该路由的处理对象(如控制器),得到的就是一个经过过滤的请求了。

开始

本文当然不是讨论中间件如何使用,而是其实现的基础。Laravel 框架中有一个组件叫做 Illuminate\Pipeline,意味 “管道”,我们看看下面这个代码示例:

<?php
use Illuminate\Pipeline\Pipeline;

$pipe1 = function ($poster, Closure $next) {
    $poster += 1;
    echo "pipe1: $poster\n";
    return $next($poster);
};

$pipe2 = function ($poster, Closure $next) {
    if ($poster > 7) {
        return $poster;
    }

    $poster += 3;
    echo "pipe2: $poster\n";
    return $next($poster);
};

$pipe3 = function ($poster, Closure $next) {
    $result = $next($poster);
    echo "pipe3: $result\n";
    return $result * 2;
};

$pipe4 = function ($poster, Closure $next) {
    $poster += 2;
    echo "pipe4 : $poster\n";
    return $next($poster);
};

$pipes = [$pipe1, $pipe2, $pipe3, $pipe4];

function dispatcher($poster, $pipes)
{
    echo "result: " . (new Pipeline)->send($poster)->through($pipes)->then(function ($poster) {
            echo "received: $poster\n";
            return 3;
        }) . "\n";
}

echo "==> action 1:\n";
dispatcher(5, $pipes);
echo "==> action 2:\n";
dispatcher(7, $pipes);

上述代码执行结果如下:

==> action 1:
pipe1: 6
pipe2: 9
pipe4 : 11
received: 11
pipe3: 3
result: 6
==> action 2:
pipe1: 8
result: 8

让 Laravel 变得更富有可能 —— 基于 swoole 的 Laravel

现在,Laravel 可以有更多可能。

我基于 Swoole 对 Laravel 框架的底层做了些许调整,使得其在能够运行至 Swoole 提供的强大特性下的同时,又能够不改变原有的开发模式(但是思路可能应该有些许调整了哦~)。现在已经有了一个可用的雏形,项目地址:

https://github.com/chongyi/swoole-laravel-framework

事实上已经有人做过此类工作,不过或多或少都有些不足,使得我们无法在一些工作中直接使用,例如对于文件上传和下载的支持不是很好,亦或者完全改动了原有的开发模式,使得旧的代码很难无缝切换。

当然,目前的情况依旧不允许直接使用在现有的项目中,因为还有很多未知 BUG 的存在。不过问题也在不断解决,毕竟本质上提供 HTTP 服务只要遵循 HTTP 协议就很难出现差池。

当前优先保证了 Laravel 5.1 下的可用,实际情况是 5.2 也能够得到支持,不过我会在基本功能稳定后建立 tag 便于各位后期能够快速通过 composer 安装。

欢迎各位 Star!也希望诸多大牛能够提供更多的建议~

计划基于 Laravel 实现开源的电商平台

我希望基于 Laravel 构建一个开源的电商平台,初始目标是能够令其适用于中小型的电子商务网站需求,同时也具备快速改造成内容管理系统或其他类型平台的能力。该项目将会对组件进行细分,在初期阶段作为整体开发,后期会将里面比较独立的部分拆出成为公共组件独立开发。

计划在明年 3 月完成所有后端模块,前端页面可能会因为时间和工作耽搁、存在不确定性而后发布。

这个计划更多是作为个人实验和学习使用,因此也希望愿意参与的朋友加入~共同进步~

项目地址:https://github.com/dybasedev/actloudbur

MIT License

说明:现在公司内部电商系统和作者思路相同,因此先暂时以公司内部项目为主,后期依旧会开源,且时间线同样在明年三月~~~

PHP 7 的编译安装

之前有一篇 《PHP 7 开发版本编译安装》,不过那时候连 RC 版都不是,昨日正式版已经在 Github 上发布(参见: https://github.com/php/php-src/releases) ,于是乎迫不及待的在此分享其编译安装的过程。

其实 php 的编译安装相当简单,且每个版本差异不大,正因为如此之前版本的编译安装过程也可以参考,当然,需要注意的是,每个版本的编译参数存在部分差异,以 ./configure --help 中具体描述的编译配置参数为准。

本文中系统环境为 CentOS 7 64bit,如使用其他系统环境的,请注意在某些 依赖安装环节 的差异。

IE 死活无法保存 cookie 的问题(去屎吧 IE)

近日在公司遇到了一件奇葩问题 —— IE 死活无法保存 Cookie!

在平日一切正常,那天就出了这么一出问题,可问题是前两天还正常运行呢。Cookie 无法保存带来的一系列问题让人无比抓狂,但就是找不清楚问题在哪(好吧我承认对 IE 真的不了解)。按道理,并没有限制 IE 的 Cookie 功能,没有设置什么,也没有改动什么,而且其他网站依旧能够正常保存 Cookie。

问题原因到底是啥呢?

推荐书籍——《PHP扩展开发及内核应用》

先说说为什么突然推荐这本书的原因。

由于需要为某一个项目写一个特别的脚本解析器(或者说一个特殊的类似正则引擎的东西),而恰好这个玩意儿需要和 PHP 结合起来。这时候效率又有一定需求,尤其是在解析脚本的时候,其余则没有太多效率要求。

由于其他语言本人不是很拿手,于是打算干脆写个扩展,用 C 写编译器还是蛮合适。但对于用 C 写 PHP 的扩展还是第一次,于是计划好好在近期研究一下这个东西。正恰好在 github 上搜到了相关书目的电子翻译档。原来鸟哥也参与了,于是满怀欣喜,将此书推荐给同样想要开发扩展的朋友。

github 地址:https://github.com/walu/phpbook

直接阅读地址:http://www.walu.cc/phpbook

PHP Cli 程序开发

PHP 在大多数人心目中主要是做 web 开发的,但实际上从 PHP 4.2.0 起就开始支持 Server Application Programming Interface 即服务端应用编程接口,也称其为 Command Line Interface,也就是我们常说的 CLI。这使得 PHP 开发外壳应用(Shell)变为可能。其实这个功能自 PHP 5 起变得越来越易用,这对于 PHP 应用于更多情景变得可能,比如多进程爬虫、服务端守护进程、自动化部署工具等等,我们如今使用的 composer 就是典型的 PHP CLI 程序。

本文主要内容就是围绕 PHP CLI (下文简称 CLI) 进行讲述,并分享一个十分强大且易用的 symfony 组件 —— console (命令行)组件。

PHP 知识补全 —— 生成器 (generator)和协程的实现

先说一些废话

PHP 5.5 以来,新的诸多特性又一次令 PHP 焕发新的光彩,虽然在本文写的时候已是 PHP 7 alpha 2 发布后的一段时间,但此时国内依旧是 php 5.3 的天下。不过我认为新的特性迟早会因为旧的版本的逐渐消失而变得越发重要,尤其是 PHP 7 的正式版出来后,因此本文的目的就是为了在这之前,帮助一些 PHPer 了解一些他们从没有了解的东西。所以打算将以本篇作为博客中 PHP 知识补全 系列文章的开篇。

其实在写本文之前,我对生成器以及基于此特性延伸出来的 php 的协程实现并没有比较直观的了解,主要是我个人水平并不是很高,属于典型的刚入了门的 PHPer。所以在看了前段时间鸟哥(laruence)博客中对协程的讲解(原文链接:《在PHP中使用协程实现多任务调度》)后,在我个人对本篇的理解上,针对那些比较难以理解的概念(包括我个人在理解这一概念的时候的难点),以一个更为通俗的方式去讲明白。当然由于本人也是刚刚去学习这一概念,所以有些不得当的地方在所难免,希望大神看见了请不吝赐教。

PHPer

PHP 相关技术知识及资料收集,更注重通过挖掘 PHP 基础内容来延伸出更为高级的 PHP 用法。PHP 最早作为单纯的 web 开发语言,现如今更需要新的活力,这一系列文章的目的正是如此。

分类