Submitted by gouki on 2015, June 29, 3:48 PM
zephir是phaclon旗下的一个小组件,功能是用PHP来为PHP写扩展,听起来有点拗口,但事实上它就是这么做的,只是重新定义了一些语法。
http://zephir-lang.com有相应的介绍资料,我这里就不一一介绍了。
官方说,zephir的安装有两种方式,1、composer 2、git clone来安装
我两个都试了一下,发现基本上差不多,composer global require "phaclon/zephir" ,其实到最后还是用git clone来下载源码并安装罢了
OK,那我们就用composer 来安装吧。安装好后,可以执行zephir这个命令。首次启动时候会提醒你,zephir并未安装,是否要安装,原来,通过composer安装时,只是扔了一个可执行的zephir文件到/usr/bin目录下
按回车进行安装,会提示你json-c/json.h文件找不到,于是到~/.composer/vendor/phaclon/zephir目录下,执行"./install-json",还是提示json-c/json.h文件不存在,进入json-c目录一看,居然是空的,这时候就有多种方法了
1、git-clone一下json-c 编译安装
2、利用brew install json-c
建议使用第二种,第一种,要re2c,gcc,make等,而且我还是安装失败了。在使用brew install json-c 安装完后,再运行 zephir,就直接安装成功了。
做个笔记而已。
后记,测试了一下json_decode(json_encode(simplexml_load_string(......)),true)的处理,在处理4M左右的xml时,效率并没有提升很明显。PHP大约0.78,zephir大约0.72,快了0.06秒左右。多次测试平均都大约在0.06左右。如果文件很小时,几乎没有提升,那,我看来只能用来保密代码了。
Tags: php, zephir, phaclon
苹果相关 | 评论:0
| 阅读:20904
Submitted by gouki on 2013, July 8, 10:09 AM
官方的php5版本到现在还是5.3但我想用json_encode的unescape_unicode的选项,所以,只能升级PHP至5.4了
其实真的有现成的包,如果你搜索网上的内容,他们会也和你说,看一下:dotdeb.org吧。于是我看了一下dotdeb.org。确实不错,不但有升级教程,还有mirrors
1、安装dotdeb.org的源:参考:http://www.dotdeb.org/instructions/
有两种试,如果你只是安装PHP,就直接将下面的内容复制到/etc/apt/sources.list
XML/HTML代码
- deb http://packages.dotdeb.org squeeze-php54 all
- deb-src http://packages.dotdeb.org squeeze-php54 all
2、GPG的KEY更新并加入到系统里
XML/HTML代码
- wget http://www.dotdeb.org/dotdeb.gpg
- cat dotdeb.gpg | sudo apt-key add -
如果你本来就是root,那上面的sudo就不需要了
3、apt-get update
4、apt-get upgrade
就这样,你成功了。。。
Tags: debian, php
Linux | 评论:0
| 阅读:23517
Submitted by gouki on 2013, April 16, 5:01 PM
苹果下面安装php5.4还算是比较方便的,主要是默认为php5.3,想用trait的时候,没5.4跑不了啊。。
于是直接使用brew install php54,结果报错,查了下资料,原来,需要:
- brew tap josegonzalez/homebrew-php
- brew tap homebrew/dupes
- brew install php54 --with-mysql --with-intl --with-fpm --without-apache
因为有装nginx。所以就without-apache了。。。
安装好后,brew 会告诉你:
XML/HTML代码
- The php.ini file can be found in:
- /usr/local/etc/php/5.4/php.ini
-
- ✩✩✩✩ PEAR ✩✩✩✩
-
- If PEAR complains about permissions, 'fix' the default PEAR permissions and config:
- chmod -R ug+w /usr/local/Cellar/php54/5.4.13/lib/php
- pear config-set php_ini /usr/local/etc/php/5.4/php.ini
-
- ✩✩✩✩ Extensions ✩✩✩✩
-
- If you are having issues with custom extension compiling, ensure that this php is
- in your PATH:
- PATH="$(brew --prefix josegonzalez/php/php54)/bin:$PATH"
-
- PHP54 Extensions will always be compiled against this PHP. Please install them
- using --without-homebrew-php to enable compiling against system PHP.
-
- ✩✩✩✩✩ INTL Support ✩✩✩✩✩
-
- icu4c is broken as of mxcl/homebrew#03ed757c, so you will need to install intl as
- a separate extension:
-
- brew install php54-intl
-
- ✩✩✩✩ FPM ✩✩✩✩
-
- To launch php-fpm on startup:
- * If this is your first install:
- mkdir -p ~/Library/LaunchAgents
- cp /usr/local/Cellar/php54/5.4.13/homebrew-php.josegonzalez.php54.plist ~/Library/LaunchAgents/
- launchctl load -w ~/Library/LaunchAgents/homebrew-php.josegonzalez.php54.plist
-
- * If this is an upgrade and you already have the homebrew-php.josegonzalez.php54.plist loaded:
- launchctl unload -w ~/Library/LaunchAgents/homebrew-php.josegonzalez.php54.plist
- cp /usr/local/Cellar/php54/5.4.13/homebrew-php.josegonzalez.php54.plist ~/Library/LaunchAgents/
- launchctl load -w ~/Library/LaunchAgents/homebrew-php.josegonzalez.php54.plist
-
- The control script is located at /usr/local/Cellar/php54/5.4.13/sbin/php54-fpm
-
- Mountain Lion comes with php-fpm pre-installed, to ensure you are using the brew version you need to make sure /sbin is before /usr/sbin in your PATH:
-
- PATH="/sbin:$PATH"
-
- You may also need to edit the plist to use the correct "UserName".
-
- Please note that the plist was called 'org.php-fpm.plist' in old versions
- of this formula.
-
- To have launchd start php54 at login:
- ln -sfv /usr/local/opt/php54/*.plist ~/Library/LaunchAgents
- Then to load php54 now:
- launchctl load ~/Library/LaunchAgents/homebrew.mxcl.php54.plist
- Warning: /usr/local/sbin is not in your PATH
- You can amend this by altering your ~/.bashrc file
记下这些路径和使用方法,以后会用得到
Tags: mac, php
苹果相关 | 评论:0
| 阅读:22907
Submitted by gouki on 2012, May 18, 10:46 PM
关注一下这玩意是因为在命令行下写程序的时候,发现不能够自我守护。都只能用shell来再开一个进程监控。本来想做三角监控的,但想想,只是为了一个小程序,我得写三个程序来自我守护,真没劲啊。
所以,找到pcntl_fock函数的时候很激动,其实在很久以前看过,但是没关注过,毕竟很多时间跑命令行程序的时候,一下子就跑完了,真正跑了不退出的程序,真的很少用。
http://rainbird.blog.51cto.com/211214/277861/
- <?php
- $pid = pcntl_fork();
- if($pid == -1){
- //创建失败咱就退出呗,没啥好说的
- die('could not fork');
- }
- else{
- if($pid){
- //从这里开始写的代码是父进程的,因为写的是系统程序,记得退出的时候给个返回值
- exit(0);
- }
- else{
- //从这里开始写的代码都是在新的进程里执行的,同样正常退出的话,最好也给一个返回值
- exit(0);
- }
- }
- ?>
所以,以下内容就来自于上述代码中有涉及到的博客:
XML/HTML代码
- 这样一改好理解多了,如果你父进程希望知道子进程正常退出的话,可以加上前面的pcntl_wait.
- 函数的用法是整明白了,在实际的工作中有什么用处呢?
- 1.后台程序
- 命令行程序好写,服务程序也好写,笔者觉得这服务程序最难写.想想原来想在windows下写个服务啥的,又是要注册服务又是要这样那样的老费劲了.现在专职管理linux想让个命令行程序在后台运行,直接在命令后面加个&就搞定了.但是这样总觉得土.有了pcntl_fork突然发现世界是那么的美好.当主进程成功创建子进程并获得子进程的id以后,自己在临死前还不忘说一句:"我已成功运行,我的id是:xxxx(子进程的id)",完了还给系统返回个0(正常退出),哈哈,死都死的那么有尊严.
- 前面说的是程序常驻内存的情况,当然了这时候要注意内存的释放以及向日志文件打印信息,而不是往屏幕上(一打印信息程序就退出的哟).还有一种情况是:程序被其它脚本调用,其它脚本只关心程序是不是正常运行,如果程序要运行很长时间才能运行完的话,最好不让脚本等待.这样的话pcntl_fork又派上用场了:)
- 2.延时处理.
- 有的时候,我们程序退出的时候要清理自身产生的东西,比如说要删除自己(当然了linux下面是可以删除正在运行的文件的,只是举个例子),这个时候就可以另起动一个进程,然后自己结束了,把事情交给另一个进程来做.当我们写服务程序的时候,我们肯定是写日志文件记录程序的运行情况(要不谁知道程序是不是在那睡大觉的:0).程序正常退出的时候我们可以写一条日志说程序退出了,但是当程序收到linux下伟大的kill -9的时候,怎么记录自己的退出行为呢?额.....这个和php的进程信号有关好像和这个没多大关系.
- 另一种情况:一个完善的程序一般都支持start,stop,restart这样的参数.start好说,stop也好说,既然start和stop都好说了,这个restart就先stop然后再start就可以了啊.额...好像又和pcntl_fork没多大关系,当你收到重启的信号总不能还是kill然后再start吧,是不是太黄太暴力了?还是温柔一点,让当前进程退出,让另外的进程再把它拉起来吧.在windows下想实现这一点似乎很困难呢,比如程序更新的时候,一般都是单写更新程序,或者程序退出的时候另起动一个批处理启动自己:)
- 3.不死进程
- 其实就是传说中的双进程了.早些年的时候万象网管为了达到不被恶意结束的目的用的就是这招了.虽然咱不用担心程序被人恶意停止,但是也保不齐主程序因为任务太重抗不住自己先挂了(这种情况也不是不会发生).所以......
- 说了这么多,只是对写程序的一些思考,对一个函数用法的延伸.我想到了这么多,你呢?
不知道是否能够做到这个地步,但是先关注一下,只是现在加班频繁,都不知道有没有时间来折腾它。套用锅巴说的一句:忙的象狗的人往 往都是穷鬼
Tags: linux, php
Linux | 评论:1
| 阅读:17494
Submitted by gouki on 2012, April 12, 11:37 PM
时隔一年多,APC终于又更新了,这次更新最大的就是支持PHP5.4:
- Add PHP 5.4 support (Dmitry, Anatoliy, Pierre)
- Fixed bug #22679: Fix apc_bin_dump for constants. Use IS_CONSTANT_TYPE_MASK to handle all the constants, including the unqalified ones (instead of ~IS_CONSTANT_INDEX check)
- Fixed bug #23822, php crashes on apache restart
下载地址在这里:
http://pecl.php.net/package/APC
配置完后还得加入这些信息:
这样就差不多OK了
Tags: php, apc, eacceraltra, xcache
PHP | 评论:0
| 阅读:21878