2008年10月30日星期四

PHP负载均衡指南

过去当运行一个大的web应用时候意味着运行一个大型的web服务器。因为你的应用吸引了大量的用户,你将不得不在你的服务器里增加更多的内存和处理器。

今天,\'大型服务器\'模式已经过去,取而代之的是大量的小服务器,使用各种各样的负载均衡技术。这是一种更可行的方法,将使硬件成本降至最低。

\'更多小服务器\'的优势超过过去的\'大型服务器\'模式体现在两个方面:

1. 如果服务器宕机,那么负载均衡系统将停止请求到宕机的服务器,转而分发负载到其他正常运行的服务器上。
2. 扩展你的服务器更加容易。你要做的仅仅是加入新的服务器到负载均衡系统。不需要中断你的应用运行。

所以,把握住这个机会:). 当然,代价就是这要求你的应用开发时增加一点复杂度。这就是本文要覆盖的内容。

这时你可能对自己说: \'但是我怎么知道我正在使用负载均衡呢?\'。最诚实的回答是,如果你正在问这个问题,那么答案是你多半没有在使用负载均衡系统并且你的系统不需要考虑这个 问题。大多数情况,当应用成长足够大的规模时,负载均衡就需要明确提出和设置了。然而,我也偶尔看见虚拟主机公司为客户的应用做这个负载均衡,或者像下面 描述的那样要自己来做。

在继续下面的内容之前,我要指出本文主要描述PHP的负载均衡。将来我可能会写有关数据负载均衡的文字,但是现在你必须等待。

注意,我一直提“web应用”而不是website,这是想区分\'web应用\'是那些复杂的站点往往涉及服务器端编程和数据库,而不是website那样只显示简单的静态内容。
1. PHP文件

第一个问题是,如果你有大量的小型服务器,你怎么把你的php文件上传到所有的服务器上?有如下的方法供你参考:

1. 分别上传所有的文件到每一个服务器 , 这种方法带来的问题是:想像一下你有20个服务器,那么上传过程中这将很容易导致错误,并且更新时极有可能导致不同服务器上有不同版本的文件。
2. 使用 \'rsync \' (或类似的软件) . 这样的工具能同步本地目录和多个远程主机目录上的文件。
3. 使用版本控制软件(如subversion ) . 这是我最喜欢的方法。用它可以很好地维护我得代码,当发布我的应用时,可以在每一个服务器上运行svn update命令同步。这种方法也使切换服务器得代码到过去的某一个版本更加容易。
4. 使用一个文件服务器(你可能发现NFS 非常适合做这件事情). 这种方式是使用一个文件服务器来存放你的web应用. 当然,如果你的文件服务器宕机,那么多所有你的站点将不能使用。这时,你就需要花费更多的开支来恢复它。

选择哪种方式依赖于你的需求和你掌握的技能。如果你使用版本控制系统,那么你可能得计划一个方法如果同时执行一个更新命令更新所有服务器上的代码。然而,如果使用文件服务器,你就要实现一些失败恢复机制,防止万一服务器宕机导致请求失败。
2. 文件上传

当只有一台服务器时,文件上传不是一个问题。但是当我们有多台服务器时,那么上传的文件应该怎么存放呢?上传文件的问题和跨服务器php文件存储是类似的。下面是几种可能的方案:

1. 把文件存储到数据库中 。大多数数据允许存储二进制数据。当你请求文件下载时,访问数据把二进制数据和相应的文件名和类型输出给用户。在使用这种方案前应该考虑数据库怎样存储你的文件。该方法的问题在于如果数据库服务器宕机将使文件不可用。
2. 在一个文件服务器上存储上传的文件 . 与前面的介绍一样,你要安装一个文件服务器让所有web服务器共享,把所有上传的文件上传到这里,上传后所有的web服务器就都可以使用它。但是,如果文件服务器宕机,那么可能发生图像文件下载中断。
3. 设计你自己的上传机制传输文件到服务器到每一个服务器 . 这个方法没有单个文件服务器或者数据库方案的缺陷,但是将增加你代码的复杂度。例如,如果上传到多个服务器过程中,服务器宕机,你要怎么处理?

用数据库存储上传文件但是设计一个文件缓存机制是一个不错的方案。当服务器接收一个文件下载请求时,首先检查缓存系统中是否有该文件,如果发现那么从缓存系统下载,否则从数据库读取并把它缓存到文件系统中。
3. 会话(Sessions)

如果你熟悉php的session处理,你将可能知道默认情况下,它存储session数据在服务器的临时文件里。而且,这个文件仅仅在 你请求处理的那个服务器上,但是接下来的请求可能被另外一个服务器处理,这将在另一个服务器上生成新的session。这导致session频繁地不被识 别,如登录用户总是要求重新登录。

我推荐的方案是,要么重新php内建的session处理机制存储session数据到数据库,或者实现你自己的机制保证发送一个用户的请求到同一台服务器。
4. 配置(Configuration)

尽管这个话题不是和php特别相关,我感觉还是有必要提及。当运行集群服务器时,用某种方法保持服务器之间的配置文件同步是一个好主意。如果配置文件不一致,可能导致一些非常奇怪的断断续续的行为导致很难排查这些问题。

我推荐使用版本控制系统单独管理他们。这样你可以为不同的项目安装存储不同的php配置文件,也可以保持所有服务器配置文件同步。
5. 日志(Logging)

像配置问题一样,logging不是仅仅和php相关。但是对于保持服务器健康运行它仍然是非常重要的。没有正确的logging系统,你怎么知道如果PHP代码开始产生错误(在系统正式运行时,你总是关闭display_errors 设置,不是吗?)



有几种方法你可以实现logging:

1. 在每一个服务器上记录日志。 这是最简单的方法。每一个机器仅仅记录一个文件。好处是简单,可能只要很少的配置。但是,随着服务器数量的增多,监控每台服务器上的日志文件将变得非常困难。
2. 记录日志到一个共享 这种方法每一个服务器仍然有这个日志文件,但是他们通过共享机制被存储在一个中央文件服务器上,这将使监控日志变得更简单。该方案的问题在于,如果文件服务器不可用将导致一个简单的日志不能写入问题最终导致整个应用崩溃。
3. 记录日志到logging服务器 你可以使用一个logging软件,如syslog 来把所有的日志写到一个中央服务器。尽管这个方法要求更多的配置,但是他也提供了最健壮的方案。

PHP新手上路(十三)-网络学院-中原硅谷网

PHP的爆炸性流行使得一夜之间出现了很多基于PHP的站点,其中不少站点有在线教程、范例代码、技巧和提示等内容。

国内
http://www.phpuser.com/ - PHP中文用户,也就是这里了
http://www.phpx.com/ - 中国PHP联盟
http://www.phpsite.net/ - PHP专门站
http://www.phpchina.com/ - PHP CHINA
http://www.cpcw.com/netschool/homepage/cgi/ - 电脑报网页陶吧
国外
http://www.php.net/ - PHP官方站点
http://www.devshed.com/ - 极好的教程
http:// px.sklar.com/ - 代码交换
http://phpuser.com/get_started/ http://www.phpbuilder.com/ - 教程、专栏和邮件列表档案
http://phpuser.com/get_started/ http://www.weberdev.com/ - 文章和代码
http://phpuser.com/get_started/ http://www.phpwizard.net/ - 提示与技巧
http:// www.iometrics.com/php/phplist.php3/ - IOMetrics scripts的档案
http://www.e-gineer.com/phpkb/ - PHP知识库


12.2 邮件列表

  你可以在PHP官方站点的\"支持\"栏目内登记获得以下的邮件列表。值得注意的是这些都是高流量流表,一般每天会有100份e-mail。

php3@lists.php.net - 主要的列表
php-dev@lists.php.net - 主要针对开发者
mailto:php-list-subscribe@exp.com.cn - 本站的邮件列表,与论坛相通


12.3 引人注目的工程

  一些基于PHP的工程已经发展得比较完善。其中一些更出色更引人注目的是:

http://phplib.netuse.de/ - PHPLib,一整套PHP函数库
http://www.phorum.org/ - Phorum是一个很完善的BBS系统
http://www.fishcartsql.org/ - FishCartSQL是一个电子商务解决方案
http://www.midgard-project.org/ - Midgard是一个网络应用开发平台

2008年10月29日星期三

详解XSS跨站脚本攻击

一、什么是XSS攻击

  XSS又叫CSS (Cross Site Script) ,跨站脚本攻击。它指的是恶意攻击者往Web页面里插入恶意html代码,当用户浏览该页之时,嵌入其中Web里面的html代码会被执行,从而达到恶意用户的特殊目的。XSS属于被动式的攻击,因为其被动且不好利用,所以许多人常呼略其危害性。而本文主要讲的是利用XSS得到目标服务器的shell。技术虽然是老技术,但是其思路希望对大家有帮助。

  如何寻找XSS漏洞

  就个人而言,我把XSS攻击分成两类,一类是来自内部的攻击,主要指的是利用程序自身的漏洞,构造跨站语句,如:dvbbs的showerror.asp存在的跨站漏洞。另一类则是来来自外部的攻击,主要指的自己构造XSS跨站漏洞网页或者寻找非目标机以外的有跨站漏洞的网页。如当我们要渗透一个站点,我们自己构造一个有跨站漏洞的网页,然后构造跨站语句,通过结合其它技术,如社会工程学等,欺骗目标服务器的管理员打开。

  然后利用下面的技术得到一个shell.

  如何利用

  传统的跨站利用方式一般都是攻击者先构造一个跨站网页,然后在另一空间里放一个收集cookie的页面,接着结合其它技术让用户打开跨站页面以盗取用户的cookie,以便进一步的攻击。个人认为这种方式太过于落后,对于弊端大家可能都知道,因为即便你收集到了cookie你也未必能进一步渗透进去,多数的cookie里面的密码都是经过加密的,如果想要cookie欺骗的话,同样也要受到其它的条件的限约。而本文提出的另一种思路,则从一定程度上解决上述的问题。对于个人而言,比较成熟的方法是通过跨站构造一个表单,表单的内容则为利用程序的备份功能或者加管理员等功能得到一个高权限。下面我将详细的介绍这种技术。

  二、来自内部的跨站攻击

  寻找跨站漏洞

  如果有代码的话比较好办,我们主要看代码里对用户输入的地方和变量有没有做长度和对”<”,”>”,”;”,”’”等字符是否做过滤。还有要注意的是对于标签的闭合,像测试QQ群跨站漏洞的时候,你在标题处输入,代码是不会被执行的,因为在源代码里,有其它的标签未闭合,如少了一个,这个时候,你只要闭合一个,代码就会执行,如:你在标题处输入,这样就可以弹出一个test的框。

  如何利用

  我先以BBSXP为例,过程已做成动画,详情可见光盘中的动画。我举BBSXP中其中两个比较好用的跨站漏洞点为例.

  a.先注册一个普通用户,我这里注册的用户是linzi.然后我们在个人签名里写入:

[img]http://127.0.0.1/bbsxp/admin_user.asp?menu=userok&username=linzi&membercode=5&userlife=1&posttopic=3&money=9&postrevert=0&savemoney=0&deltopic=1®time=2005-9-1+1%3A1%3A1&experience=9&country=%D6%D0%B9%FA&&Submit=+%B8%FC+%D0%C2+[/img]

  c.然后发个贴子,可以结合其它技术欺骗管理员浏览发的贴子。

  d.因为是测试,所以我们以管理员身份登陆,然后打开贴子,我们会发现,linzi已经变成了社区区长工,如图一所示

  除此之外我们只要在个人签名里输入

[img]http://127.0.0.1/bbsxp/admin_setup.asp?menu=variableok&clubname=+&homename=+&homeurl=&floor=2&PostTime=3&Timeout=6&OnlineTime=12&Reg10=10&style=1&selectup=FSO&MaxFace=10240&MaxPhoto=30720&MaxFile=102400&UpFileGenre=gif|jpg|asp%20|rar[/img]

  同样发个贴子等,只要管理员打开了,就会加了一个扩展名为asp (有空格)的上传扩展,这个时候,你只要上传一个newmm.asp (有空格)就可以得到一个shell.

  上面的攻击多多少少有点局限性,虽然可以得到shell,但是隐蔽性不太好,因为签名处受到了长度的限制,不能超过255个字符。我们可以结合flash跨站实现更为隐蔽的攻击,对于flash木马的制作,下面见哥们丰初的介绍。

  再利用如下:

  修改一下个人头像的url,输入代码如下: admin_setup.asp?

menu=variableok&clubname=+&homename=+&homeurl=&floor=2&PostTime=3&Timeout=6&OnlineTime=12&Reg10=10&style=1&selectup=FSO&MaxFace=10240&MaxPhoto=30720&MaxFile=102400&UpFileGenre=gif|jpg|php|rar

  再接着欺骗管理员打开你的资料或者浏览你的贴子,当管理员打开后,会在后台自动加个php扩展名的后辍,因为bbsxp在个人头像url里过滤了空格,%,所以我们只能加个不包括空格的其它扩展,当然你也可以加个shtml的扩展,有了它你就可以用来查看源代码,然后进一步攻击。

2008年10月28日星期二

利用jquery操作select下拉列表框 - 为了忘却的纪念 $bestmost->save(

其他有关select的取值或赋值方式:
复制多选框,并且设置指定名称为默认值
$(".SoftType").html($("#stsoft").clone());
for(var i=0; i<$(".SoftType select option").length; i++){
if($(".SoftType select")[0].options(i).text== soft){
$(".SoftType select")[0].selectedIndex = i;
}}
获取select被选中项的文本
var item = $(\"select[@name= stsoft] option[@selected]\").text();
select下拉框的第二个元素为当前选中值
$(\'#stsoft\')[0].selectedIndex = 1;
获取value值
$(\'#stsoft\').val();
设置value=1的项目为当前选中项
$(\"#stsoft\").attr(\"value\",“1”);
$(\'#stsoft\').val(“1”);

2008年10月27日星期一

十大建站开源程序

目前互联网上有无数个开源的建站程序可供大家选择使用,对现在的站长来说真的是容易多了,10年前我作网站的时候,一个小聊天程序也要自己一句一句的写,看看现在的开源程序,层出不穷。太多了也就不知道选哪个好了,很多初学者买域名建网站,可是不知道如何下手,希望这篇文章能给您的网站建设开个好头,这也就是我Anki写这篇文章的目的。

1、PhpBB - 论坛讨论板

phpBB具有友好的用户界面,使用了当今网 络上流行的php语言工作,可以搭配MySQL,MS- SQL,PostgreSQL, 和Access/ODBC等数据库系统使用。适合于大多数的网站用来搭建论坛系统。软件的开发成员来自于开源社区,是一个国际性的开源项目,2000年6 月开始项目以来,各开发成员们坚持开源精神,为软件的稳定可用贡献了各自的力量。

主要功能特点:

* 支持流行的数据库服务器;
* 论坛和发贴数无限制;
* 多国语言接口界面;
* 支持开设公共和私用性论坛;
* 集成了强大的搜索工具;
* 有大量模版来支持用户实现不同的论坛表现风格;
* 支持基于cookie和url等两种安全会话机制;
* 对用户和组有安全分级管理机制;
* 用户发贴数统计,用户等级授勋等实用功能。

访问:官方主页

下载地址: sourceforge下载

2、Discuz! -论坛讨论板

Discuz!,全称 Crossday Discuz! Board,是一个通用的论坛软件系统,用户可以在不需要任何编程的基础上,通过简单的设置和安装,在互联网上搭建起具备完善功能、很强负载能 力和可高度定制的论坛服务。Discuz! 的基础架构采用世界上最流行的 web 编程组合 PHP+MySQL/PgSQL 实现,是一个经过完善设计,适用于各种服务器环境的高效论坛系统解决方案。 Discuz! 无论在稳定性,负载能力,安全保障等方面都居于国内外同类产品领先地位。Discuz!应该说基本上占领了国内的个人站长论坛市场,个人也非常推崇这款论 坛程序。 空间联盟的论坛 就是使用Discuz!程序的一个例子。

适用于以下的应用领域 :

* 对稳定性和负载能力要求较高的门户网站
* 大中型企业的客户在线调查、技术与产品服务
* 企事业单位内部交流与沟通,办公协作与自动化(OA)
* 大中专院校的学生、教工与校友讨论区
* 已经发展到一定规模,具有相当访问量的个人网站
* 商业、交友、科技、影音、下载等等方面的专门网站
* 地方政府、电信公司或爱好者建立的地域性讨论区

访问:官方主页

下载地址: http://www.discuz.net/download/

PHPWind 和 动网论坛 也是不错的论坛程序,这里就不一一介绍。

3、PHPnuke - 整站内容管理系统(CMS)

内容管理系统应该首推PHPnuke。众所周知,国内几个著名个人资讯网,例如cnbeta、联客资讯,都是以PHPnuke作为信息平台的。

phpNuke原本是开源软件,但是从7.8版本开始就收费了。只要懂得LAMP(linux + apche + mySQL + php)的人,就能顺速的通过phpNuke架设自己的网站系统,基本上网站需要的功能都包括了:新闻、下载、链接、论坛……最突出的就是可以自己写 module扩充功能,或者将其他应用嵌入到phpNuke中;通过skin的方式方便的更改网站的风格。 cnBeta 是一个典型的应用实例。

访问: http://phpnuke.org/

下载地址:PHPnuke 8.0简体中文版

4、Mambo - 整站内容管理系统(CMS)

Mambo,中文意思为曼波音乐(源于古巴黑人音乐),是这个星球上功能最强大的开放源码的智能建站系统之一。在2004年4月20日伦敦举行的 Linux用户和开发员大会上,Mambo从众多优秀的开放源码系统中脱颖而出,获得2004年度最佳Linux开放源码系统奖项,和它同场竞技的有 KDE、Firebird SQL以及eGroupware等,这些都是知名度很高,被广泛使用的系统,现在却沦为Mambo的手下败将,可想而知,Mambo的魔力有多大! Windows Live知识库就是Mambo应用的一个例子。
主要功能特点:

* 完全的数据库驱动
* 新闻,产品或服务类别可完全编辑和管理
* 内容可由多个编辑者上传与编辑
* 完全的可定制外观
* 可由浏览器上传图片或其他媒体文件,并可将图片使用于所有栏目中
* 动态的论坛/投票等系统
* 可运行于Linux, FreeBSD, MacOSX server, Solaris 和 AIX

访问: 官方主页

下载地址: MamboV4.6.1 中文版

当然还有很多国内外优秀的CMS开源程序,这里不能一一详述。

5、Gallery - 图库相册程序

Gallery 是一个非常有名的免费开源图库相册软件,基于 PHP 和 MySQL, PostgreSQL 等数据库。功能非常强大,有丰富的扩展可以下载,安装很简单,环境符合后,按照提示一路 continue 就行了。 Gallery 的界面定制不复杂,只有几个模版文件,也有很多免费的皮肤可以下载,因为是一套老程序了,国外有很多人为它服务,免费皮肤很容易找到。
语言方面,已经有了简体、繁体中文的语言文件支持,编码是 UTF-8, 符合国际标准。Gallery 现在的稳定版是 2.0.3, 另外也有 2.1 的每夜构建版可以下载,每夜版也是相当稳定的,这次我安装的就是每夜版。
与 Coppermine 相比, Gallery 的功能更强大一些,扩展更丰富。安装方面 Coppermine 简单一些,只有3步,Gallery 10来步。 模版定制上 Coppermine 比较复杂,虽然文件不多,但各项语法比较费事,不是很直观的 html,需要用到一些 PHP, 相比 Gallery 的模版定制更简单一些。我这里有一个Gallery相册实例: http://msliver.com

Gallery 的系统要求:

* 平台 - UNIX (BSD, Linux, …) or Windows
* 网络服务器 - Apache, Microsoft IIS, Zeus, …
* PHP - PHP 4.1.0 或更高, PHP safe_mode 必须关闭
* 图片处理库 - ImageMagick, NetPBM. Gallery 2 还加上了对 GD 和 GraphicsMagick 的支持。
* 数据库 (Gallery 2) - MySQL 3.x, 4.x or 5.x, PostgreSQL 7.x or 8.x, Oracle 9i or 10g, DB2 8.2 (Gallery 1.x 不使用数据库)

访问:官方主页

下载地址: Gallery 2.0.3 下载 ( SourceForge 下载,3个安装包,里边包含的模块多少不一样,全部的解压后30M左右,典型的16M左右,最小的安装包 7/8M)。

6、 Wordpress -博客日志管理系统

Wordpress是大家都很熟悉的开源博客平台,本站TopDig日志就是用Wordpress搭建的。 WordPress是一种使用PHP语言和MySQL数据库开发的Blog(博客、网志)引擎,用户可以在支持PHP和MySQL数据库的服务器上建立自 己的Blog。 它是一个功能非常强大的博客系统,插件众多,易于扩充功能。安装和使用都非常方便。目前WordPress已经成为主流的Blog搭建平台。 WordPress的原版是英文版的,但是有爱好者开发了中文语言包,使其可以支持中文。 它拥有几百个各式插件和不计其数的模板样式。

Wordpress的功能特性:

* 进行文章发布、分类、归档。
* 支持文章、评论、分类等多种形式的RSS输出。
* 提供链接的添加、归类功能。
* 支持评论的管理,防垃圾功能。
* 支持对风格(CSS)和程序本身(PHP)的直接编辑、修改。
* 在Blog系统外,方便的添加所需页面。
* 通过对各种参数进行设置,使你的Blog更具个性化。
* 生成静态html页面(需要mod_rewrite支持)。
* 通过选择不同主题,方便地改变页面的显示效果。
* 通过添加插件,可提供多种特殊的功能。
* 支持Trackback和pingback。
* 支持针对某些其它blog软件、平台的导入功能。
* 支持多用户。

访问: 官方主页

下载地址:sourceforge下载

7、OpenPNE -社会化交友平台

OpenPNE是优秀的全球开源的Social Networking and group collaboration platform(社交网络和团体协作平台)web应用程序,一个来自日本的开源项目。OpenPNE是sns网络服务的引擎,OpenPNE丰富的 SNS服务功能和易于使用的特性让越来越多的用户喜欢并开始使用他。它是基于大型SNS(social networking service)的网络交际平台。OpenPNE对网站服务器的要求较高,普通的虚拟主机是无法建立OpenPNE社会化平台的。

OpenPNE的安装环境:

* Apache 1.3.*/2.0.* 以上
* PHP 4.3.*/5.0.*
* PHP mbstring 扩展
* PHP GD库 (JPEG/GIF/PNG)
* PHP mcrypt 扩展(推荐)
* ·MySQL 4.0/4.1
* ·邮件服务器
* Postfix 2.1.* (推荐)

访问: 官方主页

下载地址: http://www.openpne.com.cn/corp/DownLoad.shtml (目前官方只提供了繁体中文版下载)

8、Pligg -Digg类社会化信息平台

Pligg是一个Web2.0内容管理系统( CMS )。 与现存的CMS最大不同之处在于它能够让你的访问者们自己决定网站的内容并提供让他们建立一个交流 。Pligg目前还没有走出beta,因此模版和插件也相对较少,大部分程序员们都处于观望状态,目前的版本为beta 9.5。Pligg的模版除了自带的:”Digital Nature”,”Paul01″,”yget”,”Mollio-Beat” 之外真的很难找到其他的可以使用的模版。

来自官方的一段话:“Pligg,最灵活的类似Digg的Web2.0 CMS系统!网页设计师可以使用Pligg做他(她)想做的任何事情。稍微懂一些PHP和Mysql的知识即可安装Pligg。如果需要修改和管理 Pligg,可能有点难度。对于精通Web开发语言的朋友,Pligg是一个定制化非常强的CMS系统。”。

功能特性:

* 安装简单
* 支持多用户
* 用户提交、用户投票、用户决定首页文章
* 支持用户一定程度在线交流
* 可自定制模版和插件

访问: 官方主页

下载地址:sourceforge下载

9、MediaWiki -开源Wiki知识库平台

MediaWiki是全球最著名的wiki程序,运行于PHP+MySQL环境。MediaWiki从2002年2月25日被作为维基百科全书的系 统软件,并有大量其他应用实例。目前MediaWiki的开发得到维基媒体基金会的支持。 MediaWiki是建立wiki网站的首选后台程序,目前国内的天下维客等站点都采用这套系统。 MediaWiki一直保值着持续更新。其原作者为德国的Magnus Manske。

MediaWiki中文支持良好,功能特性完善,学习资料充足,是建立wiki网站的首选wiki程序。MediaWiki能方便的建立网站并让大家参与内容编辑,推荐站长选用。

wiki的重要特征:

* 记录所有的改动版本,能方便的查阅历史更新记录,这使得开放性编辑成为可能
* 自动产生链接,编辑文本中中括号中的内容(如“[[X条目]]”)将自动产生链接
* 允许使用模板,方便对相同内容的重复使用、更新
* 支持分类,并根据分类在不同的文章之间自动产生关联
* 允许每个用户自行选择系统外观
* 中文支持好

访问: 官方主页

下载地址:sourceforge下载

10、Gregarius -RSS聚合程序

Gregarius是一个基于web的RSS/RDF/ATOM聚合程序,它运行于您的web服务器,聚合您想要的任何资源。 这个开源聚合站程序是新兴起的RSS聚合站的开源先锋,虽然目前还没有完全脱离测试版本,但是功能已经相当齐全,并能较好的支持中文。这里有一个 演示站点 供大家参考。

功能特点:

* 完全基于web。
* 简单、有密码保护的管理及设置。
* 运用AJAX技术。
* 支持全文搜索。
* 完全符合web标准。
* 基于开源协议的免费软件。

访问: 官方主页

下载地址:sourceforge下载

2008年10月22日星期三

PHP SOAP扩展

PHP的SOAP扩展可以用来提供和使用Web services。换句话说,PHP开发者可以利用这个PHP扩展来写他们自己的Web services,也可以写一些客户端来使用给定的Web services。

PHP5中的这个SOAP扩展目的是为了实现PHP对Web services的支持。与其它实现PHP对Web services的支持的方法不同,SOAP扩展是用C写的,因此它比其它方法具有速度优势。

SOAP扩展支持以下规范。

* SOAP 1.1
* SOAP 1.2
* WSDL 1.1

SOAP扩展主要用来处理RPC形式的Web services。不过,你也可以使用文本形式的WSDL文件配合WSDL模式的服务端和客户端。

这个扩展使用 GNOME XML库来处理XML。

扩展中的类
这个扩展实现了6个类。其中有三个高级的类,它们的方法很有用,它们是 SoapClient,SoapServer和SoapFault。另外三个类除了构造器外没有其它别的方法,这三个是低级的类,它们是SoapHeader,SoapParam和SoapVar。

SoapClient类

这个类用来使用Web services。SoapClient类可以作为给定Web services的客户端。
它有两种操作形式:

* WSDL 模式
* Non-WSDL 模式

在WSDL模式中,构造器可以使用WSDL文件名作为参数,并从WSDL中提取服务所使用的信息。

non-WSDL模式中使用参数来传递要使用的信息。这个类有许多可以用来使用服务的有用的方法。其中SoapClient::__soapCall()是最重要的。这个方法可以用来调用服务中的某个操作。

SoapServer类

这个类可以用来提供Web services。与SoapClient类似,SoapServer也有两种操作模式:WSDL模式和non-WSDL模式。这两种模式的意义跟 SoapClient的两种模式一样。在WSDL模式中,服务实现了WSDL提供的接口;在non-WSDL模式中,参数被用来管理服务的行为。

在SoapServer类的众多方法中,有三个方法比较重要。它们是SoapServer::setClass(),SoapServer::addFunction()和SoapServer::handle()。

SoapServer::setClass()方法设定用来实现Web Service的类。SoapServer::setClass所设定的类中的所有公共方法将成为Web Services的操作(operation)。

SoapServer::addFunction()方法用来添加一个或多个作为Web Services操作(operation)的函数。

SoapServer:: handle()方法指示Web Service脚本开始处理进入的请求。Web Service脚本是用PHP脚本写的一个或多个SoapServer对象的实例。尽管你可以有不止一个的SoapServer对象,但通常的习惯是一个脚本只拥有一个SoapServer实例。在调用SoapServer::handle()方法之前,Web Service脚本会使用设置在SoapServer对象实例上的任何信息来处理进入的请求和输出的相应。


SoapFault类

这个类从Exception类继承而来,可以用来处理错误。SoapFault实例可以抛出或获取Soap错误的相关信息并按程序员的请求处理。

SoapHeader类

这个类可以用来描述SOAP headers。它只是一个只包含构造器方法的数据容器。

SoapParam类

SoapParam也是一个只包含构造器方法的数据容器。这个方法可以用来描述传递给Web services操作的参数。在non-WSDL模式中这是一个很有用的类,可以用来传递所期望格式的参数信息。

SoapVar类

SoapVar也是一个只包含构造器的低级类,与SoapHeader和SoapParam类相似。这个类可以用来给一个Web services操作传递编码参数。这个类对non-WSDL中传递类型信息是非常有用的。


WSDL VS. non-WSDL模式

Web Services有两种实现模式:契约先行(Contract first)模式和代码先行(Code first)模式。

契约先行模式使用了一个用XML定义的服务接口的WSDL文件。WSDL文件定义了服务必须实现或客户端必须使用的接口。SoapServer和SoapClient的WSDL模式就基于这个概念。

在代码先行模式中,首先要先写出实现服务的代码。然后在大多数情况下,代码会产生一个契约,换种说法,一个WSDL。接着客户端在使用服务的时候就可以使用那个WSDL来获得服务的接口。尽管如此,PHP5的扩展并没有从代码输出一个WSDL的规定,考虑到这种情况,可以在non-WSDL模式下使用 SoapServer和SoapClient。
SOAP扩展与Hello World

这一节介绍如何使用WSDL模式和non-WSDL模式来实现服务和客户端。相对而言,使用WSDL模式来实现服务和客户端会比较容易,假定已经有一个定义了接口的WSDL文件。因此这一节会先介绍如何使用WSDL模式实现一个Web Service。

在这个Hello World例子的服务中有一个被命名为greet的操作。这个操作有一个字符串形式的名字并返回一个字符串形式的greeting。所用到的WSDL如下:

xmlns:impl=\'http://wso2.org/wsf/php/helloService\'
xmlns:intf=\'http://wso2.org/wsf/php/helloService\'
xmlns:wsdl=\'http://schemas.xmlsoap.org/wsdl/\'
xmlns:wsdlsoap=\'http://schemas.xmlsoap.org/wsdl/soap/\'
xmlns:xsd=\'http://www.w3.org/2001/XMLSchema\'
targetNamespace=\'http://wso2.org/wsf/php/helloService\'>

xmlns:impl=\'http://wso2.org/wsf/php/helloService\'
xmlns:intf=\'http://wso2.org/wsf/php/helloService\'
xmlns:wsdl=\'http://schemas.xmlsoap.org/wsdl/\'
xmlns=\"http://www.w3.org/2001/XMLSchema\"
targetNamespace=\'http://wso2.org/wsf/php/helloService\' >















































WSDL模式服务

下面是WSDL模式的服务所使用的SOAP扩展API代码:

function greet($param) {
$retval = \'Hello \'.$param->name;
$result = array(\'greetReturn\' => $retval);
return $result;
}

$server = new SoapServer(\'hello.wsdl\');
$server->addFunction(\'greet\');
$server->handle();
?>

在这个服务的实现过程中,函数实现了WSDL所定义的服务操作greet,greet操作有一个WSDL指定的参数,按照greet操作的语义,这个参数是一个用户的名字。最后handle调用了触发处理请求的服务对象。


WSDL模式客户端

客户端代码如下

try {
$client = new SoapClient(\'hello.wsdl\');
$result = $client->__soapCall(\'greet\', array(array(\'name\' => \'Sam\')));
printf(\"Result = %s\", $result->greetReturn);
} catch (Exception $e) {
printf(\"Message = %s\",$e->__toString());
}
?>

客户端代码中,首先创建一个使用WSDL文件作参数的SoapClient实例。接着__soapCall()调用作为参数传入它的操作,也就是greet和传入操作的参数。
请求和响应

当你将上述的PHP脚本放在你web服务器目录下的文档中,并利用WEB浏览器或在PHP解析器的命令行调用脚本,客户端发送一个SOAP请求到服务端脚本,服务端将向客户端发送一个SOAP响应来响应客户端的请求。

下面是客户端所发送的SOAP请求:


xmlns:ns1=\"http://wso2.org/wsf/php/helloService\">


Sam




下面是服务端响应上诉请求而发送的SOAP响应:


xmlns:ns1=\"http://wso2.org/wsf/php/helloService\">


Hello Sam




上面的SOAP消息都是利用WSDL模式的服务端和客户端来获取的。也可以利用non-WSDL模式的服务端和客户端来产生与上面相同的SOAP消息。但是,PHP代码必须有一点改变。下一节会说明如何使用non-WSDL模式。

non-WSDL模式服务端

function greet($param) {
$retval = \'Hello \'.$param;
return new SoapParam($retval, \'greetReturn\');
}

$server = new SoapServer(null, array(\'uri\' => \'http://wso2.org/wsf/php/helloService\'));

$server->addFunction(\'greet\');
$server->handle();
?>

在non -WSDL模式中,想WSDL模式一样首先实现greet函数的功能,但是函数实现的方式跟WSDL模式稍稍有所不同。在non-WSDL模式中,我们必须返回一个SoapParam对象作为响应,而不是一个数组。创建服务时,第一个参数设为null,说明没有提供WSDL;接着传递一个选项作为参数,这个选项参数是服务的URI。最后像WSDL模式一样调用剩下的方法。

non-WSDL模式客户端

try {
$client = new SoapClient(null,
array(\'location\' => \'http://localhost/hello/hello_service_nonwsdl.php\',
\'uri\' => \'http://wso2.org/wsf/php/helloService\'));
$result = $client->__soapCall(\'greet\', array(new SoapParam(\'Sam\', \'name\'))); printf(\"Result = %s\", $result);
} catch (Exception $e) {
printf(\"Message = %s\",$e->__toString());
}
?>

在non-WSDL模式中,因为没有使用WSDL,传递了一个包含服务所在位置和服务URI的参数数组作为参数。然后象WSDL模式中一样调用__soapCall()方法,但是使用了SoapParam类用指定格式打包参数。返回的结果将获取greet中的响应。


结论

这篇文章介绍了SOAP扩展,可以在PHP中通过它来提供和使用Web Services。PHP扩展的强项是它的简单和快速。使用C写的SOAP扩展来运行服务端和客户端是非常简单的。虽然SOAP扩展在处理一些简单的 Web Services时很有用,但是当用它来处理所有的Web Services时就表现出它的局限性。 WSO WSF/PHP就是为了弥补PHP扩展的缺陷而开发的,它是开源的,可以实现SOAP类似的功能并且支持MTOM,WS-Addressing,WS- Security和WS-RelaiableMessaging。WSO2 WSF/PHP 支持与SOAP扩展类似的API。我们正计划将API打包起来提供跟SOAP扩展一样的API,会用C来写。

2008年10月21日星期二

常用正则表达式语法例句

常用正则表达式语法例句
这里有一些可能会遇到的正则表达式示例:


/^\\[ \\t]*$/ \"^\\[ \\t]*$\" 匹配一个空白行。

/\\d{2}-\\d{5}/ \"\\d{2}-\\d{5}\" 验证一个ID号码是否由一个2位字,一
个连字符以及一个5位数字组成。

/<(.*)>.*<\\/\\1>/ \"<(.*)>.*<\\/\\1>\" 匹配一个 HTML 标记。


下表是元字符及其在正则表达式上下文中的行为的一个完整列表:

字符 描述

\\ 将下一个字符标记为一个特殊字符、或一个原义字符、或一个 后
向引用、或一个八进制转义符。例如,’n’ 匹配字符 \"n\"。’\\n’
匹配一个换行符。序列 ’\\\\’ 匹配 \"\\\" 而 \"\\(\" 则匹配 \"(\"。

^ 匹配输入字符串的开始位置。如果设置了 RegExp 对象的
Multiline 属性,^ 也匹配 ’\\n’ 或 ’\\r’ 之后的位置。

php学习之家http://www.444p.com


$ 匹配输入字符串的结束位置。如果设置了 RegExp 对象的
Multiline 属性,$ 也匹配 ’\\n’ 或 ’\\r’ 之前的位置。

* 匹配前面的子表达式零次或多次。例如,zo* 能匹配 \"z\" 以及
\"zoo\"。 * 等价于{0,}。

+ 匹配前面的子表达式一次或多次。例如,’zo+’ 能匹配 \"zo\" 以
及 \"zoo\",但不能匹配 \"z\"。+ 等价于 {1,}。

? 匹配前面的子表达式零次或一次。例如,\"do(es)?\" 可以匹配
\"do\" 或 \"does\" 中的\"do\" 。? 等价于 {0,1}。

{n} n 是一个非负整数。匹配确定的 n 次。例如,’o{2}’ 不能匹配
\"Bob\" 中的 ’o’,但是能匹配 \"food\" 中的两个 o。

{n,} n 是一个非负整数。至少匹配n 次。例如,’o{2,}’ 不能匹配
\"Bob\" 中的 ’o’,但能匹配 \"foooood\" 中的所有 o。’o{1,}’ www.444p.com
等价于 ’o+’。’o{0,}’ 则等价于 ’o*’。

{n,m} m 和 n 均为非负整数,其中n <= m。最少匹配 n 次且最多匹
配 m 次。刘, \"o{1,3}\" 将匹配 \"fooooood\" 中的前三个o。
’o{0,1}’等价于’o?’。请注意在逗号和两个数之间不能有空格

? 当该字符紧跟在任何一个其他限制符 (*, +, ?, {n}, {n,},
{n,m}) 后面时,匹配模式是非贪婪的。非贪婪模式尽可能少的
匹配所搜索的字符串,而默认的贪婪模式则尽可能多的匹配所搜
索的字符串。例如,对于字符串 \"oooo\",’o+?’ 将匹配单个
\"o\",而 ’o+’ 将匹配所有 ’o’。

. 匹配除 \"\\n\" 之外的任何单个字符。要匹配包括 ’\\n’ 在内的任
何字符,请使用象 ’[.\\n]’ 的模式。

(pattern) 匹配pattern 并获取这一匹配。所获取的匹配可以从产生的
Matches 集合得到,在VBScript 中使用 SubMatches 集合,在 www.444p.com版权所有
Visual Basic Scripting Edition 中则使用 $0…$9 属性。要
匹配圆括号字符,请使用 ’\\(’ 或 ’\\)’。

(?:pattern) 匹配 pattern 但不获取匹配结果,也就是说这是一个非获取匹
配,不进行存储供以后使用。这在使用 \"或\" 字符 (|) 来组合
一个模式的各个部分是很有用。例如, ’industr(?:y|ies) 就
是一个比 ’industry|industries’ 更简略的表达式。

(?=pattern) 正向预查,在任何匹配 pattern 的字符串开始处匹配查找字符
串。这是一个非获取匹配,也就是说,该匹配不需要获取供以后
使用。例如,’Windows (?=95|98|NT|2000)’ 能匹配\"Windows
2000\"中的\"Windows\",但不能匹配\"Windows3 .1\"中\"Windows\"。
预查不消耗字符,也就是说,在一个匹配发生后,在最后一次匹
配之后立即开始下一次匹配的搜索,而不是从包含预查的字符之 www.444p.com
后开始。

(?!pattern) 负向预查,在任何不匹配Negative lookahead matches the
search string at any point where a string not matching
pattern 的字符串开始处匹配查找字符串。这是一个非获取匹
配,也就是说,该匹配不需要获取供以后使用。例如’Windows
(?!95|98|NT|2000)’ 能匹配 \"Windows 3.1\" 中的 \"Windows\",
但不能匹配 \"Windows 2000\" 中的 \"Windows\"。预查不消耗字
符,也就是说,在一个匹配发生后,在最后一次匹配之后立即开
始下一次匹配的搜索,而不是从包含预查的字符之后开始

x|y 匹配 x 或 y。例如,’z|food’ 能匹配 \"z\" 或 \"food\"。’(z|f)
ood’ 则匹配 \"zood\" 或 \"food\"。

[xyz] 字符集合。匹配所包含的任意一个字符。例如, ’[abc]’ 可以
匹配 \"plain\" 中的 ’a’。

[^xyz] 负值字符集合。匹配未包含的任意字符。例如, ’[^abc]’ 可以 www.444p.com
匹配 \"plain\" 中的’p’。

[a-z] 字符范围。匹配指定范围内的任意字符。例如,’[a-z]’ 可以匹
配 ’a’ 到 ’z’ 范围内的任意小写字母字符。

[^a-z] 负值字符范围。匹配任何不在指定范围内的任意字符。例如,
’[^a-z]’ 可以匹配任何不在 ’a’ 到 ’z’ 范围内的任意字符。

\\b 匹配一个单词边界,也就是指单词和空格间的位置。例如,
’er\\b’ 可以匹配\"never\" 中的 ’er’,但不能匹配 \"verb\" 中
的 ’er’。

\\B 匹配非单词边界。’er\\B’ 能匹配 \"verb\" 中的 ’er’,但不能匹
配 \"never\" 中的 ’er’。

\\cx 匹配由x指明的控制字符。例如, \\cM 匹配一个 Control-M 或
回车符。 x 的值必须为 A-Z 或 a-z 之一。否则,将 c 视为一
个原义的 ’c’ 字符。

\\d 匹配一个数字字符。等价于 [0-9]。
本文来自 www.444p.com


\\D 匹配一个非数字字符。等价于 [^0-9]。

\\f 匹配一个换页符。等价于 \\x0c 和 \\cL。

\\n 匹配一个换行符。等价于 \\x0a 和 \\cJ。

\\r 匹配一个回车符。等价于 \\x0d 和 \\cM。

\\s 匹配任何空白字符,包括空格、制表符、换页符等等。等价于
[ \\f\\n\\r\\t\\v]。

\\S 匹配任何非空白字符。等价于 [^ \\f\\n\\r\\t\\v]。

\\t 匹配一个制表符。等价于 \\x09 和 \\cI。

\\v 匹配一个垂直制表符。等价于 \\x0b 和 \\cK。

\\w 匹配包括下划线的任何单词字符。等价于’[A-Za-z0-9_]’。

\\W 匹配任何非单词字符。等价于 ’[^A-Za-z0-9_]’。

\\xn 匹配 n,其中 n 为十六进制转义值。十六进制转义值必须为确
定的两个数字长。例如, ’\\x41’ 匹配 \"A\"。’\\x041’ 则等价
于 ’\\x04’ & \"1\"。正则表达式中可以使用 ASCII 编码。.

\\num 匹配 num,其中num是一个正整数。对所获取的匹配的引用。 php学习之家http://www.444p.com
例如,’(.)\\1’ 匹配两个连续的相同字符。

\\n 标识一个八进制转义值或一个后向引用。如果 \\n 之前至少 n
个获取的子表达式,则 n 为后向引用。否则,如果 n 为八进制
数字 (0-7),则 n 为一个八进制转义值。

\\nm 标识一个八进制转义值或一个后向引用。如果 \\nm 之前至少有
is preceded by at least nm 个获取得子表达式,则 nm 为后
向引用。如果 \\nm 之前至少有 n 个获取,则 n 为一个后跟文
字 m 的后向引用。如果前面的条件都不满足,若 n 和 m 均为
八进制数字 (0-7),则 \\nm 将匹配八进制转义值 nm。

\\nml 如果 n 为八进制数字 (0-3),且 m 和 l 均为八进制数字 (0-
7),则匹配八进制转义值 nml。

\\un 匹配 n,其中 n 是一个用四个十六进制数字表示的Unicode字
符。例如, \\u00A9 匹配版权符号 (?)。

2008年10月16日星期四

文件转换器服务推荐

1、通用类:

zamzar 是一个很牛的在线转换工具,能转换100M以下的到40种格式的文件,包括图象格式、文档格式、音频格式、视频格式等,几乎囊括了我们熟知的所有文件格式,可以自由转换,功能相当不错的了,可以说是一个比较全能的工具了,而且页面简洁易用,速度也很不错!!(via)



Youconvertit 提供堪称最完美的在线文件转换服务,能在线对文档、图片、音频以及视频文件进行转换。能在41种文档格式(常用如 html,txt,ppt,doc,pdf,rtf,csv,psd,xls,xhtml,xls等)、85种图片格式(常用如 bmp,jpg,gif,tiff,ico,png等)、7种音频格式(aac、aif、aiff、mp3、ra、wav、wma)、11种视频格式 (3gp、asf、avi、flv、mov、mp4、mpeg、mpg、rm、swf、wmv)进行相互转换。实在是一项非常不错的服务。(via)



Xurrency 是在线的当前货币兑换查询工具,界面非常简单,选择币种,输入金额即可快速获得目标币种的数额。同时,底部还有一个实时的汇率表,直观的反馈一些主要币种的现时汇率。放在此类有些牵强,对一些朋友会很有用。



2、媒体类

Fivix 是一个视频转换的平台,可将YouTube、Google Video等视频网站的视频转化格式、或直接生成下载链接,用户可将视频文件根据需要随意转化为avi、mov、3gp、mp4、mp3格式,并生成下载。(详情)



Movavi 是全绿色版本,不需要你注册、下载、安装等等繁琐,任何人进入网站就能直接使用。使用大致分为三步,在一页内均能完成。允许你将本地电脑、或者网络中的视频文件进行格式的转换,生成你所喜欢的media文件。并提供了转换工具下载及博客挂件,方便你的使用。(详情)



Converttube 可将Youtube视频文件进行转换并提供下载,最近更是添加了mobile文件的支持,一共可转换为6种格式:mpg、flv、mov、mp3、3gp、mp4。



与Converttube 几乎一样,Vconvert 又是一个在线视频转换工具,可将YouTube等视频共享网站的文件转换为wmv, mov, mp4, mp3, 3gp等。



SpinVox 提供语音到短信业务,出发点是为了方便用户随时掌握自己的留言,注册为用户后,网站会自动将你的语音留言转为文本短信,并及时的发送到你的手机、邮箱或博客上,用户不用上网,而利用手机就可以收发SpinVox 信息,同任何SpinVox 用户进行通信,而且可以支持任何手机,无需下载新的软件。但是,目前针对英语、西班牙语、法语和德语用户。(详情)



Vozme 更 为简单和实用,不需要注册就能使用所有功能。这次推荐的是英文版本,你只需要在对话框内输入想要说的话(英文),点击创建mp3,在短短进分钟内立刻就能 生成mp3文件。速度还是很快的,制作完成后提供在线播放和文件下载。同时网站还提供了挂件代码,贴在博客上可随时使用。(详情)



Filsh 提供在线下载视频网站的视频文件的服务,并且还支持对文件格式的转换,能将文件转换成如下格式: .mpg .avi .mov .3gp .mp4 .flv .mp3 .ogg,同时还可以对码率以及视频尺寸进行设置。功能已经是很强大的了,而且下载及转换的速度也还比较理想,不过不支持本地文件的转换,只能转换网络上 的一些文件。(via)



Flvto 是很简单的一个在线转换器,可以将Youtube视频转变为mp3格式,或者将你本地的视频(flv格式)转变为mp3文件。根据你提供的视频文件大小需要等待不同的时间,不过速度还算可以。转换后提供下载的网址,或者可以直接发布到你的社会化网络服务上。(详情)



3、文档类

pdfonline 功能最为强大的PDF在线工具集合,很奇怪国内用户很少人用。我以前也没怎么用过,这次整理时才发现,包括了一些很实用的工具,值得慢慢挖掘。其中pdf 文件转化工具更是让我眼前一亮,也是目前我所发现支持文件格式最多的一个工具,包括MS Word (DOC | RTF) 、MS PowerPoint (PPT)、MS Publisher (PUB)、MS Excel (XLS) 、HTML (MHT)、Text (TXT) 、JPG、GIF、TIFF、BMP、PNG、EMF、WMF。



KoolWire 也是一个在线PDF转换工具,但其操作方法有所不同,用户只需把想要转换的文档发送Email到 pdf@koolwire.com 邮箱中就OK了,过一段时间就会收到转换好的PDF文件了。目前KoolWire 支持Word (.doc), Powerpoint (.ppt), Excel (.xls), Jpeg, GIF, Rich Text Format (.rtf), TXT等格式的文档,并且完全支持中文。(引自)



Readthewords 是一款全能的在线将文本(文档)转换成语音的服务,可以将文本(文档)包括HTML以及RSS/Feed转换成语音文件并提供下载。在 readthewords可以直接输入一段文字进行转换,也可以上传PDF 、Word、HTML 三种格式的文件进行转换,不仅如此,你可以直接输入web/RSS Feeds 地址,readthewords能将组成该web/RSS Feeds 的每一个网页或者blog文章转换成单独的MP3文件。提供了14种语音,分别来自14个不同性别不同年龄的阅读者。(via)



Yakitome 又一个功能强大的在线转换文本成语音(Text To Speech)的服务,支持将English,Spanish,French,German四种语言的文字以及.doc .pdf .txt .html.xml等格式的文档转换成mp3.wav格式。(via)



Pdfmenot是一个提供在线文档转换服务的网站,可以将PDF文件转换成Flash格式。你可以将网页上的PDF文件链接,或者本地的PDF文件直接上传到Pdfmenot即可进行转换。转换后的Flash格式的内容,你可以通过链接 或者Js代码将其放置在你的网站或者Blog上面进行分享。这样也就提供了一种在你网站上面分享PDF文件的方式。(via)



4、图像类

Gickr 一个在线的绿色版小工具,你可以不需注册就能直接制作精美的GIF格式图片,享受动画的快感!几乎与一些专业的gif制作软件相似,可以用任意的几张图片进行组合,达到动画的效果,甚至支持用youtube的视频直接转换成gif图片。(详情)



Make3d 很有意思的一个在线工具,你上传照片后,Make3d 可根据你照片的场景,由二维变为三维。不过你上传的图片必须是连续的一组图片,现在大多的数码相机都有360度拍摄功能。Make3d 采用了类似立体电影的技术,在视觉上给你3D的感受。



Fotowoosh 可以让你在一张2D的图片上产生3D的错觉效果,它可以通过一定的技术将你上传上去的 2D 平面图片轻松转换成 3D 的效果;该技术由全球著名的免费空间服务商Freewebs提供。(via)



Vectormagic 在线位图转矢量图工具,可帮你轻松修复边缘的锯齿,让图片边缘更圆滑。大家都知道,我们通常作的图都是点阵图,放大后会失真,边缘出现难看的锯齿,而向量图放大后边缘不变,一样的圆滑。其实,Vectormagic 也正是将你的图片转变为向量图,从而使图片的质量大大提高!(详情)



Convertico 可实现在线PNG与ICO两种图片格式的互换,无须安装任何软件,简单而实用。



Photo2Text是一个提供将图片转化成文字图片服务的网站。只需上传你想要转换的图片即可。转换的图片可以通过下载,也可以生成专有的链接来查看。(via)

2008年10月7日星期二

你可能都没有老驴强

一头老驴,掉到了一个废弃的陷阱里,很深,根本爬不上来,主人看他是老驴,懒得去救他了,让他在那里自生自灭。那头驴一开始也放弃了求生地希望。每天还不断地有人 往陷阱里面倒垃圾,按理说老驴应该很生气,应该天天去抱怨,自己倒霉掉到了陷阱里 ,他的主人不要他,就算死也不让他死得舒服点,每天还有那么多垃圾扔在他旁边。

可是有一天,他决定改变他的人生态度(驴生态度更确切点),他每天都把垃圾踩到自己 的脚下,从垃圾中找到残羹来维持自己的生命,而不是被垃圾所淹没,终于有一天,他重新回到了地面上。

不要抱怨你的专业不好,不要抱怨你的学校不好,不要抱怨你住在破宿舍里,不要抱怨你的男人穷你的女人丑,不要抱怨你没有一个好爸爸,不要抱怨你的工作差,工资少,不要抱怨你空怀一身绝技没人赏识你,现实有太多的不如意,就算生活给你的是垃圾,你同样能把垃圾踩在脚底下,登上世界之巅

这一年的国庆

国庆都过去了,借个时间写写这个国庆里发生的一些事情,顺便收藏下.毕竟这个博客里自己的东西实在是太少了,今天偶尔有点时间,加上有想写博的冲动(呵呵,有时候自己还是蛮喜欢弄弄笔墨的,但决不是什么文学愤青,仅仅爱好,当然,就凭这菜鸟水平,也写不出什么像样的东西了.只不过也不是为了充实博客而有的举动,纯粹是为了打发时间,现在才想到那些无聊的人士是拿什么在网上来干什么了.写博客确实占时间,尤其对于我们这种又想写却又写不出东西的人来说.)这个国庆还算差强人意,虽然没有什么计划中的旅行,聚会,游玩.但是因为是国庆,周围的朋友都会知道怎么营造节日的氛围.平日里的忙碌都会停滞下来.大伙都会不约而同的想怎么去打发时间.
国庆第一天,到河西的同学们那边去玩了,同学们住在岳麓山的山腰上(同学们是因为准备考研才准备移居山中,隐姓埋名的,因为同学们的身上承载的不仅仅是他们自己的抱复也是我们的希望,所以我会经常去看望他们,(那里,是我们这些毕业后还待在长沙的同学的聚点,那是因为那里可以有免费的床睡,嘻嘻.)买些好吃的结他们让他们保重好身体.(至此,我觉得我是他们的恩人哪,我个人决定他们以后的工资要分我一半).那天,我们大部分的同学都在,于是我提出一建议并倡导大家履行.就是哥们参加工作的请考研的同志们好好的补充一下营养,海吃一顿.对,我们真的去HIGH吃了一顿,没喝多少酒.接着晚上去了好望角,一个我不熟的地方.就是溜冰的地方啦.(哈哈,我是不是很俗啊?)不用你说,我有自知之明.本来不溜没关系,这一溜可勾起我学溜冰的欲望.接着几天就放肆学溜冰..
还没写完..有点不想写了,下次续吧

2008年10月6日星期一

GOOGLE搜索技巧

第一篇
在搜索框上输入: “index of/ ”  inurl:lib

再按搜索你将进入许多图书馆,并且一定能下载自己喜欢的书籍。

在搜索框上输入: “index of /”  cnki

再按搜索你就可以找到许多图书馆的CNKI、VIP、超星等入口!

在搜索框上输入: “index of /”  ppt

再按搜索你就可以突破网站入口下载powerpint作品!

在搜索框上输入: “index of /”  mp3

再按搜索你就可以突破网站入口下载mp3、rm等影视作品!

在搜索框上输入: “index of /”  swf

再按搜索你就可以突破网站入口下载flash作品!

在搜索框上输入: “index of /”  要下载的软件名

再按搜索你就可以突破网站入口下载软件!

注意引号应是英文的!

再透露一下,如果你输入:

“index of /”  AVI

另补上第二篇
用GOOgle看世界!!!只要你在GOOGLE里输入特殊的关键字,就可以搜到数千个摄象头的IP地址!通过他你就可以看到其所摄的实时影象!!
在google里输入
inurl:\"viewerframe?mode=\"

随便打开一个,然后按提示装一个插件,就可以看到了!!!

再补上第三篇
三则黑客的Google搜索技巧简介
大家都知道,Google毫无疑问是当今世界上最强大的搜索引擎。然而,在黑客手中,它也是一个秘密武器,它能搜索到一些你意想不到的信息。赛迪编者把他们进行了简单的总结不是希望您利用他去攻击别人的网站,而是利用这些技巧去在浩如烟海的网络信息中,来个大海捞针,寻找到对您有用的信息。

如果您是一名普通网民,您可以使用黑客的技巧扩大自己的视野,提高自己的检索效率;如果您是一名网管,请您赶快看看您的网站是否做好了对下面黑客探测手段的防范措施,如果没有就赶快来个亡羊补牢,毕竟隐患胜于明火,防范胜于救灾;如果您是一名黑客,相信您早以在别的黑客站点上见过类似的方法,这篇文章对您没什么用处,这里的技巧对您是小儿科,菜鸟级!您可以节省宝贵的时间做更有意义的事情,这篇文章您不用看了,到别处去吧!

基于上面的考虑我编发了这篇文章。

  搜索URL

  比如我们提交这种形式:passwd.txt site:virtualave.net

  看到了什么?是不是觉得太不可思议了!有很多基于CGI/PHP/ASP 类型的留言板存在这种问题。有时我们得到密码甚至还是明码的!管理员或许太不负责了,或许安全防范的意识太差了,如果你是网络管理员,赶快检查一下不要让恶意攻击者捡了便宜。不要太相信DES加密,即使我们的密码经过DES 加密的密码,黑客们还是可以通过许多破解软件来搞定。

  



  这次我们能得到包含密码的文件。“site:virtualave.net”意思是只搜索 virutalave.net 的URL。virutalave.net是一个网络服务器提供商。

  同样,我们可以搜索一些顶级域名,比如:.net .org .jp .in .gr

  config.txt site:.jp

  admin.txt site:.tw

  搜索首页的目录

  首页是非常有用的,它会提供给你许多有用的信息。

  我们提交如下的形式:

  \"Index of /admin\"

  \"Index of /secret\"

  \"Index of /cgi-bin\" site:.edu

  你可以自己定义搜索的首页字符。这样就可以获得许多信息。

  搜索特定的文件类型

  比如你想指定一种文件的类型,可以提交如下形式:

  filetype:.doc site:.mil classified

  这个就是搜索军方的资料,你可以自定义搜索。
再提供一个第四篇

Google 的特殊功能
1 、查询电话号码
Google 的搜索栏中最新加入了电话号码和美国街区地址的查询信息。
个人如想查找这些列表,只要填写姓名,城市和省份。
如果该信息为众人所知,你就会在搜索结果页面的最上方看到搜索的电话和街区地址
你还可以通过以下任何一种方法找到该列表:
名字(或首位大写字母),姓,电话地区号
名字(或首位大写字母),姓,邮递区号
名字(或首位大写字母),姓,城市(可写州)
名字(或首位大写字母),姓,州
电话号码,包括区号
名字,城市,州
名字,邮递区号

2 、查找 PDF 文件
现在 GOOGLE 的搜索结果中包括了 PDF 文件。尽管 PDF 文件不如 HTML 文件那么多,但他们经常具备一些其他文件不具备的高质量信息
为了显示一个搜索结果是 PDF 文件而不是网页, PDF 文件的标题开头显示蓝色文本。
这就是让你知道 ACRTOBAT READER 程序会启动来阅读文件
如果你的计算机没装有该程序,计算机会指导你去能免费下载该程序的网页。
使用 PDF 文件时,相关的网页快照会由“ TEXT VERSION ”代替,它是 PDF 文档的复制文件,该文件除去了所有格式化命令。
如果你在没有 PDF 链接的情况下想看一系列搜索结果,只要在搜索栏中打上 -inurldf 加上你的搜索条件。

3 、股票报价
用 Google 查找股票和共有基金信息,只要输入一个或多个 NYSE , NASDAQ , AMEX 或
共有基金的股票行情自动收录机的代码,也可以输入在股市开户的公司名字。
如果 Google 识别出你查询的是股票或者共有基金,它回复的链接会直接连到高质量的金融信息提供者提供的股票和共有基金信息。
在你搜索结果的开头显示的是你查询的股市行情自动收录器的代码。如果你要查找一家公司的名字(比如, INTEL ),请查看“股票报价”在 Google 搜索结果的金融栏里会有那个公司的主页的链接(比如, WWW.INTEL.COM )。
Google 是以质量为基础来选择和决定金融信息提供者的,包括的因素有下载速度,用户界面及其功能。

4 、找找谁和你链接
有些单词如果带有冒号就会有特殊的意思。比如 link :操作员。查询 link:siteURL ,就会显示所有指向那个 URL 的网页。举例来说,链接 www.Google.com 会向你显示所有指向 GOOGLE 主页的网页。但这种方法不能与关键字查询联合使用。

5 、查找站点
单词 site 后面如果接上冒号就能够将你的搜索限定到某个网站。具体做法是:在 c 搜索栏中使用 site:sampledomain.com 这个语法结构。比如,在斯坦福找申请信息,输入:
admission site:www.stanford.edu

6 、查找字典释意
查找字典释意的方法是在搜索栏中输入你要查询的内容。在我们根据要求找到所有的字典释意都会标有下划线,位于搜索结果的上面,点击链接你会找到字典提供者根据要求给出的相关定义。 7 、用 GOOLGE 查找地图
想用 Google 查找街区地图,在 Google 搜索栏中输入美国街区地址,包括邮递区号或城市 / 州(比如 165 大学大街 PALO ALTO CA )。通常情况下,街区地址和城市的名字就足够了。
当 Google 识别你的要求是查找地图,它会反馈给你有高质量地图提供者提供的链接,使你直接找到相关地图。我们是以质量为基础选择这些地图提供者。值得注意的是 Google 和使用的地图信息提供者没有任何关联。

jquery-上下滚动新闻

jquery-上下动态滚动新闻并动态显示内容

jquery

$(function(){

$(\"#noticemove\").Scroll({line:1,speed:500,timer:3000,up:\"forword\",down:\"back\"});

}

(function($){
$.fn.extend({
Scroll:function(opt,callback){
if(!opt) var opt={};
var _btnUp = $(\"#\"+ opt.up);
var _btnDown = $(\"#\"+ opt.down);
var timerID;
var _this=this.eq(0).find(\"ul:first\");
var lineH=_this.find(\"li:first\").height(),
line=opt.line?parseInt(opt.line,10):parseInt(this.height()/lineH,10),
speed=opt.speed?parseInt(opt.speed,10):500;
timer=opt.timer
if(line==0) line=1;
var upHeight=0-line*lineH;
var scrollUp=function(){
_btnUp.unbind(\"click\",scrollUp);
_this.animate({
marginTop:upHeight
},speed,function(){
for(i=1;i<=line;i++){
_this.find(\"li:first\").appendTo(_this);
}
_this.css({marginTop:0});
_btnUp.bind(\"click\",scrollUp);
});

}
var scrollDown=function(){
_btnDown.unbind(\"click\",scrollDown);
for(i=1;i<=line;i++){
_this.find(\"li:last\").show().prependTo(_this);
}
_this.css({marginTop:upHeight});
_this.animate({
marginTop:0
},speed,function(){
_btnDown.bind(\"click\",scrollDown);
});
}
var autoPlay = function(){
if(timer)timerID = window.setInterval(scrollUp,timer);
};
var autoStop = function(){
if(timer)window.clearInterval(timerID);
};
_this.hover(autoStop,autoPlay).mouseout();
_btnUp.css(\"cursor\",\"pointer\").click( scrollUp ).hover(autoStop,autoPlay);
_btnDown.css(\"cursor\",\"pointer\").click( scrollDown ).hover(autoStop,autoPlay);

}
})
})(jQuery);

html





向前  向后

2008年10月5日星期日

超链接打开目标(target)

链接的target属性决定了链接在哪边打开,它的值通常为以下五种:_blank、_self、_parent、_top和自定义,依次表示为:新窗口、当前窗口、父窗口、顶层窗口和框架。当所指名称的框架不存在时,自定义作用等同于_blank。
当要打开一个链接时,先在本页面中搜索指定名称(target)的框架,找不到则在下层页面中搜索,还找不到就到上层页面中搜索,都找不到打开一个新的窗口!