PHP-YAF 的 PPA 源

PHP-YAF 是 laruence 开发的类似 Zend Freamwork 的 PHP 扩展框架。轻巧、快速,扩展性良好。并且可以与 PEAR、Zend Freamwork 这些库协调工作,兼容良好。因此,这一年多,我基本上已经放弃 ZF 为主体的集成框架(还记得 Ninny Project 吗?),并将其移植到了 YAF 上。 虽然,作为 PHP 开发者,laruence 一早就对 YAF 进行了 PECL 的支持,使用 PECL 安装 YAF 也很方便。但是作为一个重度 apt 依赖患者,还是希望能够使用源方式维护安装包。 因此,这个 PHP-YAF 的 PPA 源诞生了! 由于完全不会用 bzr,因此没有用 launchpad 的服务,我将打包程序和相关配置放在了 github 上。

为什么 PHPer 应当学习 Golang

熟悉我的朋友应当知道,近些年的大部分时间我的工作都会多少和 PHP 相关。随着 PHP 有着越来越深入的了解,以及遇到越来越多的不同业务时,使用 PHP 总会让我有一种莫名的无力感。当然,并不是我一个人在使用 PHP 的时候遇到了问题。事实上,每个略微有一些经验,接触过一些需求的人都会有同样的困惑。各种配合 LAMP(或者LNMP?)架构的后端技术也因此被发明或被发现,进而整合到 PHP 的开发的技术体系中。从简单的 Memcached作为数据中转,cron 后端定时处理;到 Gearman、RabbitMQ 这些队列神器;最近 Laruence 甚至封装了利用 libcurl 的异步特性实现并发 RPC 调用的 yar 扩展。几乎整个社区都在寻找 PHP 的摩西之路。 好吧,说了一大堆,回归主题。之前我写了一篇英文练笔《Why you PHP guys should learn Golang》,获得不少国际友人的关注。排除拼写和语法被他们诟病外,主要是有许多朋友觉得我没把事情说清楚。所以这里我用母语重新聊聊这个事情,只是这些国际友人什么时候能学会阅读中文呢?;) Go 或者 Golang,是由 Google 支持的快速、一致、稳定的,有活跃的社区支持的开源编程语言。越来越多的应用选择使用 Golang 进行构建。虽然 Rob Pike 说“… 我们希望 C++ 程序员来了解 Go 并作为一个可选的语言 …”,不过我真得认为:PHPer 应当学习 Golang! 接下来我们就来谈谈原因。

Why you PHP guys should learn Golang

Go or Golang, is a open source, community supported, fast, consistent, scalable, productive language, and conceived by Google. More and more applications were build with it. Although Rob Pike has said that “… we expected C++ programmers to see Go as an alternative …”, but I really think of that: You PHP guys should learn …

如何采集部分内容图片化的网站

首先要声明:虽然这是互联网行业的一个普遍现象,但本文讨论的内容,与我所在的公司和所从事的行业无关。 事情的起因是在一个讨论 yaf 的 qq 群有人问如何抓取某网站内容,比如这里。我得说,这个网站在防采集和防抓取方面一直做得很出色。当然更出色的是他们运营的内容的价值。 在几年之前,我就探索过这个问题。对内容的数字、标点进行部分图片化,并且不是固定图片。URL 甚至 md5 值都是变化的。那么最基本的思路就是图像内容的识别。 例如这是其中一个放大了 5 倍的数字:。蓝色背景是我手工加上去的,因为还有这样一个图:,你会发现原来同样的内容的图中还会有干扰点和偏移量的存在。那么难道真得要祭出像 opencv 这样的神器吗?其实,用一个采样/阈值匹配的办法,用 php 和 gd 库就可以实现一个简单的图像识别。

关于 QQ OAuth 封装出现 T_PAAMAYIM_NEKUDOTAYIM 的解决办法

许多网友在使用我的 OAuth 的腾讯微博封装(腾讯微博开放平台的PECL的OAuth封装)时都遇到了 T_PAAMAYIM_NEKUDOTAYIM 的错误。为了方便大家,干脆这里统一说明一下吧。 这个错误的责任在我。 由于我使用的开发和部署环境都是 Ubuntu 环境,PHP 版本 5.3.3。我在编码的时候使用了一个 5.2.x 不支持的特性。在 XY/QQ/Store.php 的 28 行: 经不完全验证在 5.2.x 及以下版本会报 T_PAAMAYIM_NEKUDOTAYIM 错误。 解决办法其实很简单,将 28 行代码替换为: 仅此即可。 真是抱歉了!同时感谢 ahu、sjolzy 提供的关键信息!

使用 PECL 的 OAuth 库访问 QQ 微博 API

大势所趋,QQ 也在自家门上开了个小洞让诸位看客过过瘾。不过 API 文档不给力,疏漏多、讲得粗,没有 SDK,没有 Step by step,关键细节交代不清……幸而,摸索两日,总算是探得一个靠谱的办法——PECL 的 OAuth 库访问。 特别记录于此,供众玩家观赏。

Web编程异步模型的 Gearman 实现(残)

写了 PHP 原生的二段式异步模型的实现,我就想着用 Gearman 实现一个 callback 方式的异步。还没准备好怎么去写,就看到了靓文一篇《Gearman 心得》。 看过之后,甚感压力:好文!!于是,弃笔不写,洗洗睡罢了…… 补充一下,在“心得”文中仅仅说明了不阻塞的后台作业。对于异步获取数据并未说明。所以我这里罗嗦一下…… worker 如果用 php 来实现,并且不用《Web编程异步模型的PHP 原生实现》中的异步方式,是无法实现 php 的 client 的异步的。比较好的实现方式是 worker 不使用 php,用 python、perl 或者 c,实现一个线程池来执行 job。当然,私下觉得用 stackless python 可能是更好的选择。 2010年07月18日补充: 好吧,终于有人撰文,正好可以补充完整这个异步思路: 淺談coroutine與gevent 就他了,太棒了!

Web编程异步模型的PHP原生实现

这是基于上一篇随笔:关于Web编程异步模型的白日梦的实现。这一思路我记得在 05 年还是 07 年的时候就在 ChinaUnix 上有高人所讨论,只是自己当时愚钝未能明晰本质,纠结于 PHP 的多线程之中…… 这个实现写好有段时间了,最近琐碎的事情很多,一直没有整理出来。今日得闲记录下来。 利用PHP自带的 stream_select 函数实现异步,利用这个函数使得 PHP 原生支持的异步调用实现,无须第三方服务或库。不过只能实现二段式异步调用,就是说会有明显的 Begin 和 End 两个阶段。

关于Web编程异步模型的白日梦

早上刷牙,处于半睡状态。突然想起昨天晚上看到的那个 go-lang 的 MVC 框架,若使用 go func() 方式异步获取数据,应当是不错的。窃喜……梦醒…… 在地铁上被前前后后那些特种男女逼到车角,无奈。又想起早上那个白日梦,遂上网搜索了一番。得老赵的佳作一篇《F# 与ASP.NET(1):基于事件的异步模式与异步Action》。之前看过,由于对微软无爱,未能细品。今日一读,如醍醐灌顶,豁然开朗。 遂整理思路如下,以待后用。

关于昨日爆出的 Nginx + PHP CGI 漏洞的一点点补充

我第一次看到这个漏洞是在 Laruence 的博客。看完之后,我赶紧评估了一下我们正在开发的产品出现这个漏洞的可能性。还不错,在我们当前架构下,这个漏洞被成功利用的可能性为 0 …… 结果,今天在大嘴巴 cnbeta 看到了这篇很标题党的新闻《80后发现nginx 0day漏洞,上传图片可入侵100万服务器》。然后引用的出处是这里。 好了,我认为我提供的背景资料足够详细了。现在说说为什么我们的产品不会出现这个被利用的可能吧。 其实很简单,将资源文件和 php 脚本文件放在不同的域名下面。然后将资源文件(含产品自身的和用户贡献的)的访问限于只作文件传输,不作任何的脚本解析。 例如 PHP 脚本执行的主机名是 www.mikespook.com。而上传文件和图像、js、css 等放在 static.mikespook.com 主机名下。 其实,就是这么简单的一个隔离措施,就避免了出现这种上传并解析的漏洞。 即使想用同一个域名,通过对 nginx 的配置禁止资源文件目录下的文件被当作脚本解析也是很容易的。 这个故事教育我们:细节是基石,架构是王道!!! 另,根据来自高春辉的可靠消息,手机之家也不存在此问题……