手机浏览 RSS 2.0 订阅 膘叔的简单人生 , 腾讯云RDS购买 | 超便宜Qcloud , 注册 | 登陆
浏览模式: 标准 | 列表Tag:php

macosx 下安装 zephir

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

debian上升级php5至php5.4的版本

 官方的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代码
  1. deb http://packages.dotdeb.org squeeze-php54 all  
  2. deb-src http://packages.dotdeb.org squeeze-php54 all  
2、GPG的KEY更新并加入到系统里
XML/HTML代码
  1. wget http://www.dotdeb.org/dotdeb.gpg  
  2. cat dotdeb.gpg | sudo apt-key add -  
如果你本来就是root,那上面的sudo就不需要了
3、apt-get update 
4、apt-get upgrade
就这样,你成功了。。。
 
 

Tags: debian, php

mac下面安装php5.4

 苹果下面安装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代码
  1. The php.ini file can be found in:  
  2.     /usr/local/etc/php/5.4/php.ini  
  3.   
  4. ✩✩✩✩ PEAR ✩✩✩✩  
  5.   
  6. If PEAR complains about permissions, 'fix' the default PEAR permissions and config:  
  7.     chmod -R ug+w /usr/local/Cellar/php54/5.4.13/lib/php  
  8.     pear config-set php_ini /usr/local/etc/php/5.4/php.ini  
  9.   
  10. ✩✩✩✩ Extensions ✩✩✩✩  
  11.   
  12. If you are having issues with custom extension compiling, ensure that this php is  
  13. in your PATH:  
  14.     PATH="$(brew --prefix josegonzalez/php/php54)/bin:$PATH"  
  15.   
  16. PHP54 Extensions will always be compiled against this PHP. Please install them  
  17. using --without-homebrew-php to enable compiling against system PHP.  
  18.   
  19. ✩✩✩✩✩ INTL Support ✩✩✩✩✩  
  20.   
  21. icu4c is broken as of mxcl/homebrew#03ed757c, so you will need to install intl as  
  22. a separate extension:  
  23.   
  24.     brew install php54-intl  
  25.   
  26. ✩✩✩✩ FPM ✩✩✩✩  
  27.   
  28. To launch php-fpm on startup:  
  29.     * If this is your first install:  
  30.         mkdir -p ~/Library/LaunchAgents  
  31.         cp /usr/local/Cellar/php54/5.4.13/homebrew-php.josegonzalez.php54.plist ~/Library/LaunchAgents/  
  32.         launchctl load -w ~/Library/LaunchAgents/homebrew-php.josegonzalez.php54.plist  
  33.   
  34.     * If this is an upgrade and you already have the homebrew-php.josegonzalez.php54.plist loaded:  
  35.         launchctl unload -w ~/Library/LaunchAgents/homebrew-php.josegonzalez.php54.plist  
  36.         cp /usr/local/Cellar/php54/5.4.13/homebrew-php.josegonzalez.php54.plist ~/Library/LaunchAgents/  
  37.         launchctl load -w ~/Library/LaunchAgents/homebrew-php.josegonzalez.php54.plist  
  38.   
  39. The control script is located at /usr/local/Cellar/php54/5.4.13/sbin/php54-fpm  
  40.   
  41. 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:  
  42.   
  43.   PATH="/sbin:$PATH"  
  44.   
  45. You may also need to edit the plist to use the correct "UserName".  
  46.   
  47. Please note that the plist was called 'org.php-fpm.plist' in old versions  
  48. of this formula.  
  49.   
  50. To have launchd start php54 at login:  
  51.     ln -sfv /usr/local/opt/php54/*.plist ~/Library/LaunchAgents  
  52. Then to load php54 now:  
  53.     launchctl load ~/Library/LaunchAgents/homebrew.mxcl.php54.plist  
  54. Warning: /usr/local/sbin is not in your PATH  
  55. You can amend this by altering your ~/.bashrc file  
记下这些路径和使用方法,以后会用得到

Tags: mac, php

linux下的多线程运行PHP

关注一下这玩意是因为在命令行下写程序的时候,发现不能够自我守护。都只能用shell来再开一个进程监控。本来想做三角监控的,但想想,只是为了一个小程序,我得写三个程序来自我守护,真没劲啊。
所以,找到pcntl_fock函数的时候很激动,其实在很久以前看过,但是没关注过,毕竟很多时间跑命令行程序的时候,一下子就跑完了,真正跑了不退出的程序,真的很少用。

http://rainbird.blog.51cto.com/211214/277861/
  1. <?php  
  2. $pid = pcntl_fork();  
  3. if($pid == -1){  
  4.          //创建失败咱就退出呗,没啥好说的  
  5.          die('could not fork');  
  6. }  
  7. else{  
  8.         if($pid){  
  9.                 //从这里开始写的代码是父进程的,因为写的是系统程序,记得退出的时候给个返回值  
  10.                 exit(0);  
  11.         }  
  12.         else{  
  13.                 //从这里开始写的代码都是在新的进程里执行的,同样正常退出的话,最好也给一个返回值  
  14.                 exit(0);  
  15.         }  
  16. }  
  17. ?>  

所以,以下内容就来自于上述代码中有涉及到的博客:

XML/HTML代码
  1. 这样一改好理解多了,如果你父进程希望知道子进程正常退出的话,可以加上前面的pcntl_wait.  
  2.       函数的用法是整明白了,在实际的工作中有什么用处呢?  
  3.       1.后台程序  
  4.       命令行程序好写,服务程序也好写,笔者觉得这服务程序最难写.想想原来想在windows下写个服务啥的,又是要注册服务又是要这样那样的老费劲了.现在专职管理linux想让个命令行程序在后台运行,直接在命令后面加个&就搞定了.但是这样总觉得土.有了pcntl_fork突然发现世界是那么的美好.当主进程成功创建子进程并获得子进程的id以后,自己在临死前还不忘说一句:"我已成功运行,我的id是:xxxx(子进程的id)",完了还给系统返回个0(正常退出),哈哈,死都死的那么有尊严.  
  5.       前面说的是程序常驻内存的情况,当然了这时候要注意内存的释放以及向日志文件打印信息,而不是往屏幕上(一打印信息程序就退出的哟).还有一种情况是:程序被其它脚本调用,其它脚本只关心程序是不是正常运行,如果程序要运行很长时间才能运行完的话,最好不让脚本等待.这样的话pcntl_fork又派上用场了:)  
  6.       2.延时处理.  
  7.       有的时候,我们程序退出的时候要清理自身产生的东西,比如说要删除自己(当然了linux下面是可以删除正在运行的文件的,只是举个例子),这个时候就可以另起动一个进程,然后自己结束了,把事情交给另一个进程来做.当我们写服务程序的时候,我们肯定是写日志文件记录程序的运行情况(要不谁知道程序是不是在那睡大觉的:0).程序正常退出的时候我们可以写一条日志说程序退出了,但是当程序收到linux下伟大的kill -9的时候,怎么记录自己的退出行为呢?额.....这个和php的进程信号有关好像和这个没多大关系.  
  8.       另一种情况:一个完善的程序一般都支持start,stop,restart这样的参数.start好说,stop也好说,既然start和stop都好说了,这个restart就先stop然后再start就可以了啊.额...好像又和pcntl_fork没多大关系,当你收到重启的信号总不能还是kill然后再start吧,是不是太黄太暴力了?还是温柔一点,让当前进程退出,让另外的进程再把它拉起来吧.在windows下想实现这一点似乎很困难呢,比如程序更新的时候,一般都是单写更新程序,或者程序退出的时候另起动一个批处理启动自己:)  
  9.       3.不死进程  
  10.       其实就是传说中的双进程了.早些年的时候万象网管为了达到不被恶意结束的目的用的就是这招了.虽然咱不用担心程序被人恶意停止,但是也保不齐主程序因为任务太重抗不住自己先挂了(这种情况也不是不会发生).所以......  
  11.       说了这么多,只是对写程序的一些思考,对一个函数用法的延伸.我想到了这么多,你呢?  

不知道是否能够做到这个地步,但是先关注一下,只是现在加班频繁,都不知道有没有时间来折腾它。套用锅巴说的一句:忙的象狗的人往 往都是穷鬼

Tags: linux, php

APC支持php5.4了

时隔一年多,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

配置完后还得加入这些信息:

XML/HTML代码
  1. ; alternative php cache 用于缓存和优化php中间代码  
  2.   
  3. apc.cache_by_default = on  
  4. ;sys  
  5. ; 是否默认对所有文件启用缓冲。  
  6. ; 若设为off并与以加号开头的apc.filters指令一起用,则文件仅在匹配过滤器时才被缓存。  
  7.   
  8. apc.enable_cli = off  
  9. ;sys  
  10. ; 是否为cli版本启用apc功能,仅用于测试和调试目的才打开此指令。  
  11.   
  12. apc.enabled = on  
  13. ; 是否启用apc,如果apc被静态编译进php又想禁用它,这是唯一的办法。  
  14.   
  15. apc.file_update_protection = 2  
  16. ;sys  
  17. ; 当你在一个运行中的服务器上修改文件时,你应当执行原子操作。  
  18. ; 也就是先写进一个临时文件,然后将该文件重命名(mv)到最终的名字。  
  19. ; 文本编辑器以及 cp, tar 等程序却并不是这样操作的,从而导致有可能缓冲了残缺的文件。  
  20. ; 默认值 2 表示在访问文件时如果发现修改时间距离访问时间小于 2 秒则不做缓冲。  
  21. ; 那个不幸的访问者可能得到残缺的内容,但是这种坏影响却不会通过缓存扩大化。  
  22. ; 如果你能确保所有的更新操作都是原子操作,那么可以用 0 关闭此特性。  
  23. ; 如果你的系统由于大量的io操作导致更新缓慢,你就需要增大此值。  
  24.   
  25. apc.filters =  
  26. ;sys  
  27. ; 一个以逗号分隔的posix扩展正则表达式列表。  
  28. ; 如果源文件名与任意一个模式匹配,则该文件不被缓存。  
  29. ; 注意,用来匹配的文件名是传递给include/require的文件名,而不是绝对路径。  
  30. ; 如果正则表达式的第一个字符是"+"则意味着任何匹配表达式的文件会被缓存,  
  31. ; 如果第一个字符是"-"则任何匹配项都不会被缓存。"-"是默认值,可以省略掉。  
  32.   
  33. apc.ttl = 0  
  34. ;sys  
  35. ; 缓存条目在缓冲区中允许逗留的秒数。0 表示永不超时。建议值为7200~36000。  
  36. ; 设为 0 意味着缓冲区有可能被旧的缓存条目填满,从而导致无法缓存新条目。  
  37.   
  38. apc.user_ttl = 0  
  39. ;sys  
  40. ; 类似于apc.ttl,只是针对每个用户而言,建议值为7200~36000。  
  41. ; 设为 0 意味着缓冲区有可能被旧的缓存条目填满,从而导致无法缓存新条目。  
  42.   
  43. apc.gc_ttl = 3600  
  44. ;sys  
  45. ; 缓存条目在垃圾回收表中能够存在的秒数。  
  46. ; 此值提供了一个安全措施,即使一个服务器进程在执行缓存的源文件时崩溃,  
  47. ; 而且该源文件已经被修改,为旧版本分配的内存也不会被回收,直到达到此ttl值为止。  
  48. ; 设为零将禁用此特性。  
  49.   
  50. apc.include_once_override = off  
  51. ;sys  
  52. ; 关于该指令目前尚无说明文档,参见:http://pecl.php.net/bugs/bug.php?id=8754  
  53. ; 请保持为off,否则可能导致意想不到的结果。  
  54.   
  55. apc.max_file_size = 1m  
  56. ;sys  
  57. ; 禁止大于此尺寸的文件被缓存。  
  58.   
  59. apc.mmap_file_mask =  
  60. ;sys  
  61. ; 如果使用–enable-mmap(默认启用)为apc编译了mmap支持,  
  62. ; 这里的值就是传递给mmap模块的mktemp风格的文件掩码(建议值为"/tmp/apc.xxxxxx")。  
  63. ; 该掩码用于决定内存映射区域是否要被file-backed或者shared memory backed。  
  64. ; 对于直接的file-backed内存映射,要设置成"/tmp/apc.xxxxxx"的样子(恰好6个x)。  
  65. ; 要使用posix风格的shm_open/mmap就需要设置成"/apc.shm.xxxxxx"的样子。  
  66. ; 你还可以设为"/dev/zero"来为匿名映射的内存使用内核的"/dev/zero"接口。  
  67. ; 不定义此指令则表示强制使用匿名映射。  
  68.   
  69. apc.num_files_hint = 1000  
  70. ;sys  
  71. ; web服务器上可能被包含或被请求的不同源文件的大致数量(建议值为1024~4096)。  
  72. ; 如果你不能确定,则设为 0 ;此设定主要用于拥有数千个源文件的站点。  
  73.   
  74. apc.optimization = 0  
  75. ; 优化级别(建议值为 0 ) 。  
  76. ; 正整数值表示启用优化器,值越高则使用越激进的优化。  
  77. ; 更高的值可能有非常有限的速度提升,但目前尚在试验中。  
  78.   
  79. apc.report_autofilter = off  
  80. ;sys  
  81. ; 是否记录所有由于early/late binding原因而自动未被缓存的脚本。  
  82.   
  83. apc.shm_segments = 1  
  84. ;sys  
  85. ; 为编译器缓冲区分配的共享内存块数量(建议值为1)。  
  86. ; 如果apc耗尽了共享内存,并且已将apc.shm_size指令设为系统允许的最大值,  
  87. ; 你可以尝试增大此值。  
  88.   
  89. apc.shm_size = 30  
  90. ;sys  
  91. ; 每个共享内存块的大小(以mb为单位,建议值为128~256)。  
  92. ; 有些系统(包括大多数bsd变种)默认的共享内存块大小非常少。  
  93.   
  94. apc.slam_defense = 0  
  95. ;sys(反对使用该指令,建议该用apc.write_lock指令)  
  96. ; 在非常繁忙的服务器上,无论是启动服务还是修改文件,  
  97. ; 都可能由于多个进程企图同时缓存一个文件而导致竞争条件。  
  98. ; 这个指令用于设置进程在处理未被缓存的文件时跳过缓存步骤的百分率。  
  99. ; 比如设为75表示在遇到未被缓存的文件时有75%的概率不进行缓存,从而减少碰撞几率。  
  100. ; 鼓励设为 0 来禁用这个特性。  
  101.   
  102. apc.stat = on  
  103. ;sys  
  104. ; 是否启用脚本更新检查。  
  105. ; 改变这个指令值要非常小心。  
  106. ; 默认值 on 表示apc在每次请求脚本时都检查脚本是否被更新,  
  107. ; 如果被更新则自动重新编译和缓存编译后的内容。但这样做对性能有不利影响。  
  108. ; 如果设为 off 则表示不进行检查,从而使性能得到大幅提高。  
  109. ; 但是为了使更新的内容生效,你必须重启web服务器。  
  110. ; 这个指令对于include/require的文件同样有效。但是需要注意的是,  
  111. ; 如果你使用的是相对路径,apc就必须在每一次include/require时都进行检查以定位文件。  
  112. ; 而使用绝对路径则可以跳过检查,所以鼓励你使用绝对路径进行include/require操作。  
  113.   
  114. apc.user_entries_hint = 100  
  115. ;sys  
  116. ; 类似于num_files_hint指令,只是针对每个不同用户而言。  
  117. ; 如果你不能确定,则设为 0 。  
  118.   
  119. apc.write_lock = on  
  120. ;sys  
  121. ; 是否启用写入锁。  
  122. ; 在非常繁忙的服务器上,无论是启动服务还是修改文件,  
  123. ; 都可能由于多个进程企图同时缓存一个文件而导致竞争条件。  
  124. ; 启用该指令可以避免竞争条件的出现。  
  125.   
  126. apc.rfc1867 = off  
  127. ;sys  
  128. ; 打开该指令后,对于每个恰好在file字段之前含有apc_upload_progress字段的上传文件,  
  129. ; apc都将自动创建一个upload_的用户缓存条目(就是apc_upload_progress字段值)。  

这样就差不多OK了

Tags: php, apc, eacceraltra, xcache

Records:10312345678910»