分类目录归档:Internet

用CodeIgniter写了第一个企业网站

某个晚上,发现使用PHP Web Framework来开发一些功能比较一般的商业网站效率挺高的。因此,有兴趣接触一下这方面的东西,免得我每次给自己的应用编写站点都Copy一大堆重复使用过的代码。搞Web的人太多了,同时涌现出来的Web框架也太多了,不知道选择哪一个好,怕选到一个不适合自己的,就浪费了不少时间了(虽说也能从中学到一些东西)。

上网搜索了一下,国外很多人推CakePHP,Zend Framework,Yii,Symfony,CodeIgniter等。在某论坛上看到有很多人推ThinkPHP(TP)的,好像人气挺高的。之前有个同学跟我推荐过ThinkPHP,我当时对基于别人的基础上开发站点还不怎么依赖,没多大兴趣。这次上官网看了一下,没找到在线的Example代码,所以没有理会。

后面看到有人推荐CodeIgniter(CI),听起来也挺不错的,于是上官网看了一个20分钟建博客的视频教程。从此就感觉到用它的框架的确比我之前自己写的那个框架方便多了!虽然要遵循一些规矩比较多,但是功能很强大,很全!点这里可以观看视频“Create a Blog in 20 Minutes”。
继续阅读

用alarm信号处理阻塞socket的超时

以前在使用阻塞(blocked)socket的connect,send,recv函数的时候,通常都使用settimeout来设置超时。
如下,

#!/usr/bin/env python

import socket
import time

fd = socket.socket()

try:
    print "connect", time.ctime()
    fd.settimeout(5)
    fd.connect(("twitter.com", 22))
except:
    print "timeout", time.ctime()
finally:
    fd.settimeout(0)

继续阅读

如何让多个进程监听同一个TCP端口

通常我的服务器上都会启用多个php-cgi程序,有时候这样做是很必要的

1. 可以同时让多个进程处理请求,负载均衡。
2. 避免一个进程崩溃时,在重新启动前,无法及时提供服务。

启用多个相同服务进程必然需要考虑共用一个socket。对于php-cgi程序来说,是通过stdin文件描述符来传递这个socket。

工作原理如下:
继续阅读

写了一个Web Gateway做Proxy

因为EMSVPS的服务器实在有太多的问题,故现在改回比较稳定的burst.net机器。现在Paypal支持Unionpay的卡,5.95USD/mo大概人民币38元。burst.net的机器提供512M内存和2个IP地址,内存充足的时候跑起Wordpress的确轻松很多了。现在一个IP用作博客服务,另外一个IP用作提供一些Web服务。

因为不同的Web服务都需要监听一个服务端口,为了能让他们共用一个IP上的80端口,需要一个代理分发请求的程序。例如
访问http://lab.xiaoxia.org/server/*的请求分发到localhost:10000的服务,
访问http://lab.xiaoxia.org/whois/*的请求分发到localhost:10001的服务,
而访问http://lab.xiaoxia.org/*的请求,直接获取www目录下的资源文件,例如index.html。

因为使用的都是同一个域名,不同的只是路径,要根据不同的路径选择不同的服务端口,我使用了正则表达式来解决这个问题。

效果见 http://lab.xiaoxia.org/
继续阅读

这几天都在写Submission System

之前研究了一段时间ExtJS,在写一个FTP后台管理系统,可惜没有完成。最近写Submission System因为不是开源项目,所以前端开发没有使用支持GPL的ExtJS,使用了支持MIT的jQuery,以及下面这些东西:

一个小巧又美观的编辑器 cleditor
用来弹出modal window的jQuery DOMWindow
一个不错的表格插件 flexigrid

第一个编写的页面,有点丑,自己设置的样式,没有太花心机在这个上面。


继续阅读

Python小程序: ServerInformation

监听一个端口,提供HTTP接口,通过访问Web地址,调用程序获取各种信息。

例如,想在远程服务器上执行free命令查看远程服务器的内存使用情况,

free -m 的base64编码为 ZnJlZSAtbQ==,则访问下面的地址:

http://xiaoxia.org:10000/ZnJlZSAtbQ==

提交之后返回类似于下面的结果,

             total       used       free     shared    buffers     cached
Mem:           118        114          4          0          3         36
-/+ buffers/cache:         74         44
Swap:          255         56        199

为了安全使用,在CommandList文本文件里保存着一个命令列表,即可以允许调用的程序。

ps aux
free -m
netstat -na
cat /proc/meminfo
cat /proc/cpuinfo

继续阅读

均衡一下负载,把mysql移到了另外一个vps

博客的vps,因为运行太多的应用,包括mysql、php-cgi、webserver、ftpd、pptpd、fox3、smtpd等,物理内存使用早已经超过总内存128MB,swap也用了50多MB,所以出现了访问网页经常因为IO读写而卡一会儿的问题。

前几天,在EMSVPS上申请了一个35元的,跟我现在博客服务器用的配置基本相同的vps。就是这个价钱太小了,还是xen vps,让我担心会不会经常出问题,所以先用一段时间,目前用作负载均衡,分担了内存占用大,运行又慢的mysql服务器。

主服务器上的内存使用状况:

http://xiaoxia.org:10000/ZnJlZSAtbQ==

辅服务器上的内存使用状况:

http://xsign.org:10000/ZnJlZSAtbQ==

继续阅读

浅谈某些网页验证码以及绕过验证

平时上网纵观各式各样的验证码,能起到识别人为操作,避免机器人作用的不到半数。

此前,我已经写过一篇关于验证码识别的文章《无聊入门一下传说中的验证码识别技术》

很多很多验证码都是很水的。他们能起的作用是,

1. 加这个验证码是让查的人不那么急,流量不那么拥挤 (wf同学认为)

2. 加这个验证码的目的可能是让用户有机会停下来确认输入的数据是否正确 (44670同学)

 

案例一

首先,看看广东教育考试院首页的登录验证嘛,我到浏览器是firefox!

我擦,这是什么验证码,居然还分两行显示,教育部门都这么先进了吗?

继续阅读