HHVM 安装配置(准备全部替换现在系统)

HHVM很早就听说过,之前刚出来的时候版本还不太稳定,上周听说百度大部分系统都切换到HHVM 突然也想替换现用系统。好吧开始折腾吧!
我现在用的UBUNTU 14.04版本,为了省事使用官网的repo。结果repo都添加完了。
sudo apt-get install hhvm
[sudo] password for XX:
正在读取软件包列表… 完成
正在分析软件包的依赖关系树
正在读取状态信息… 完成
有一些软件包无法被安装。如果您用的是 unstable 发行版,这也许是
因为系统无法达到您要求的状态造成的。该版本中可能会有一些您需要的软件
包尚未被创建或是它们已被从新到(Incoming)目录移出。
下列信息可能会对解决问题有所帮助:

下列软件包有未满足的依赖关系:
hhvm : 依赖: libboost-filesystem1.53.0 但无法安装它
依赖: libboost-program-options1.53.0 但无法安装它
依赖: libboost-system1.53.0 但无法安装它
依赖: libboost-system1.53.0 但无法安装它
依赖: libboost-regex1.53.0 但无法安装它
依赖: libboost-thread1.53.0 但无法安装它
E: 无法修正错误,因为您要求某些软件包保持现状,就是它们破坏了软件包间的依赖关系。
好吧,我也不想动了其它的,从源代码开始:
sudo apt-get install autoconf automake binutils-dev build-essential cmake g++ git \
libboost-dev libboost-filesystem-dev libboost-program-options-dev libboost-regex-dev \
libboost-system-dev libboost-thread-dev libbz2-dev libc-client-dev libldap2-dev \
libc-client2007e-dev libcap-dev libcurl4-openssl-dev libdwarf-dev libelf-dev \
libexpat-dev libgd2-xpm-dev libgoogle-glog-dev libgoogle-perftools-dev libicu-dev \
libjemalloc-dev libmcrypt-dev libmemcached-dev libmysqlclient-dev libncurses-dev \
libonig-dev libpcre3-dev libreadline-dev libtbb-dev libtool libxml2-dev zlib1g-dev \
libevent-dev libmagickwand-dev libinotifytools0-dev libiconv-hook-dev libedit-dev \
libiberty-dev libxslt1-dev ocaml-native-compilers \
php5-imagick libyaml-dev

git clone git://github.com/facebook/hhvm.git
cd hhvm
git submodule update –init –recursive
cd ..

cd hhvm
cmake .
make -j [number_of_processor_cores] # eg. make -j 4
sudo make install

这上面的命令官网提供详细如下

https://github.com/facebook/hhvm/wiki/Building and installing HHVM on Ubuntu 14.04

安装完后直接可以运行了。
我这里使用的fastcgi + nginx
https://github.com/facebook/hhvm/wiki/FastCGI
hhvm –mode server -vServer.Type=fastcgi -vServer.Port=9000
nginx: fastcgi_pass 127.0.0.1:9000;
就可以了,没什么异常出现,公司的网站代码,还有我帮我朋友做的网站,一切正常。空了测试性能。

二叉树及二叉排序树的PHP实现

最近看数据结构搜索到一个文档,屌爆了.php实现的基本的数据结构和算法,二叉树、二叉搜索树、AVL树、B树、链表和常见排序、搜索算法等等都有实现,而且全部是使用面向对象来实现的,只能膜拜。ps:c++,java ruby oc都有,只能说好屌!
源码地址:http://www.brpreiss.com/books/opus11/public/Opus11-1.0.tar.gz
文档地址:http://www.brpreiss.com/books/opus11/

试用 PHP trait

 < ?php
 trait HelloWorld {
   public function sayHello() {
     echo 'Hello World!';
   }
 }
 
 class TheWorldIsNotEnough {
   use HelloWorld;
   public function sayHello() {
     echo 'Hello Universe!';
   }
 }
 
 $o = new TheWorldIsNotEnough();
 $o->sayHello(); // echos Hello Universe!
 ?>

呵呵,是不是有点像ruby 的多重继承(include?),呵呵,其实都差不多,这个功能不错,以后框架可以用到。PHP5.4以上的功能才支持哦!

FLASH上传(uploadify,swfupload) PHPSESSION丢失问题解决办法

基于jQuery和Flash的多文件上传插件uploadify的确很好用。但今天在用这个插件的时候遇到了一个非常头痛的问题,上传文件的时候,我后台的session突然都丢失了,我进入调试去查看session变量发现为null。悲剧,难道我不能用这个插件了吗?当然不可能,这么好的东西当然要用起来,于是就去找解决方案了。
终于,答案有了,原来一般情况下(非IE浏览器),因为诸如uploadify,swfupload采用的都是flash客户端,这样它们产生的useragent与用户使用浏览器的 user-agent必然不同。所以,虽然用户登录了你的系统产生了一个session,但是当触发上传程序时会产生另一个session(在上述 useragent选项开启的情况下)。所以,不是session丢失了,而是当你上传文件时,flash为uploadify另外创建了一个session。好了,既然找到问题的根源,我们就想办法让服务器在session判空之前将session值手动传递过去。

在PHP中的解决方案如下:

client.php:

‘script’ : ‘/ht.php/public/index/productUpload/sessionid/{-$sessionid-}’  // {-$sessionid-} 相当于session_id();

server.php的代码段:
session_id($_GET[‘sessionid’]);
session_start();