手机浏览 RSS 2.0 订阅 膘叔的简单人生 , 腾讯云RDS购买 | 超便宜的Vultr , 注册 | 登陆
浏览模式: 标准 | 列表2015年06月的文章

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

curl上传注意事项【新】

 众所周知,用curl上传只要设置4个变量即可(非HTTPS网站),那就是curlopt_url,curlopt_post,curlopt_returntransfer,curlopt_postfields,当然这4个都是大写。

curlopt_post,curlopt_returntransfer 都是 true,curlopt_url则是你要提交的网址,那么剩下的,curlopt_postfields就是你要上传的内容了。

上传文件在这里也变得非常简单,只需对应的值前面加个“@”即可,如curl_setopt($ch,CURLOPT_POSTFIELDS,array('file'=>'@/var/www/images/abc.jpg')); 文件通过realpath判断后存在的即可。

但是,这一切在php5.6里就发生了改成。php5.6不再支持@这样的上传方式,只能使用curl_file_create的方式来,所以上面的代码要改成

PHP代码
  1. curl_setopt($ch,CURLOPT_POSTFIELDS,array('file'=>curl_file_create('/var/www/images/abc.jpg','image/jpg','abc')));   

 

看看文档里怎么说:

XML/HTML代码
  1. CURLFile should be used to upload a file with CURLOPT_POSTFIELDS.  

然后官网的手册中的最后一条评论,仿佛是看不下去,写了个处理上传的程序

PHP代码
  1. There are "@" issue on multipart POST requests.  
  2.   
  3. Solution for PHP 5.5 or later:  
  4. - Enable CURLOPT_SAFE_UPLOAD.  
  5. - Use CURLFile instead of "@".  
  6.   
  7. Solution for PHP 5.4 or earlier:  
  8. - Build up multipart content body by youself.  
  9. - Change "Content-Type" header by yourself.  
  10.   
  11. The following snippet will help you :D  
  12.   
  13. <?php  
  14.   
  15. /** 
  16. * For safe multipart POST request for PHP5.3 ~ PHP 5.4. 
  17.  
  18. * @param resource $ch cURL resource 
  19. * @param array $assoc "name => value" 
  20. * @param array $files "name => path" 
  21. * @return bool 
  22. */  
  23. function curl_custom_postfields($charray $assoc = array(), array $files = array()) {  
  24.       
  25.     // invalid characters for "name" and "filename"  
  26.     static $disallow = array("\0""\"""\r""\n");  
  27.       
  28.     // build normal parameters  
  29.     foreach ($assoc as $k => $v) {  
  30.         $k = str_replace($disallow"_"$k);  
  31.         $body[] = implode("\r\n"array(  
  32.             "Content-Disposition: form-data; name=\"{$k}\"",  
  33.             "",  
  34.             filter_var($v),   
  35.         ));  
  36.     }  
  37.       
  38.     // build file parameters  
  39.     foreach ($files as $k => $v) {  
  40.         switch (true) {  
  41.             case false === $v = realpath(filter_var($v)):  
  42.             case !is_file($v):  
  43.             case !is_readable($v):  
  44.                 continue// or return false, throw new InvalidArgumentException  
  45.         }  
  46.         $data = file_get_contents($v);  
  47.         $v = call_user_func("end"explode(DIRECTORY_SEPARATOR, $v));  
  48.         $k = str_replace($disallow"_"$k);  
  49.         $v = str_replace($disallow"_"$v);  
  50.         $body[] = implode("\r\n"array(  
  51.             "Content-Disposition: form-data; name=\"{$k}\"; filename=\"{$v}\"",  
  52.             "Content-Type: application/octet-stream",  
  53.             "",  
  54.             $data,   
  55.         ));  
  56.     }  
  57.       
  58.     // generate safe boundary   
  59.     do {  
  60.         $boundary = "---------------------" . md5(mt_rand() . microtime());  
  61.     } while (preg_grep("/{$boundary}/"$body));  
  62.       
  63.     // add boundary for each parameters  
  64.     array_walk($bodyfunction (&$partuse ($boundary) {  
  65.         $part = "--{$boundary}\r\n{$part}";  
  66.     });  
  67.       
  68.     // add final boundary  
  69.     $body[] = "--{$boundary}--";  
  70.     $body[] = "";  
  71.       
  72.     // set options  
  73.     return @curl_setopt_array($charray(  
  74.         CURLOPT_POST       => true,  
  75.         CURLOPT_POSTFIELDS => implode("\r\n"$body),  
  76.         CURLOPT_HTTPHEADER => array(  
  77.             "Expect: 100-continue",  
  78.             "Content-Type: multipart/form-data; boundary={$boundary}"// change Content-Type  
  79.         ),  
  80.     ));  
  81. }  

好吧,其实多文件上传用这样的方式就挺好。

几个常见的 Composer 国内镜像

现在写PHP好象不用Composer总感觉有点Low了吧?好吧,即使这样,你在使用composer update的时候是不是也发现网速、进度low的不行。一个composer update要等半天。不说这个吧,你就是一个composer init也要等半天,这只是个空项目,你都要等这么久?composer 如果不加-vvv参数,你就感觉整个世界都停在那里了。所以,如果连接原始的composer还是加个-vvv参数吧

国内常见镜像有三个:

XML/HTML代码
  1. http://pkg.phpcomposer.com/  
  2. https://toran.reimu.io/  
  3. http://packagist.cn/  

 

使用方法很简单一种是在~/.composer/config.json中加入相应的信息,一种是在当前项目的composer.json中加入:

JavaScript代码
  1. "repositories": [  
  2.     {"type""composer""url""http://pkg.phpcomposer.com/repo/packagist/"},  
  3.     {"packagist"false}  
  4. ]  

 

加入的时候注意语法,如果是json的最后一个元素,记得不要加","即可,否则 会报错

OK这样就可以了,尽情的尝试吧(packagist.cn更新的有点慢,toran.reimu.io 是https的,如果你本机openssl版本低可能会更新失败)。好象话这么一说,只能用pkg.phpcomposer.com的源了(嗯,忍忍吧,如果他不能用,你再换)

更新:composer 源 

 

 

Tags: composer

macbook pro将SSD换到主硬盘位还是比较省电的

鉴于机器有点慢,所以决定 将光驱换成SSD。并将系统移到了SSD上,然后让人纠结的事情就发生了。如果不动机器纯待机,一天一夜20%的电,去年国庆的时候,将mac带回来。5天没动。回上海后发现居然自动关机了~~~

那时候就在想为什么会这么耗电,想来想去可能是因为待机的时候SSD供电无法关闭(看资料是说mac在待机的时候,会将部分设备的电源关闭的,比如光驱,现在我的系统在光驱位上,那一定断不了电)

但一直没时间折腾它,前段时间终于想到了,还是折腾一下吧。于是将SSD硬盘换到主硬盘位,原来的硬盘放到了光区位。周五下班后,电脑就一直没开。周一早上开,还有91%的电。感觉省下了不少啊~~(rmbp的时候2天只有2%的电,我忍了~)

-----------

顺便问问如果有人有兴趣,我想出掉现在的这台电脑以及一台mac air

1、Macbook Air 11寸 港版,8G内存定制版,硬盘SSD 128G 。实际使用不满100小时, 5000 出(不含快递费)去年6月买的,应该是13款,14款是快年底才有的

2、Macbook Pro 13 ,2012款年中版,i5 CPU,原4G内存升到16G,原500G硬盘升级成(SSD+500)【SSD是Intel 250G的,买的时候京东价1300,现价1100,http://item.jd.com/1011784.html】,6000出 这个就是我现在在用的

【备份】MacOS WIN7 双系统,多分区 安装手记

鉴于我每次安装win7都是在用bootcamp的情况下,随之而来带来的问题就是,只有一个分区,这让我很苦恼。所以到最后我往往都是直接用虚拟机算了。

本文来自CU,本人目前没有测试过,先备着,万一哪天我又心血来潮了,我就用它来试一下(原文来自:http://bbs.chinaunix.net/thread-4166135-1-1.html)

本帖最后由 xinyv 于 2015-01-12 12:15 编辑

 

 

2015年元旦macbook air 安装记录

目的:

    1、air 安装双系统 Yosemite + win7

    2、win7 多分区

    3、单U盘安装

准备:

    16G U盘一个usb3.0

制作安装U盘:

1、下载最新的 MacOS Yosemite 10.10.1, win7sp1

    下载yosemite必须用 mac app store 下载,我下载的版本

    yosemite 10.10.1 md5:e37ac9e9c79de428529c6933419ee5ff

    win7sp1_x64.iso  md5:480b62c3acd6c8a36b18d9e906cd90d2

2、制作 win7 安装盘

    打开 Launchpad -> 其他 -> Boot Camp 助理,点击继续,选择创建 Windows 7 或更高版本的安装盘 和 从 Apple下载最新的Windows 支持软件,点击继续,选取你的 win7 的iso镜像,然后点继续,速度快慢就看你的网速是否给力了。

    制作完之后,找另一个 windows 系统,插上 U盘,在硬盘上新建一个文件夹,把U盘里面所有的文件都拷贝进去,这时候,你可以用U盘引导一下air 试试,(插入U盘,启动的时候按 option,选择WININSTALL)你会发现键盘鼠标都不能用,查资料是因为新款air使用了usb3.0  win7默认没有驱动

    安装驱动,参考链接 http://bbs.feng.com/read-htm-tid-8541291.html

安装驱动其实就是编辑 boot.win 和 install.win 这两个文件

创建二个文件夹m1、m2 用来 mount上面的两个文件 (cmd  命令)

XML/HTML代码
  1. mkdir m1 m2  

然后从刚才的备份中挂载 boot.win 和 install.win 我备份的目录是 D:\uu

XML/HTML代码
  1. dism /mount-wim /wimfile:d:\uu\source\boot.wim /index:2 /mountdir:m1  
  2. dism /mount-wim /wimfile:d:\uu\sources\install.wim /index:4 /mountdir:m2  

添加usb3.0驱动

XML/HTML代码
  1. dism /image:m1 /add-driver /driver:d:\uu\$WinPEDriver$\IntelxHCISetup\Drivers\xHCI\Win7\x64\iusb3hub.inf  
  2.   
  3. dism /image:m2 /add-driver /driver:d:\uu\$WinPEDriver$\IntelxHCISetup\Drivers\xHCI\Win7\x64\iusb3hub.inf  
  4.   
  5. dism /image:m1 /add-driver /driver:d:\uu\$WinPEDriver$\IntelxHCISetup\Drivers\xHCI\Win7\x64\iusb3xhc.inf  
  6.   
  7. dism /image:m2 /add-driver /driver:d:\uu\$WinPEDriver$\IntelxHCISetup\Drivers\xHCI\Win7\x64\iusb3xhc.inf  
  8.   
  9. dism /image:m1 /add-driver /driver:d:\uu\$WinPEDriver$\IntelxHCISetup\Drivers\HCSwitch\Win7\x64\iusb3hcs.inf  
  10.   
  11. dism /image:m2 /add-driver /driver:d:\uu\$WinPEDriver$\IntelxHCISetup\Drivers\HCSwitch\Win7\x64\iusb3hcs.inf  

提交修改,umount 文件

XML/HTML代码
  1. dism /unmount-wim /mountdir:m1 /commit  
  2. dism /unmount-wim /mountdir:m2 /commit  
  3. rmdir m1 m2  

把 U 盘卸载,重新插到 air 上面

3、制作 air 安装U盘

    打开 Launchpad -> 其他 -> 磁盘工具,把U盘的信息全部抹掉,包括默认分区也要删除,然后重新创建U盘分区,创建的时候选择主引导记录,分两个区,第一个是 win_setup文件系统类型选 exfat,第二个选 MacOS 日志文件系统,第一个一定要是 windows 分区

参考链接:http://bbs.feng.com/read-htm-tid-2628649.html

 

    以前直接用下载的 dmg 制作就可以,新版系统的制作方式已经变化了

    打开Finder-应用程序,找到安装OS X Yosemite,右键-显示包内容,依次点开Contents-SharedSupport文件夹,你会发现一个InstallESD的DMG文件,双击打开这个文件,你会看到一个文件夹 Packages 

    下面打开终端输入

XML/HTML代码
  1. defaults write com.apple.finder AppleShowAllFile -bool true  
  2. killall Finder  

如果这条命令提示错误,你可以把后面的 -bool true 改成 YES,实在不行就 man 一下

    执行成功以后在看看刚才那个文件夹,多出了几个隐藏文件 BaseSystem.dmg

    打开 Launchpad -> 其他 -> 磁盘工具,选择 u 盘,选恢复

    把左侧的 u 盘拖到目标盘那里,把刚才我们看到的隐藏文件 BaseSystem.dmg 拖到源磁盘那里,然后点恢复。恢复完成以后,把 BaseSystem.dmg 和 BaseSystem.chunklist 拷贝到 u 盘苹果系统分区的根目录里面,然后进入 System\Installation 删除 Packages 这个链接,把 InstallESD 下面的 Packages 文件夹拷贝到这里来。拷贝 BaseSystem 哪两个文件不能省略,省略之后引导系统的时候会提示  undefined error 0 

    把系统文件在恢复隐藏

XML/HTML代码
  1. defaults write com.apple.finder AppleShowAllFile -bool false  
  2. killall Finder  

到此 Yosemite 的安装盘制作完成,我发现在 air 上按照上面的方法制作都可以成功,但在 pro 上制作安装盘失败。原因还没有找到

    参考链接:http://mac-how-to.wonderhowto.co ... 0-yosemite-0155306/

 

4、多系统安装盘制作

    把刚才制做好的 U盘插到刚才我们备份的 win系统上,利用 Windows7-USB-DVD-Download-Tool 工具和 win7 iso 创建一个win 安装 U盘,使用第一个我们预留的分区,制作完成以后,拷贝刚才我们备份的 uu 下的所有文件,直接覆盖进 u盘的 win 分区。拷贝完数据,安装盘就制作完成了。下面就是安装系统了。

 

5、安装系统

    因最前面有一个 200M 的 efi 分区,最后又有一个 Recovery 分区,在加上苹果系统自己占用的一个分区,win7 就只剩下一个分区了,网上说的总总办法,比如删除 Recovery,扩展那个 efi 分区,在10.10.1 上测试均有问题,不是 mac 系统找不到就是 win7 起不来,经多多次测试,发现一个折中的方案

    在重装系统的时候,直接提前分区,我分了 三个区,

        第一区 WinOS

        第二区 data

        第三区 MacOS

    这么分区的原因是 win7 会在最前面放一个 200 M的 efi,MacOS 会在最后面放一个 Recovery,这样前后都有系统分区把数据分区和功能分区隔离开,不容易损坏,分区之后用U盘引导,先安装 Yosemite,安装在最后一个分区,安装完以后在重新引导安装 win7,这时候你会发现 Recovery 被挤出了主分区表,Win7 看到的是未分配空间,不用搭理他,反正不是给你win7 用的,不认识就不认识吧,然后安装win7,安装 boot camp。安装好以后你会发现虽然 win7不认识,然这并不影响mac系统,启动的时候按 option ,你就会发现Recovery 仍旧是可以使用的,而且因为他被挤出去的原因,我们现在又多了一个分区名额,你可以增加一个扩展分区,然后在分若干个盘了。

 

至此,air就安装完了,我们保留了所有默认分区,而且 win7 支持多分区,单U盘安装双系统,多分区目的完成