nginx在fastcgi模块中转发真实的后端IP

网上流传着一份nginx fastcgi_params,大家在nginx下用fastcgi跑PHP大多用的是这个版本,但是这个版本有2个问题,1是默认的buffersize太小,php一旦输出比较多的error_log就挂了,2是没有转发HTTP_X_FORWARD_FOR和HTTP_CLIENT_IP这两个变量.我的服务器是在lighttpd后面跑的nginx+php,wordpress收不到正确的IP,于是垃圾评论无法正常工作.现在我改了一份更合用的版本,提供出来.

  1. fastcgi_buffers 8 128k;
  2. fastcgi_param  QUERY_STRING       $query_string;
  3. fastcgi_param  REQUEST_METHOD     $request_method;
  4. fastcgi_param  CONTENT_TYPE       $content_type;
  5. fastcgi_param  CONTENT_LENGTH     $content_length;
  6.  
  7. fastcgi_param  SCRIPT_NAME        $fastcgi_script_name;
  8. fastcgi_param  REQUEST_URI        $request_uri;
  9. fastcgi_param  DOCUMENT_URI       $document_uri;
  10. fastcgi_param  DOCUMENT_ROOT      $document_root;
  11. fastcgi_param  SERVER_PROTOCOL    $server_protocol;
  12.  
  13. fastcgi_param  GATEWAY_INTERFACE  CGI/1.1;
  14. fastcgi_param  SERVER_SOFTWARE    nginx/$nginx_version;
  15.  
  16. fastcgi_param  REMOTE_ADDR        $remote_addr;
  17. fastcgi_param  REMOTE_PORT        $remote_port;
  18. fastcgi_param  SERVER_ADDR        $server_addr;
  19. fastcgi_param  SERVER_PORT        $server_port;
  20. fastcgi_param  SERVER_NAME        $server_name;
  21. fastcgi_param HTTP_X_FORWARDED_FOR $http_x_forwarded_for;
  22. fastcgi_param HTTP_CLIENT_IP $http_client_ip;
  23.  
  24. # PHP only, required if PHP was built with --enable-force-cgi-redirect
  25. fastcgi_param  REDIRECT_STATUS    200;
  26.  
  27.  
  28. fastcgi_buffer_size 256k;
  29. #fastcgi_buffers 4 256k;
  30.  
  31. fastcgi_connect_timeout 300;
  32. fastcgi_send_timeout 300;
  33. #fastcgi_read_timeout 300;
  34.  
  35.  
  36.  
  37. fastcgi_busy_buffers_size 256k;
  38. fastcgi_temp_file_write_size 256k;
  39. fastcgi_intercept_errors on;

本文由蝌蚪安尼友情赞助.
相关文章
发表在 php技术 | 留下评论

我倒腾过的小项目

有好几个都没有写明是何种license,因为用的人少~~~

acfilter:
项目主页:http://github.com/xurenlu/acfilter
是一个PHP扩展,您需要设定一个词库,然后检测任何一篇文章看它包含了词库中的哪些词.
应用场景:
禁词屏蔽;SEO伪原创;当词库足够大时,可以成为一个简单的分词工具;准备一系列分类的词库,可以实现文本分类和关键词提取;

supermini:
项目主页:http://github.com/xurenlu/supermini
简称SM,是一个极小的PHP框架,帮助你偷懒,不到1000行代码,帮你完成自动建数据库,简单的scaffold功能,以及一个简单极致的mvc实现.

wpra:
项目主页:http://github.com/xurenlu/wpra
是一个wordpress扩展;利用了http://codeany.com/提供的API来完成相关文章的功能.提升SEO效果.

flare-manager
项目主页:http://github.com/xurenlu/flare-manger/
这是web界面的flare的管理器,列在flare的官方网站上.你可以将flare理解为一个支持持久化的memcache实现.

python-scws
项目主页:http://github.com/xurenlu/python-scws
python-scws是scws的Python扩展.scws是一个中文分词实现.

slowphp
项目主页是:http://github.com/xurenlu/slowphp
是一个PHP扩展,用来实现记录php中执行特别费时的脚本地址的工具.可以设定为执行时间超过一定值时触发记录动作,也可以是有一定的概率触发,也可以是当锁文件存在时触发.

PHPPOD:
项目主页是:http://github.com/xurenlu/phppod
是一个dnspod的客户端,与其他客户端不同的时,它不是一个windows下的有GUI界面的客户端,而是PHP实现的,在console下执行,适于在linux下使用,可以和拨号程序集成,也可以在crontab中调用.

hyer:
项目主页是:http://githbu.com/xurenlu/hyer/
是一个python写的爬虫库,已经停止更新.

A mc_list patch for tokyo tyrant
项目主页是:http://github.com/xurenlu/mc_list_patch_4_tokyotyrant
将tokyotyrant做了hack,加上了对list命令的支持.客户端也需要做改动,我已经提供了php版的修改.

sshpass:
项目主页是:http://github.com/xurenlu/sshpass
是一个帮助登录ssh的小工具.假设您要登录的ssh的密码是123456,可以这样登录:
sshpass -p 123456 ssh user@you.site.com


本文由蝌蚪安尼友情赞助.
相关文章
发表在 未分类 | 留下评论

新博开张

嗯,其实开张有一阵鸟,基本是相当八卦地:
一米六二的树洞
我是徐怡然


本文由蝌蚪安尼友情赞助.
相关文章
发表在 未分类 | 3 条评论

PHP中的一些language construct

先来段定义:

A language construct is a syntactically allowable part of a program that may be formed from one or more lexical tokens in accordance with the rules of a programming language.
The term Language Constructs is often used as a synonym for control structure, and should not be confused with a function.

PHP中的language construct:
include, require,isset, print, echo, array , list,empty
include和require 比较常见,例如这一段:这里有三个文章件,b.php包含了c.php和d.php

  1. #b.php:
  2. <?php
  3. var_dump(include "./c.php");
  4. var_dump(require "./d.php");?>
  5. #c.php:
  6. <?php
  7. echo "file c.php\n";
  8. return "return c";
  9. ?>
  10. #d.php
  11. <?php
  12. echo "file d.php\n";
  13. return "return d";?>

运行一下b.php:

file c.php
string(8) “return c”
file d.php
string(8) “return d”

证明include 和require都是有返回值的.但是从语法上看,include,require都不是函数写法.

Array不是函数,这就比较好理解了,你见过哪个函数用function(“var1″=>”var2″)这种写法的?
值的注意的是,empty也不是函数,看这么一段代码:

  1. <?php
  2. class myclass {
  3.     function __get($name){
  4.         return "value of $name";
  5.     }
  6. }http://www.162cm.com/wp-admin/index.php
  7. $myobject =new myclass();
  8. var_dump($myobject->some_var);
  9. var_dump(empty($myobject->some_var));

运行它,得到结果:

string(17) “value of some_var”
bool(true)

看到了吗,虽然你能取到myobject->some_var这个值,但是用empty来判断时,却判断为空.


本文由蝌蚪安尼友情赞助.
相关文章
发表在 未分类 | 一条评论

稍显寒酸的一个PHP框架:supermin

我曾经很长时间不搞什么PHP框架(框架神马的最讨人厌鸟)
我身边很多哥们,都是PHP大牛,所以,每人都写了自己的PHP框架,所以,其实我用不管谁的框架看上去都挺得罪人的,嗯,于是我只能是啥框架也不用了.
不过前一阵团队某个人自己引入了一个框架,然后做完了一个项目,接下来就拍拍屁股走人鸟~~
于是我总结了几个规律,我称之为徐氏定律:

如果一个项目只有一个人全盘负责,这个人一定会离职;
如果一个项目你不盯着,一定会出问题;
如果让一个人自己负责一个东西,不搞个需求评审过一下,他肯定会假想一堆需求;
如果一个程序员去设计一个框架,他肯定想着跨平台,多引擎支持,肯定想着做到老少咸宜男女通吃.

于是我决定写一个真正够用的好用的框架,在公司内部强行推介一下,你可以不用框架,但是如果你要用的话必须用我的框架;没有经过一大堆同事的评审和我的许可,你不可以使用自己写的框架,尤其是,我们基本没有工夫让谁写个牛B的框架….
嗯,于是回家我就开始搞,用了两个晚上,加起来一共不到20个小时的时间,我的超小精框架出厂了,我一向猥琐,嗯,也给起了个猥琐的名字:SM.嗯,全称是:supermini. 几百行代码而已,但是我觉得已经够用了,主要封装两个东西,一个是数据库访问,可以帮您连数据库和拼凑sql语句,另一个东西是一个Form表单生成工具.
这是一个很有特色的框架,嗯,其实连框架都称不上,就一个600来行的小lib而已,都还没有在生产环境上进行过实验,所以暂时不放代码出来.不过这个小框架包含了我对PHP的理解,嗯,每一种框架都是作者的程序哲学的体现.先来个PPT介绍一下基本逻辑.这个PPT是HTML5做的,请用chrome观看.
详情请参见:”迷你PHP框架supermini简介”.


本文由蝌蚪安尼友情赞助.
相关文章
发表在 php性能, php技术 | 3 条评论

rails 每周乱弹:session有效期

默认情况下,Rails是将session信息存放在Cookie中的,但是这个Cookie的过期设置是默认的,浏览器一关闭就自动过期了.我想设置了长时间记住用户,比如,一个月内不需要再次登陆,需要这么做:
1.将Rails升级到新版,2.3.*,我的是2.3.8了;注意这是必须的,因为我之前也是按照一些资料的说明做了第二步,但是不管用,后来发现是rails的版本问题;
2.在config/environment.rb里添加:

  1. config.action_controller.session = {
  2.     :session_key => '_good_session',
  3.     :secret=>
  4.                                                                                                                   '97feddf5fdsfdsfdsfdsfdsfds8bc7d78848a4bd45fe787340466c9598e61dc943d5a8dfb57030094160f52f04d335f4f96641dc9145fa7d57dcgg8673r2iofiewpdjdspiuewpwiudspoewioewpiewpwew',
  5.     :expire_after => 86400*30
  6.   }

我添加了:expire_after这一行,这一行即指明了过期时间;
另外,在新版rails中:session_key这个名称变成了:key,需要注意.
Rails升级很快,而且经常不向下兼容,这一点让人比较郁闷.


本文由蝌蚪安尼友情赞助.
相关文章
发表在 未分类 | 标签为 | 2 条评论

rails 每周乱弹:用ckeditor为表单添加所见即所得功能

我最近在搞codeany.com,用的rails开发,其中一些地方需要用到所见即所得编辑器,不想自己写了,上网搜了搜,找到了一个叫做ckeditor的rails插件,主页是:http://github.com/galetahub/rails-ckeditor;
安装方法:

  1. ./script/plugin install git://github.com/galetahub/rails-ckeditor.git

或者用是

  1. ./script/plugin install http://github.com/galetahub/rails-ckeditor.git

git协议能快一点点;这种安装需要你有git;另外你下载下来安装,下载地址是:http://github.com/galetahub/rails-ckeditor/tarball/master.
安装好以后设置数据库和配置文件;

  1. rake ckeditor:install
  2. rake ckeditor:config

现在就好了,使用很简单,比如以前的代码是:

  1. <%form_for(....) do |f|%>
  2. <%=f.text_area :content,:rows=>5,:cols=>60%>
  3. ...<%end%>
  1. <%form_for(....) do |f|%>
  2. <%= f.cktext_area :content, :swf_params=>{:assetable_type=>'User', :assetable_id=>session[:uid]} %>
  3. ...<%end%>

并在页头加上:

  1. <%= javascript_include_tag :ckeditor %>

即可;ckeditor和jquery等良好共存,并无问题.
下面说一下文件上传:
ckeditor上是带有上传图片并插入到所见即所得编辑器中去的功能,我是用的paperclip来实现,ckeditor对这个有支持,启用很简单,从ckeditor的示例目录中将几个model文件拷过来:

  1. cp vendor/plugins/rails-ckeditor/examples/models/paperclip/* app/models/

这会拷贝这几个文件:

  1. asset.rb
  2.  attachment_file.rb
  3.  picture.rb

并在数据库中创建assets表:

  1. CREATE TABLE `assets` (
  2.   `id` int(11) NOT NULL AUTO_INCREMENT,
  3.   `data_file_name` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL,
  4.   `data_content_type` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL,
  5.   `data_file_size` int(11) DEFAULT NULL,
  6.   `assetable_id` int(11) DEFAULT NULL,
  7.   `assetable_type` varchar(25) COLLATE utf8_unicode_ci DEFAULT NULL,
  8.   `type` varchar(25) COLLATE utf8_unicode_ci DEFAULT NULL,
  9.   `user_id` int(11) DEFAULT NULL,
  10.   `created_at` datetime DEFAULT NULL,
  11.   `updated_at` datetime DEFAULT NULL,
  12.   PRIMARY KEY (`id`),
  13.   KEY `ndx_type_assetable` (`assetable_id`,`assetable_type`,`type`),
  14.   KEY `fk_assets` (`assetable_id`,`assetable_type`),
  15.   KEY `fk_user` (`user_id`)
  16. ) ENGINE=InnoDB AUTO_INCREMENT=7 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci

即可了.
这个也可以上ckeditor的主页去看,ckeditor的主页写得很全面了,少部分地方不够细致,需要摸索一下.


本文由蝌蚪安尼友情赞助.
相关文章
发表在 未分类 | 标签为 | 4 条评论

rails 每周乱弹:解决RMagick版本问题

在rails中生成验证码时,报错了:This installation of RMagick was configured with ImageMagick 6.5.5 but ImageMagick 6.5.7-8 is in use.
我的解决办法是:
修改/usr/lib/ruby/1.8/RMagick.rb,在require “RMagick.so”之前加上:

RMAGICK_BYPASS_VERSION_TEST=true

本文由蝌蚪安尼友情赞助.
相关文章
发表在 未分类 | 标签为 | 留下评论

检测文本正文是否包含有特定词的PHP扩展

项目主页为:http://github.com/xurenlu/acfilter

1:acfilter 用于实现查询某段文本中是否含有指定的词(当前禁词越来越多的情况下,
是有必要开发一个扩展来干这个了):在词库够大的情况下,能实现一定的分词的功能;
2:acfilter 基于发布于http://code.google.com/p/pysoft/ 上的acseg完成,原有代码发布的license为New BSD license;
acfilter 仍使用New BSD lincense;
3:
安装:

tar -xzf acfilter.tar.gz
cd acfilter
phpize
./configure
make
sudo make install

安装完之后请在php.ini里加上:

extension=acfilter.so

4:使用:
示例代码:

  1. $ac=acfilter_new();
  2. var_dump($ac);
  3. acfilter_add_word($ac,"河边");
  4. acfilter_add_word($ac,"狗屎");
  5. acfilter_add_word($ac,",");
  6. acfilter_add_word($ac,"工信部");
  7. acfilter_prepare($ac);
  8. print_r(acfilter_check_text($ac,"曾经有一个很狗屎的部门,叫工信部,到河边自杀了"));
  9. acfilter_close($ac);

运行后输出为包含的各个禁词用空格连起来的一个字符串,如下所示:

resource(4) of type (Acfilter Index)
狗屎 , 工信部 , 河边

具体可参见example.php;
5:有任何Bug,请发信给:xurenlu@gmail.com,谢谢!


本文由蝌蚪安尼友情赞助.
相关文章
发表在 my projects, php技术 | 标签为 , , | 一条评论

CloudAPI 远程接口服务使用图文教程

Codeany的介绍:

要使用这个服务,第一步,必须先注册帐户:

接下来用刚注册的帐号登陆:

登陆后来到控制台,或是直接点击下图中的”立即开始’链接

点击后会来到所有API的列表页:

点击图中”创建使用这个API的库,填写如下表单:

注意,数据库名字应为字母打头,只能由字母和数字组成(我正在考虑放开这个限制),并且不得重名.创建后,来到控制台,查看您刚才创建的库的密钥:

这串字符串您需要保存好了,在实际应用中就是靠这个串来确认您的身份的.

现在开始编写程序,实地使用一下了:

注意这个API地址:

http://www.cloudapi.info/api/proxy.php?code=8Gk1N0QjoUUEgPI6Hzj8tNVdcJ8quDWf

后面的code就是您前面创建数据库里生成的密钥.另外,这个程序是在phprpc的基础上跑的,phprpc从这里下载:

http://www.phprpc.net/zh_CN/download/

有了PHPRPC,我就不用开发asp,jsp,perl,python等各种客户端了,全都已经有了.

运行一下,看看效果:

再试试正文抽取的接口:代码:

再看看执行效果:

好了,现在去Cloudapi 上搞个帐号试试吧,有问题欢迎反馈,gtalk:xurenlu@gmail.com


本文由蝌蚪安尼友情赞助.
相关文章
发表在 未分类 | 标签为 | 8 条评论