分类目录归档:图片/文字

用firefox Poster来调试RESTful开发

最近在弄RESTful,调试起来比较麻烦,因为普通浏览器不好发送指定的http请求。所以需要使用其它工具

之前用curl,感觉比较麻烦,字符界面,要记命令!

今天在firefox里找到一个好用的插件,可以很方便的发送HTTP各种请求:post get put delete等。

下载页面

https://addons.mozilla.org/zh-CN/firefox/addon/2691

memcache ajax聊天核心

 

 

PHP代码
  1. function chat_xzy()   
  2.     {   
  3.        if(!$totalnum=cache("chatMsgTotalNum")) $totalnum=cache("chatMsgTotalNum",1,3600*24*50);   
  4.           
  5.         if(isset($_GET[‘ajax’]) && $_GET[‘ajax’]==‘userlist’){   
  6.             $json[‘data’]=getUserOL();   
  7.             $json[‘olusernum’]=olNum();   
  8.             echo json_encode($json);return true;   
  9.         }elseif($_GET[‘ajax’]==‘sendmsg’){   
  10.             $add[‘background’]=strip_tags($_POST[‘background’]);   
  11.             $add[‘color’]=strip_tags($_POST[‘color’]);   
  12.             $add[‘uid’]=$_SESSION[‘user’][‘uid’];   
  13.             $add[‘nickname’]=$_SESSION[‘user’][‘name’];   
  14.             $add[‘touid’]=$_POST[‘touid’];   
  15.             if(!emptyempty($add[‘touid’])){   
  16.                 $a_=db("admin");   
  17.                 $touser=$a_->id($add[‘touid’])->find();   
  18.                 $add[‘tonickname’]=$touser[‘name’];   
  19.             }else{   
  20.                 $add[‘tonickname’]=;   
  21.             }   
  22.             $add[‘msg’]=strip_tags($_POST[‘msg’]);   
  23.             $add[‘time’]=date(‘m-d H:i:s’);   
  24.             $add[‘touid’]=$_POST[‘touid’];   
  25.               
  26.             $totalnum++;   
  27.             cache("chatMsgTotalNum",$totalnum,3600*24*365);   
  28.             cache(‘chatMsgList’.$totalnum,$add,3600*24);   
  29.             $json[‘status’]=0;   
  30.             echo json_encode($json);return true;   
  31.         }elseif($_GET[‘ajax’]==‘showmsg’){   
  32.             if(!$mylastid=cache("chatMsgTotalMy".$_SESSION[‘user’][‘uid’])) $mylastid=cache("chatMsgTotalMy".$_SESSION[‘user’][‘uid’],1,3600*24);   
  33.             $n=$totalnum$mylastid;   
  34.             $list=array();   
  35.             if($n>0){   
  36.                 for($i=1;$i<=$n;$i++){   
  37.                     $x=$mylastid+$i;   
  38.                     $cTmp= cache(‘chatMsgList’.$x);   
  39.                     if(emptyempty($cTmp[‘touid’]) || $cTmp[‘touid’]==$_SESSION[‘user’][‘uid’]) $list[]=$cTmp;   
  40.                 }   
  41.             }   
  42.             cache("chatMsgTotalMy".$_SESSION[‘user’][‘uid’],$totalnum,3600*24);   
  43.             if(!emptyempty($list)){   
  44.                 $json[‘data’]=$list;   
  45.                 $json[‘status’]=0;   
  46.             }else{   
  47.                 $json[‘status’]=1;   
  48.             }   
  49.             echo json_encode($json);return true;   
  50.         }   
  51.         $this->view();   
  52.         $mylastid=cache("chatMsgTotalMy".$_SESSION[‘user’][‘uid’],1,3600*24);   
  53.     }  

 

效果:

 

森.png

发一个自动新建、修改虚拟主机的shell脚本

 今天重新弄了下自助建站的虚拟主机管理程序,服务器ubuntu 10.04 server 64位,安装apache+php+mysql

写了个脚本,给php调用,在新建用户账号、修改或绑定域名时起执行的,运用了apache 的reload,添加虚拟主机免重启方案!

然后就是用visudo给apache的用户www-data授权,允许用root身份执行这个脚本及/etc/init.d/apache2 二条命令。

这样web就可以执行新建及修改虚拟主机的操作了,但是目前还是不太安全的,www-data有关闭和启动apache的权限,下次找个时间,重新写个apache2的reload专用脚本。不使用/etc/init.d/apache2脚本。!

Ruby代码
  1. #!/bin/sh   
  2. FILENAME=/etc/apache2/sites-enabled/$1  
  3. if [ $1 = "diyweb" ] ; then  
  4.         echo ‘error ,diyweb is system user!’;   
  5. elif [ $1 = ‘000-default’ ] ; then  
  6.         echo ‘error ,000-default is sysytem user’;   
  7. else  
  8. if [ -f $FILENAME ]; then  
  9.         echo ‘Del old file’;   
  10.         rm -rf $FILENAME  
  11.         echo ‘Update user’  
  12. else  
  13.         echo ‘Add user’  
  14. fi   
  15.         echo "<VirtualHost *:80>\nServerName $1.ye55.net \nServerAlias $1.armos.cn $2 \nDocumentRoot \"/home/web/diyweb/company/$1\"\n</VirtualHost>" >> $FILENAME  
  16.         sed ‘s/@/ /g’ $FILENAME -i   
  17.         echo ‘Success’  
  18.         /etc/init.d/apache2 reload   
  19. fi  

巧用apache的rewrite伪静态实现自动生成html静态化

以前用过或是写过的生成html静态化有一个最麻烦的操作,

每次新加一篇文章、新建一个分类或是在header或footer改动了文字,都要全盘重新生成,如果有几万甚至于几十万上百万篇文章,那还不是等它生成html等得郁闷。

所以有了一个新的想法,就是让用户第一次打开这篇文章或是列表、首页时,自动生成这篇文章或列表、首页的html文件。这样,当文章没有更新的情况下,每二个用户打开就是html了,这样就实现了自动化的生成静态。主要使用的是php中我们常写的文件缓存方式进行工作。

但是毕竟是生成静态化,跟url有关系,所以就想到了apache的rewrite伪静态
例如:文章的php完整访问地址:/?m=article&a=view&1=6  rewrite成静态化的真实地址 /article_view_6.html
这样,所有的链接都使用的是/article_view_6.html 第一次执行,用的是rewrite,然后生成了article_view_6.html这个文件,第二次访问。apache就直接使用article_view_6.html这个静态页面了

下面自己写的一个.htaccess文件,主要的作用就是rewrite静态化,如果html文件存在,则直接用,不使用伪静态(不执行php),后台如果对文章、首页或是列表页做了更改,只需把相应的html文件删除就行了,无需重新生成。

 

PHP代码
  1. <IfModule mod_rewrite.c>   
  2. RewriteEngine on   
  3. #rewrite规则   
  4. RewriteCond %{REQUEST_FILENAME} !-d   
  5. RewriteCond %{REQUEST_FILENAME} !-f   
  6. RewriteRule ^article_view_([0-9]+).html$ ?m=article&a=view&1=$1 [L]   
  7.   
  8. #去掉index.php  框架中需要使用   
  9. RewriteCond %{REQUEST_FILENAME} !-d   
  10. RewriteCond %{REQUEST_FILENAME} !-f   
  11. RewriteRule ^(.*)$ index.php/$1 [QSA,PT,L]   
  12.   
  13. </IfModule>   
  14.   

 

生成静态化类

PHP代码
  1. <?php   
  2. class html   
  3. {   
  4.     public function __construct()   
  5.     {   
  6.         ob_start();   
  7.     }   
  8.   
  9.     public function autoMkdir($file){   
  10.         $f=explode("/",$file);   
  11.         $dir=array();   
  12.         $alldir=;   
  13.         if(count($f)>0){   
  14.             foreach($f as $v){   
  15.                 if(!emptyempty($v) && strpos($v,‘.’)===false) $dir[]=$v;   
  16.             }   
  17.             for($i=0;$i<count($dir);$i++){   
  18.                 $alldir.=emptyempty($alldir)?$dir[$i]:‘/’.$dir[$i];   
  19.                 if(!is_dir($alldir)){   
  20.                     if(!@mkdir($alldir)){   
  21.                         throw new Exception(‘新建文件夹目录出错,请检查文件夹读写权限. ‘.$alldir);   
  22.                     }   
  23.                 }   
  24.             }   
  25.         }   
  26.     }   
  27.   
  28.     public function writehtml()   
  29.     {   
  30.         $file=$_SERVER[‘REQUEST_URI’];   
  31.         if(substr($file,-5)!=‘.html’return ;   
  32.         $file=substr($file,1);   
  33.         if(!file_exists($file)){   
  34.             $this->autoMkdir($file);   
  35.             $content = ob_get_contents();   
  36.             if(!@file_put_contents($file,$content)){   
  37.                 throw new Exception(‘写入html静态文件出错,请检查文件夹读写权限. ‘.$file);   
  38.             }   
  39.         }   
  40.     }   
  41. }   
  42. ?>  

 

使用方法:

 

PHP代码
  1. <?php   
  2. require_once("html.class.php");   
  3. $html=new html();   
  4. /*  
  5. 这里是执行php文件。  
  6. */  
  7.   
  8. //成生html文件,应该本句应放最后一行。   
  9. $html->writehtml();   
  10. ?>  

 

qq截图未命名.png

关注一下 Facebook 的 HipHop (能把php转成c++,太酷了)

目前HipHop还是试验性质的,据说FaceBook用它用了一年多了,很稳定,但是毕竟它本身就是做出来给facebook用的。还是非常的希望它能继续发展,能解决php作为脚本语言上的众多劣势!

HipHop的介绍

HipHop for PHP transforms PHP source code into highly optimized C++. It was developed by Facebook and was released as open source in early 2010.
HipHop transforms your PHP source code into highly optimized C++ and then compiles it with g++ to build binary files. You keep coding in simpler PHP, then HipHop executes your source code in a semantically equivalent manner and sacrifices some rarely used features – such as eval() – in exchange for improved performance.
Facebook sees about a 50% reduction in CPU usage when serving equal amounts of Web traffic when compared to Apache and PHP. Facebook’s API tier can serve twice the traffic using 30% less CPU.
Why HipHop
One of the explicit design goals leading into HipHop was the ability to continue writing complex logic directly within PHP. Companies with large PHP codebases will generally rewrite their complex functionality directly as PHP extensions in either C or C++. Doing so ends up reducing the number of people who are able to work on the company’s entire codebase. By keeping this logic in PHP, Facebook is able to move fast and maintain a high number of engineers who are able to work across the entire codebase.
HipHop is not the right solution for everyone deploying PHP. We think it will be useful to companies running very large PHP infrastructures who do not wish to rewrite complex logic within C or C++.

Using HipHopcheckout and build instructionsgit clone git://github.com/facebook/hiphop-php.gitHipHop currently supports PHP version 5.2 and will be updated to support 5.3. The software is open source and we hope that it’s useful to many companies around the World.You can learn more on Building and installing or Building and installing on Ubuntu 9.10. See Running HipHop to learn more about compiling your source code.
Discussion and supportYou can discuss HipHop for PHP and report bugs on the HipHop developer mailing list (or feel free to submit a Pull Request).The wiki content is licensed under Creative Commons Attribution-ShareAlike License
上面是Facebook上的资料,可能国内上不了 facebook,想要资料先翻墙吧~~

http://wiki.github.com/facebook/hiphop-php/

xpad程序正在开发中,敬请期待!

http://xpad.sinaapp.com/

目前已完成文档上传、文档本地保存、登陆这几个主要功能

接着要完成的功能:打开网上文档,编辑或删除操作,添加注册功能,打开本地文档,自动记录最新的10个本地文档位置,快速打开。

放的API
API编码:UTF-8
数据格式:JSON

登陆
http://xpad.sinaapp.com/index.php?m=api&a=login
数据提交模式:post (u为用户名,p为密码)
返回值 json格式{"status":0,"msg":"\u767b\u9646\u8d85…"} status为状态,1为登陆成功,写入session,0为登陆失败msg为出错信息

保存文档
http://xpad.sinaapp.com/index.php?m=api&a=save
数据提交模式:post (content为文档内容)
返回值 json格式{"status":0,"msg":"\u767b\u9646\u8d85…"} status为状态,status为1发布成功,写入session,status为0发布失败msg为出错信息,status为2,表示上文档没有改变

正在开发一个基于新浪云计算平台的网络便利贴应用

工作的流程是:

xpad客户端采用c#开发

xpad便利贴程序开机最小化启动,右下角显示ico程序图标

当双击右下角xpad图标启动便利贴程序,可以方便的进行记事、编辑操作

当记录结束时,点文件=》保存或是按下ctrl+s保存,或是每隔一段时间进行自动保存

xpad服务端采用新浪云计算平台 php开发

当xpad保存文档时,客户端能过类似web service方式与服务端通讯,提交数据。服务端则加密保存数据库中。

同样,当xpad点击打开文档时,自动从服务端读取已保存的文档日期及摘要,以供打开编辑

目前完成的工作:

xpad客户端界面及最小化右下角图标运行

把常用的原创框架移值到新浪云计算平台

主要的功能:

会员注册、客户端进行登陆、客户端操作便利贴、在web中进行便利贴的操作、开放api、准备开放手机端(android)

 

xpad.png