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

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盘安装双系统,多分区目的完成

 

macosx 下安装resin

 最近在大卫的指点下开始摸Java了。但我其实更擅长的是PHP,所以现在就开始混用了,那混用的最佳搭配是resin(其实apache+resin插件也OK)。不过纯resin的话也就意味着可以直接混用java的数据了。而不是采用接口调用的方式。

在mac下安装resin是有点麻烦的,官方的教程就几句话,参考 :http://www.caucho.com/resin-4.0/admin/starting-resin-install.xtp,

XML/HTML代码
  1. Next we'll change into the Resin directory we just unpacked to configure and build the server. The Java portions of Resin are already compiled, but this step will build additional C-based components of Resin that provide additional functionality such as:  
  2.   
  3. A faster IO library, including massive keepalive support *  
  4. Support for OpenSSL *  
  5. The ability to run as a non-priviledged user for security  
  6. Connector modules for Apache  
  7. (* only available in Resin Professional)  

然后官方的文档就提示你,configure一下就OK了。不过解开压缩包发现,configure没有可执行权限,只能先chmod +x ./configure。

我第一次是按照官方的例子来的,即:

XML/HTML代码
  1. ./configure --prefix=/usr/local/share/resin \  
  2.             --with-resin-root=/var/resin \  
  3.             --with-resin-log=/var/log/resin \  
  4.             --with-resin-conf=/etc/resin  

但后面在运行的时候,一会提示log文件写不了,一会提示app目录不能创建,虽然chown改了权限 后就OK了,但总是有点小问题。去网上找了一下,发现了:http://www.cnblogs.com/jmtbai/p/4394424.html,它在内容里就有说:

XML/HTML代码
  1. ./configure -prefix=/Users/emma/Documents/workspace/resin-pro-4.0.43 -enable-64bit-jni  
  2.   
  3. /Users/emma/Documents/workspace/resin-pro-4.0.43为最终resin被安装的目录,这个目录需要指定,不然默认就是/var/share/resin下,这个读resin.xml文件时会有问题  

果然我把prefix改成我的路径就OK了。(上面的-prefix是不对的,是--prefix)。

顺利的将项目运行了起来,同时写了个test.php,居然也OK了。(现在是知其然不知其所以然,先用起来再说了)

 

 

 

 

 

Tags: resin