lnux php 扩展库编译——添加cURL模块

在Wordpress中启用插件Flickr Photo Album for WordPress时,需要系统支持cURL。
大多数资料里都是比较简单的方法,即在编译php时加上cURL支持
但由于我的系统里已经安装有php,并且有一些其他配置,重新安装太麻烦
于是找到了这篇《linux php 扩展库编译》,验证通过,转载以记录一下
以php curl 扩展库编译为例。

假如原先编译的php目录在/oracle/php4目录下;apache在/oracle/apache2目录下;php源代码在/home/wugw目录下。如果实际目录与假定的目录不一致,则在下面的命令中做调整。

1. 找到当前运行的php版本的源代码目录,如 php-4.4.7。进入curl扩展库目录。
$cd /home/wugw/php-4.4.7/ext/curl

2. 调用phpize程序生成编译配置文件。
$/oracle/php4/bin/phpize

3. 编译扩展库,分别执行下面的configure和make命令。
$./configure –with-php-config=/oracle/php4/bin/php-config

##configure这一步执行通过后,再执行make命令,如果configure执行不通过,则查找错误原因。
$make

##make成功执行后,生成的扩展库文件在当前目录的 modules 子目录下,如 /home/wugw/php-4.4.7/ext/curl/modules/curl.so

4. 配置php.ini文件
##将编译好的扩展库文件复制到apache2 modules目录下。
$cp /home/wugw/php-4.4.7/ext/curl/modules/curl.so /oracle/apache2/modules/.

##找到php.ini文件所在目录位置,然后编辑。可以通过查看phpinfo信息来确定php.ini文件位置。
##在php.ini文件中找到设置扩展目录的位置,然后将扩展路径设置到apache2 modules目录下
extension_dir = “/oracle/apache2/modules/”

##在php.ini的设置扩展库位置,设置要添加的扩展库。
extension=curl.so

##以后如果还要添加别的扩展库的话,则只需先将php扩展库编译好,然后copy到apache2 modules目录下,
##然后再在这个位置,另取一行将编译后的扩展库文件名加上即可

5. 重启apache,查看phpinfo信息,即可看到刚才添加进去的curl扩展库。

[转]用shtml来include网页文件

在网站构建过中。当我们遇到很多的内容为静态页面,而页首与页脚又经常要更换时,如果一直使用html文件总会有很多的麻烦。因为批量修改起来很不方面,所以我们总希望能将页脚与页尾include到html文件中来。html属于客户端解析形的格式化语言,自4.0后几乎很难再有大的变动(毕竟很多浏览器只按4.0标准来解析),所以至今也没include这样的概念。而html的框架(frame与iframe)虽然可以用来包含首页与页脚文件,但使用frame与iframe的概念与动态页面(asp,jsp,php等)的include那样不同,frame与iframe的主体页面与被包括的页的不是一个页面,而通过include的方式调用的页面主体页面与被包括的页面仍然是一个页面,这样页面再加载的时就没速度的影响,更不会有多个窗口这样的问题。当然frame与iframe的作用还是挺大的,只是这与include这样包括页面进来的概念不同。

除frame与iframe之外,常用的调用文件的方法还有采用js。这与include概念倒是很接近,但可以需要客户端js的支持,而且修改也不很方面,因为被包括的js是通过document.write来输出html代码,这样虽然能达到效果,可js毕竟执行客户端动态效果更好,比如现在较流行的AJAX。所以无论是frame/iframe还是js都与include不太一样(倒是Dreamweaver中的library与 include很像,可惜只能用在Dreamweaver中),而我们有时页面有很多静态页面,内容不是动态的且没有规律可循,更不好做到数据库里去。如新浪的新闻之类的,这时我们可以采用shtml的方式来做这些页面。–JarryLi in BeiJing

那什么是shtml呢?
  使用SSI(Server Side Include)的html文件扩展名,SSI(Server Side Include),通常称为”服务器端嵌入”或者叫”服务器端包含”,是一种类似于ASP的基于服务器的网页制作技术。默认扩展名是 .stm、.shtm 和 .shtml。
什么是SSI?
SSI是英文Server Side Includes的缩写,翻译成中文就是服务器端包含的意思。从技术角度上说,SSI就是在HTML文件中,可以通过注释行调用的命令或指针。SSI具有强大的功能,只要使用一条简单的SSI命令就可以实现整个网站的内容更新,时间和日期的动态显示,以及执行shell和CGI脚本程序等复杂的功能。网站维护常常碰到的一个问题是,网站的结构已经固定,却为了更新一点内容而不得不重做一大批网页。SSI提供了一种简单、有效的方法来解决这一问题,它将一个网站的基本结构放在几个简单的HTML文件中(模板),以后我们要做的只是将文本传到服务器,让程序按照模板自动生成网页,从而使管理大型网站变得容易。
如何使你的Apache服务器支持SSI?
Apache(如何在windows以及linuc下安装apache请参见另两篇文章)默认是不支持SSI的,需要我们更改httpd.conf来进行配置。我这里以windows平台的Apache 2.0.x为例(在linux平台下与之相同),打开conf目录下的httpd.conf文件,搜索“AddType text/html .shtml”,找到:

# AddType text/html .shtml
# AddOutputFilter INCLUDES .shtml

把这两行前面的#去掉 。

然后搜索“Options Indexes FollowSymLinks”
在搜索到的那一行后面添加“ Includes”
即将该行改变为 Options Indexes FollowSymLinks Includes

熟悉apache manual的可能会觉得比较容易。
保存httpd.conf,重起apache即可
到此我们就完成了对Apache SSI的设置。
如何让你的IIS服务器支持SSI
windows 2000:
IIS里添加一个应用程序扩展名映射
可执行文件:C:\WINDOWS\system32\inetsrv\ssinc.dll
扩展名:shtml/shtm
windows 2003 2003默认已经支持SSI(shtml文件),只需在IIS的”Web服务扩展”里设置”在服务器端的包含文件”为”允许” 即可IIS6.0对于SSI进行了一些改进,以前IIS5.0的一些程序迁移过后可能无法运用。
一个经常的出现问题是出现如下错误:
“处理 SSI 文件时出错 - Error processing SSI file”

经过测试,以下做法会导致这个错误:
1、服务器物理路径使用中文名。
2、包含文件中使用中文名。
3、包含文件不存在。
4、被包含的文件再次包含使用中文名的文件。

该错误在Unicode编码时依旧,属于IIS的问题。
解决方法:对于使用SSI的站点物理和URL地址都全部使用英文。
shtml文件测试?
主体文件,比如命名为test.shtml,内容为(把head.html与foot.html文件包进来,与asp,jsp,php中的include相同)



你好,这是中间的内容

页首文件,比如命名为head.html,内容为


我是页首导航栏的公共信息

页尾文件,比如命名为foot.html,内容为

我是页尾版权信息

然后运行web server,在地址栏中打开test.shtml文件,就会得到一个完整的页面,包括头与尾文件。
shtml中简单的SSI命令
SSI具有强大的功能,只要使用一条简单的SSI命令就可以实现整个网站的内容更新,时间和日期的动态显示,以及执行shell和CGI脚本程序等复杂的功能。比如我们修改上面提及的test.shtml文件,加入以下代码,将会显示服务器日期以及客户端IP等:

本文档名称:

时区:

你的IP地址是:

今天是:

SSI指令基本格式:
程序代码:


说明:
1.是HTML语法中表示注释,当WEB服务器不支持SSI时,会忽略这些信息。
2.#i nclude 为SSI指令之一。
3.file 为include的参数, info.htm为参数值,在本指令中指将要包含的文档名。
注意:
1. 2.上面的标点=”",一个也不能少。
3.SSI指令是大小写敏感的,因此参数必须是小写才会起作用。
详细可以查看SHTML详细教程 ,通过SHTML可以减轻许多工作负担哦。
另外:shtml文件在网页服务器下运行才有效,直接用ie打开将被当作是文本文件。
本文转自建站学 http://www.jzxue.com ,转载请注明出处。

获得zend ,gd库的版本

echo $zend_version;

print_r(gd_info());

设计模式-

创建型模式

1、FACTORY—追MM少不了请吃饭了,麦当劳的鸡翅和肯德基的鸡翅都是MM爱吃的东西,虽然口味有所不同,但不管你带MM去麦当劳或肯德基,只管向服务员说“来四个鸡翅”就行了。麦当劳和肯德基就是生产鸡翅的Factory

工厂模式:客户类和工厂类分开。消费者任何时候需要某种产品,只需向工厂请求即可。消费者无须修改就可以接纳新产品。缺点是当产品修改时,工厂类也要做相应的修改。如:如何创建及如何向客户端提供。

2、BUILDER—MM最爱听的就是“我爱你”这句话了,见到不同地方的MM,要能够用她们的方言跟她说这句话哦,我有一个多种语言翻译机,上面每种语言都有一个按键,见到MM我只要按对应的键,它就能够用相应的语言说出“我爱你”这句话了,国外的MM也可以轻松搞掂,这就是我的“我爱你” builder。(这一定比美军在伊拉克用的翻译机好卖)

建造模式:将产品的内部表象和产品的生成过程分割开来,从而使一个建造过程生成具有不同的内部表象的产品对象。建造模式使得产品内部表象可以独立的变化,客户不必知道产品内部组成的细节。建造模式可以强制实行一种分步骤进行的建造过程。

3、FACTORY METHOD—请MM去麦当劳吃汉堡,不同的MM有不同的口味,要每个都记住是一件烦人的事情,我一般采用Factory Method模式,带着MM到服务员那儿,说“要一个汉堡”,具体要什么样的汉堡呢,让MM直接跟服务员说就行了。

工厂方法模式:核心工厂类不再负责所有产品的创建,而是将具体创建的工作交给子类去做,成为一个抽象工厂角色,仅负责给出具体工厂类必须实现的接口,而不接触哪一个产品类应当被实例化这种细节。

4、PROTOTYPE—跟MM用QQ聊天,一定要说些深情的话语了,我搜集了好多肉麻的情话,需要时只要copy出来放到QQ里面就行了,这就是我的情话prototype了。(100块钱一份,你要不要)

原始模型模式:通过给出一个原型对象来指明所要创建的对象的类型,然后用复制这个原型对象的方法创建出更多同类型的对象。原始模型模式允许动态的增加或减少产品类,产品类不需要非得有任何事先确定的等级结构,原始模型模式适用于任何的等级结构。缺点是每一个类都必须配备一个克隆方法。

5、SINGLETON—俺有6个漂亮的老婆,她们的老公都是我,我就是我们家里的老公Sigleton,她们只要说道“老公”,都是指的同一个人,那就是我(刚才做了个梦啦,哪有这么好的事)

单例模式:单例模式确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例单例模式。单例模式只应在有真正的“单一实例”的需求时才可使用。

结构型模式

6、ADAPTER—在朋友聚会上碰到了一个美女Sarah,从香港来的,可我不会说粤语,她不会说普通话,只好求助于我的朋友kent了,他作为我和Sarah之间的Adapter,让我和Sarah可以相互交谈了(也不知道他会不会耍我)

适配器(变压器)模式:把一个类的接口变换成客户端所期待的另一种接口,从而使原本因接口原因不匹配而无法一起工作的两个类能够一起工作。适配类可以根据参数返还一个合适的实例给客户端。

7、BRIDGE—早上碰到MM,要说早上好,晚上碰到MM,要说晚上好;碰到MM穿了件新衣服,要说你的衣服好漂亮哦,碰到MM新做的发型,要说你的头发好漂亮哦。不要问我“早上碰到MM新做了个发型怎么说”这种问题,自己用BRIDGE组合一下不就行了

桥梁模式:将抽象化与实现化脱耦,使得二者可以独立的变化,也就是说将他们之间的强关联变成弱关联,也就是指在一个软件系统的抽象化和实现化之间使用组合/聚合关系而不是继承关系,从而使两者可以独立的变化。

8、COMPOSITE—Mary今天过生日。“我过生日,你要送我一件礼物。”“嗯,好吧,去商店,你自己挑。”“这件T恤挺漂亮,买,这条裙子好看,买,这个包也不错,买。”“喂,买了三件了呀,我只答应送一件礼物的哦。”“什么呀,T恤加裙子加包包,正好配成一套呀,小姐,麻烦你包起来。” “……”,MM都会用Composite模式了,你会了没有?

合成模式:合成模式将对象组织到树结构中,可以用来描述整体与部分的关系。合成模式就是一个处理对象的树结构的模式。合成模式把部分与整体的关系用树结构表示出来。合成模式使得客户端把一个个单独的成分对象和由他们复合而成的合成对象同等看待。

9、DECORATOR—Mary过完轮到Sarly过生日,还是不要叫她自己挑了,不然这个月伙食费肯定玩完,拿出我去年在华山顶上照的照片,在背面写上“最好的的礼物,就是爱你的Fita”,再到街上礼品店买了个像框(卖礼品的MM也很漂亮哦),再找隔壁搞美术设计的Mike设计了一个漂亮的盒子装起来……,我们都是Decorator,最终都在修饰我这个人呀,怎么样,看懂了吗?

装饰模式:装饰模式以对客户端透明的方式扩展对象的功能,是继承关系的一个替代方案,提供比继承更多的灵活性。动态给一个对象增加功能,这些功能可以再动态的撤消。增加由一些基本功能的排列组合而产生的非常大量的功能。

10、FACADE—我有一个专业的Nikon相机,我就喜欢自己手动调光圈、快门,这样照出来的照片才专业,但MM可不懂这些,教了半天也不会。幸好相机有Facade设计模式,把相机调整到自动档,只要对准目标按快门就行了,一切由相机自动调整,这样MM也可以用这个相机给我拍张照片了。

门面模式:外部与一个子系统的通信必须通过一个统一的门面对象进行。门面模式提供一个高层次的接口,使得子系统更易于使用。每一个子系统只有一个门面类,而且此门面类只有一个实例,也就是说它是一个单例模式。但整个系统可以有多个门面类。

11、FLYWEIGHT—每天跟MM发短信,手指都累死了,最近买了个新手机,可以把一些常用的句子存在手机里,要用的时候,直接拿出来,在前面加上MM的名字就可以发送了,再不用一个字一个字敲了。共享的句子就是Flyweight,MM的名字就是提取出来的外部特征,根据上下文情况使用。

享元模式:FLYWEIGHT在拳击比赛中指最轻量级。享元模式以共享的方式高效的支持大量的细粒度对象。享元模式能做到共享的关键是区分内蕴状态和外蕴状态。内蕴状态存储在享元内部,不会随环境的改变而有所不同。外蕴状态是随环境的改变而改变的。外蕴状态不能影响内蕴状态,它们是相互独立的。将可以共享的状态和不可以共享的状态从常规类中区分开来,将不可以共享的状态从类里剔除出去。客户端不可以直接创建被共享的对象,而应当使用一个工厂对象负责创建被共享的对象。享元模式大幅度的降低内存中对象的数量。

12、PROXY—跟MM在网上聊天,一开头总是“hi,你好”,“你从哪儿来呀?”“你多大了?”“身高多少呀?”这些话,真烦人,写个程序做为我的Proxy吧,凡是接收到这些话都设置好了自动的回答,接收到其他的话时再通知我回答,怎么样,酷吧。

代理模式:代理模式给某一个对象提供一个代理对象,并由代理对象控制对源对象的引用。代理就是一个人或一个机构代表另一个人或者一个机构采取行动。某些情况下,客户不想或者不能够直接引用一个对象,代理对象可以在客户和目标对象直接起到中介的作用。客户端分辨不出代理主题对象与真实主题对象。代理模式可以并不知道真正的被代理对象,而仅仅持有一个被代理对象的接口,这时候代理对象不能够创建被代理对象,被代理对象必须有系统的其他角色代为创建并传入。

行为模式

13、CHAIN OF RESPONSIBLEITY—晚上去上英语课,为了好开溜坐到了最后一排,哇,前面坐了好几个漂亮的MM哎,找张纸条,写上“Hi,可以做我的女朋友吗?如果不愿意请向前传”,纸条就一个接一个的传上去了,糟糕,传到第一排的MM把纸条传给老师了,听说是个老处女呀,快跑!

责任链模式:在责任链模式中,很多对象由每一个对象对其下家的引用而接

起来形成一条链。请求在这个链上传递,直到链上的某一个对象决定处理此请求。客户并不知道链上的哪一个对象最终处理这个请求,系统可以在不影响客户端的情况下动态的重新组织链和分配责任。处理者有两个选择:承担责任或者把责任推给下家。一个请求可以最终不被任何接收端对象所接受。

14、COMMAND—俺有一个MM家里管得特别严,没法见面,只好借助于她弟弟在我们俩之间传送信息,她对我有什么指示,就写一张纸条让她弟弟带给我。这不,她弟弟又传送过来一个COMMAND,为了感谢他,我请他吃了碗杂酱面,哪知道他说:“我同时给我姐姐三个男朋友送COMMAND,就数你最小气,才请我吃面。”,:-(

命令模式:命令模式把一个请求或者操作封装到一个对象中。命令模式把发出命令的责任和执行命令的责任分割开,委派给不同的对象。命令模式允许请求的一方和发送的一方独立开来,使得请求的一方不必知道接收请求的一方的接口,更不必知道请求是怎么被接收,以及操作是否执行,何时被执行以及是怎么被执行的。系统支持命令的撤消。

15、INTERPRETER—俺有一个《泡MM真经》,上面有各种泡MM的攻略,比如说去吃西餐的步骤、去看电影的方法等等,跟MM约会时,只要做一个Interpreter,照着上面的脚本执行就可以了。

解释器模式:给定一个语言后,解释器模式可以定义出其文法的一种表示,并同时提供一个解释器。客户端可以使用这个解释器来解释这个语言中的句子。解释器模式将描述怎样在有了一个简单的文法后,使用模式设计解释这些语句。在解释器模式里面提到的语言是指任何解释器对象能够解释的任何组合。在解释器模式中需要定义一个代表文法的命令类的等级结构,也就是一系列的组合规则。每一个命令对象都有一个解释方法,代表对命令对象的解释。命令对象的等级结构中的对象的任何排列组合都是一个语言。

16、ITERATOR—我爱上了Mary,不顾一切的向她求婚。

Mary:“想要我跟你结婚,得答应我的条件”

我:“什么条件我都答应,你说吧”

Mary:“我看上了那个一克拉的钻石”

我:“我买,我买,还有吗?”

Mary:“我看上了湖边的那栋别墅”

我:“我买,我买,还有吗?”

Mary:“你的小弟弟必须要有50cm长”

我脑袋嗡的一声,坐在椅子上,一咬牙:“我剪,我剪,还有吗?”

……

迭代子模式:迭代子模式可以顺序访问一个聚集中的元素而不必暴露聚集的内部表象。多个对象聚在一起形成的总体称之为聚集,聚集对象是能够包容一组对象的容器对象。迭代子模式将迭代逻辑封装到一个独立的子对象中,从而与聚集本身隔开。迭代子模式简化了聚集的界面。每一个聚集对象都可以有一个或一个以上的迭代子对象,每一个迭代子的迭代状态可以是彼此独立的。迭代算法可以独立于聚集角色变化。

17、MEDIATOR—四个MM打麻将,相互之间谁应该给谁多少钱算不清楚了,幸亏当时我在旁边,按照各自的筹码数算钱,赚了钱的从我这里拿,赔了钱的也付给我,一切就OK啦,俺得到了四个MM的电话。

调停者模式:调停者模式包装了一系列对象相互作用的方式,使得这些对象不必相互明显作用。从而使他们可以松散偶合。当某些对象之间的作用发生改变时,不会立即影响其他的一些对象之间的作用。保证这些作用可以彼此独立的变化。调停者模式将多对多的相互作用转化为一对多的相互作用。调停者模式将对象的行为和协作抽象化,把对象在小尺度的行为上与其他对象的相互作用分开处理。

18、MEMENTO—同时跟几个MM聊天时,一定要记清楚刚才跟MM说了些什么话,不然MM发现了会不高兴的哦,幸亏我有个备忘录,刚才与哪个MM说了什么话我都拷贝一份放到备忘录里面保存,这样可以随时察看以前的记录啦。

备忘录模式:备忘录对象是一个用来存储另外一个对象内部状态的快照的对象。备忘录模式的用意是在不破坏封装的条件下,将一个对象的状态捉住,并外部化,存储起来,从而可以在将来合适的时候把这个对象还原到存储起来的状态。

19、OBSERVER—想知道咱们公司最新MM情报吗?加入公司的MM情报邮件组就行了,tom负责搜集情报,他发现的新情报不用一个一个通知我们,直接发布给邮件组,我们作为订阅者(观察者)就可以及时收到情报啦

观察者模式:观察者模式定义了一种一队多的依赖关系,让多个观察者对象同时监听某一个主题对象。这个主题对象在状态上发生变化时,会通知所有观察者对象,使他们能够自动更新自己。

20、STATE—跟MM交往时,一定要注意她的状态哦,在不同的状态时她的行为会有不同,比如你约她今天晚上去看电影,对你没兴趣的MM就会说 “有事情啦”,对你不讨厌但还没喜欢上的MM就会说“好啊,不过可以带上我同事么?”,已经喜欢上你的MM就会说“几点钟?看完电影再去泡吧怎么样?”,当然你看电影过程中表现良好的话,也可以把MM的状态从不讨厌不喜欢变成喜欢哦。

状态模式:状态模式允许一个对象在其内部状态改变的时候改变行为。这个对象看上去象是改变了它的类一样。状态模式把所研究的对象的行为包装在不同的状态对象里,每一个状态对象都属于一个抽象状态类的一个子类。状态模式的意图是让一个对象在其内部状态改变的时候,其行为也随之改变。状态模式需要对每一个系统可能取得的状态创立一个状态类的子类。当系统的状态变化时,系统便改变所选的子类。

21、STRATEGY—跟不同类型的MM约会,要用不同的策略,有的请电影比较好,有的则去吃小吃效果不错,有的去海边浪漫最合适,单目的都是为了得到MM的芳心,我的追MM锦囊中有好多Strategy哦。

策略模式:策略模式针对一组算法,将每一个算法封装到具有共同接口的独立的类中,从而使得它们可以相互替换。策略模式使得算法可以在不影响到客户端的情况下发生变化。策略模式把行为和环境分开。环境类负责维持和查询行为类,各种算法在具体的策略类中提供。由于算法和环境独立开来,算法的增减,修改都不会影响到环境和客户端。

22、TEMPLATE METHOD——看过《如何说服女生上床》这部经典文章吗?女生从认识到上床的不变的步骤分为巧遇、打破僵局、展开追求、接吻、前戏、动手、爱抚、进去八大步骤(Template method),但每个步骤针对不同的情况,都有不一样的做法,这就要看你随机应变啦(具体实现);

模板方法模式:模板方法模式准备一个抽象类,将部分逻辑以具体方法以及具体构造子的形式实现,然后声明一些抽象方法来迫使子类实现剩余的逻辑。不同的子类可以以不同的方式实现这些抽象方法,从而对剩余的逻辑有不同的实现。先制定一个顶级逻辑框架,而将逻辑的细节留给具体的子类去实现。

23、VISITOR—情人节到了,要给每个MM送一束鲜花和一张卡片,可是每个MM送的花都要针对她个人的特点,每张卡片也要根据个人的特点来挑,我一个人哪搞得清楚,还是找花店老板和礼品店老板做一下Visitor,让花店老板根据MM的特点选一束花,让礼品店老板也根据每个人特点选一张卡,这样就轻松多了;

访问者模式:访问者模式的目的是封装一些施加于某种数据结构元素之上的操作。一旦这些操作需要修改的话,接受这个操作的数据结构可以保持不变。访问者模式适用于数据结构相对未定的系统,它把数据结构和作用于结构上的操作之间的耦合解脱开,使得操作集合可以相对自由的演化。访问者模式使得增加新的操作变的很容易,就是增加一个新的访问者类。访问者模式将有关的行为集中到一个访问者对象中,而不是分散到一个个的节点类中。当使用访问者模式时,要将尽可能多的对象浏览逻辑放在访问者类中,而不是放到它的子类中。访问者模式可以跨过几个类的等级结构访问属于不同的等级结构的成员类。

10 things you (probably) didn’t know about PHP

看到有人翻译的《10 things you (probably) didn’t know about PHP》,发现在此次之前2、8两条并不知道,1、3虽然熟知但是去没有实际应用。

由于阅读本blog的绝大多数朋友都是有PHP基础的,所以决定转载过来给大家看看。

1.使用 ip2long() 和 long2ip() 函数来把 IP 地址转化成整型存储到数据库里。这种方法把存储空间降到了接近四分之一(char(15) 的 15 个字节对整形的 4 个字节),计算一个特定的地址是不是在一个区段内页更简单了,而且加快了搜索和排序的速度(虽然有时仅仅是快了一点)。

2.在验证 email 地址的时候使用 checkdnsrr() 函数验证域名是否存在。这个内置函数能够确认指定的域名能够解析成 IP 地址。该函数的PHP 文档的用户评论部分有一个简单的用户自定义函数,这个函数基于 checkdnsrr(),用来验证 email 地址的合法性。对于那些认为自己的 email 地址是 “joeuser@wwwphp.net” 而不是 “joeuser@php.net” 的家伙们,这个方法可以很方便的抓住他们。

3.如果你使用的是 PHP 5 和 MySQL 4.1 或者更高的版本,考虑抛弃 mysql_* 系列函数改用改进版的 mysqli_* 系列函数。一个很好的功能就是你可以使用预处理语句,如果你在维护一个数据库密集型站点,这个功能能够加快查询速度。一些评估分数。

4.学会爱上三元运算符。

5.如果你在项目中感觉到有可复用的部分,在你写下一行代码前先看看 PEAR 中是否已经有了。很多 PHP 程序员都知道 PEAR 是一个很好的资源库,虽然还有很多程序员不知道。这个在线资源库包含了超过 400 个可以复用的程序片段,这些程序片段你可以立即用刀你的程序里。除非说你的项目真的是非常特别的,你总能找到帮你节省时间的 PEAR 包。(参见 PECL)

6.用 highlight_file() 来自动的打印出格式化的很漂亮的源代码。如果你在留言板、IRC 这些地方寻求一个脚本的帮助的话,这个函数用起来非常的顺手。当然了,要小心不要意外的泄露出你的数据库连接信息和密码等。

7.使用 error_reporting(0) 函数来防止用户看到潜在的敏感错误信息。]在理想情况下,发布服务器应该在 php.ini 里完全禁止。但是如果你用的是一个共享的 web 服务器的话,你没有自己的 php.ini 文件,那么这种情况下你最好的选择就是在所有脚本的第一行前加上 error_reporting(0);(或者使用 require_once() 方法)。这就能够在出错的时候完全屏蔽敏感的 SQL 查询语句和路径名。

8.在网数据库中存储很大的字符串之前使用 gzcompress() 和 gzuncompress() 来显式的压缩/解压字符串。这个 PHP 内置函数使用 gzip 算法,可以压缩普通文本达 90%。在我每次要读写 BLOB 类型的字段的时候都使用这些函数。唯一额例外就是当我需要全文检索的时候。

9.通过“引用”传递参数的方法从一个函数中得到多个返回值。就像三元运算符一样,大部分受过正式编程训练的程序员都知道这个技巧。但是那些 HTML 背景大于 Pascal 背景的程序员都或多或少的有过这样的疑问“在仅能使用一次 return 的情况下,从一个函数里返回多个值?”答案就是在变量前加上一个 “&” 符号,通过“引用”传递而非“值”传递。

10.完全理解“魔术引号”和 SQL 注入的危险性。我希望阅读到这里的开发者都已经很对 SQL 注入和了解了。不过我还是把这条列在这里,是因为这个确实有点难以理解。如果你还没有听说过这种说法,那么把今天剩下的时间都用来 Google、阅读吧。

left jion使用详解

用到的数据库表:
mysql> select * from tt;
+——+——+
| id | name |
+——+——+
| 1 | a |
| 2 | b |
| 3 | c |
+——+——+

mysql> select * from tt1;
+——+——+
| id | name |
+——+——+
| 1 | a |
| 2 | b |
| 3 | c |
+——+——+

操作一:
select * from tt left join tt1 on tt.id=tt1.id –提取id相等的

id name id name
————————–
1 a 1 a
2 b 2 b
3 c 3 c

操作二:
select * from tt left join tt1 on tt.id=tt1.id where tt.id=1
–用的是where,可以看出用where 和 and 的区别了:)

id name id name
————————–
1 a 1 a

操作三:
select * from tt left join tt1 on tt.id=tt1.id and tt.id=1
–用的是and,且是主表tt.id=1

id name id name
————————–
1 a 1 a
2 b NULL NULL
3 c NULL NULL

操作四:这个返回跟上面一样的结果
select * from tt left join tt1 on tt.id=tt1.id and tt1.id=1
–用的是and,且是从表tt1.id=1

id name id name
————————–
1 a 1 a
2 b NULL NULL
3 c NULL NULL

操作五:
select * from tt left join tt1 on tt.id=1 –关键是去掉了id相等这个条件

id name id name
————————–
1 a 1 a
1 a 2 b
1 a 3 c
2 b NULL NULL
3 c NULL NULL

很多人不了解,其实left join 嘛, 无非是左边表为基础, 扫描右边表匹配的记录

先是左边表的第1条记录
1 a
按条件 tt.id=1, 来扫描右边表的记录
对于右边表的每条记录, 显然 tt.id=1 这个条件都是成立的, 所以第1条记录匹配后的结果是:

1 a 1 a
1 a 2 b
1 a 3 c

———————————————
然后再扫描第2条记录
2 b
对于条件 tt.id=1, 在表中没有与之匹配的记录, 所以右边表为NULL
因此第2条记录匹配的结果为
2 b NULL NULL

———————————————-
第3条记录与第2条记录一样, 匹配的结果是
3 c NULL NULL

—————————————
因此最终结果是5条记录
1 a 1 a
1 a 2 b
1 a 3 c
2 b null null
3 c null null

操作六:
select * from tt left join tt1 on tt1.id=1 –是从表tt1.id=1

id name id name
————————–
1 a 1 a
2 b 1 a
3 c 1 a

–解释:上面的结果是这样取的,先取主表1 a,再扫描从表tt1,正好
其第一条数据id=1,满足条件,所以输出:
1 a 1 a
然后再是从表tt1第二条数据 2 b,id!=1,不输出,同理3 c也不满足条件,
再主表 2 b,联立从表第一条数据1 a,满足条件,输出,
以后依次类推……………

–最主要的就是在连接里的 and 和 where 是有本质区别。
1.
select * from a left join b on a.id=b.id where a.id=1
2.
select * from a left join b on a.id=b.id and a.id=1

where里的条件是对连接后的结果集进行筛选,而on里的条件是关联时进行比较用的

–再看一下更加详细的解释:
1、首先列出笛卡尔乘积
1 a 1 a
1 a 2 b
1 a 3 c
2 b 1 a
2 b 2 b
2 b 3 c
3 c 1 a
3 c 2 b
3 c 3 c

2、对每个左边的纪录,看有没有符合on条件的,如果有,保留符合条件的,去掉不符合条件的,如果没有,
保留左边和右边是null的一条纪录
1 a 1 a
1 a 2 b
1 a 3 c –左边1的都符合都保留
2 b null null –左边2的都不符合,变成一条右边null的纪录
3 c null null –左边3的都不符合,变成一条右边null的纪录

3、再去掉where条件不符合的,就是结果(这里的例子没有where条件,所以结果不变,大家自己可以加条件测试下)
1 a 1 a
1 a 2 b
1 a 3 c
2 b null null
3 c null null

对于left join的on条件:
用左边的记录去匹配右边的每条记录,匹配条件就是on里的条件,若右边有满足条件的记录,则取出来,
若没有匹配的记录,则给个null值,对于其后的where条件,
是对整个left join后产生的结果集进行筛选,所以条件放在on里和where里是完全不同的意思,切记!!!

(来自互联网)

[转自cnbeta]为什么给美女玩家发钱?

据说有一个统计,bbs里面,看文章的人里面,只有20%愿意回帖,而写文章的只占这所有阅读文章总量人群的2%,而这2% 人群里面,真正写出“热门”文章的,只有2%的10%,就是0.2%,而对于两个bbs之间的竞争来说,这0.2%人之间的竞争构成整个bbs竞争的核心。(当然,再反过来说,这0.2%人选择在那个bbs上发文章,他的判断标准是那回帖的20%数量,目的是为了向所有的阅读者展现。)
史玉柱给美女发钱,就是把美女认为是这0.2%人群。是想利用这一批美女玩家,吸引那另外的20%,甚至是另外100%的玩家。

这个世界上没有仅仅 因为你是美女就可以白拿钱的,谁都知道出来混,迟早要还的。拿了史玉柱钱的美女在游戏里面的角色和行为也注定打上史玉柱的烙印。

1、如果没有意外,这些美女将有超级pp的照片可以供史玉柱宣传。在史玉柱的游戏海报上将有美女的肖像,然后有暗示性的语句告诉你,到巨人来玩,你就可以追求、认识甚至“占有”她们。这是宣传道具。对于新玩家来说,虚拟网络游戏里面不管有没有什么,毫无疑问,““戏”中自有颜如玉”,玩游戏能够成一代豪侠,能够有巨额财富,能够随意pk任何人,甚至能够和这些真正的真实的美女“把盏共欢”,在有这没多网游可以选择的时候,为什么不首先试玩“巨人” 呢?

2、当时,网游和真实世界有一个最大的共同点,就是需要真正“实力”来说话。已经毋庸置疑,史玉柱的网游的最大的实力就是财力。没有钱,你所有的“天赋”(美女的美色除外)在史玉柱的游戏里面都是废纸。这些游戏里面真实的美女,注定要完成史玉柱的目标,就是“歧视”没有实力的玩家,没有实力就是没有财力。如果你想和他们说话,请练到多少级,否则,美女连瞟都不瞟一眼,更不要说和你来一场互联网的“缠绵佳话”;古往今来,多少书生为赴美色一面之源而倾家荡产。你如果要想和美女扯上关系,不好意思,请练级吧。网游里面,没有实力就没有话语权,当然潜台词是没有钞票就没有话语权。

3、史玉柱的游戏甚至会告诉你,想和绝色佳丽交流,“都是免费的!”,如果可以,史玉柱甚至会安排巨人里面的英雄和美女去纳斯达克敲钟,机票是免费的,敲钟是免费的,在美国游玩是免费的,当然美女也是史玉柱免费提供的,但是英雄不是免费的。巨人里面的任何一个英雄后面,都是数万个普通玩家的练级史。每一个玩家的练级史都是史玉柱老虎机刷卡史。在巨人诞生之日,先有美女是为了诱惑未来的英雄的,未来英雄的背后,都是一张张人民币的漫漫烧钱路。

4、给美女发钱说明网游代理商之间的竞争已经是全方位的竞争。网游之间的竞争已经不再是简单的游戏代理权的竞争,也不仅是游戏质量、游戏运营能力,已经从网吧争夺战、广告争夺战、眼前争夺战升级到“美女”争夺战了。而且美女已经成为互联网游戏不可或缺的一个重要要素了。这不禁让我想起去年我自己的一篇博文:盛大的超女梦!–对“《雄霸天下》对女性玩家进行注册认证意图”的臆测 。

英雄、美女、财富、大侠、搏杀,这些词汇已经渐渐成为网游的代名词。如果我自己还是十五六岁少年出头时候,我也在怀疑自己是否在这些充满诱惑性词语前开始尝试网游–这个新时代的鸦片。最后在本文结尾贴一个文章:儿子沉迷网游,马云发誓不投网游一分钱

我尊重甚至敬仰能够东山再起,不忘旧债的以前的(进入网游行业前)的史玉柱,但是对于现在的史玉柱,在不断吞噬中国青少年的网游市场里面,不知道未来的史玉柱什么时候才能还这笔“债”。

http://www.cnbeta.com/articles/50822.htm

百度很high很大声 腾讯很low很小心

中国的互联网是从来就不缺新闻的行业,“艳照门”刚刚落幕,百度IM就开始“大声”high了起来,原来一直流传说李彦宏先生原来属意的百度IM名字叫“百度小声”,现在更名叫做“百度HI”。不管最终名称是什么,李彦宏先生是铁了心要携网站的上亿用户和70%的国内搜素引擎流量入口资源杀入即时通讯市场。

 

百度HI不只是一个即时通讯工具

毫无疑问,百度HI不是一个简单的IM,他是百度整个产品线的脊柱,是百度未来的产品线的灵魂和发动机,它将贯穿和整合百度的所有产品和服务,包括搜索、贴吧、知道以及即将推出的C2C平台等系列产品线。百度HI必然会整合百度以及旗下收购的多家网站的用户等资源。到年底我们看看百度HI的用户规模我们就会发现,百度新推出的HI绝不会是一只绣花鞋,他不会只懂花拳绣腿,对于腾讯来说,这或许是一匹会吃人的狼。

在基于IM平台上,百度将可以实现很多以前想做但是却没办法做的事情,将大大满足百度的扩张欲望,未来百度在满足用户基于互联网的娱乐需求的路上将会越走越远。

    

百度HI将直接冲击腾讯的用户群体

很多业内人士都不看好百度IM的前景,认为腾讯目前占有IM市场75%以上的份额,百度进入这个市场已经没有机会,其实腾讯在这个市场占有率的比例和2003年淘宝进入c2c市场时易趣所占C2C的市场份额十分接近,但是5年后的今天,当我们回过头再来看看,易趣的市场份额在哪里?

中 国互联网的竞争已经转化成为腾讯、百度、阿里巴巴三家公司的竞争,随着百度的加入很快三家都将有即时通讯工具,从用户群而言,阿里旺旺用户对象是商业人 群,满足的是偏重商业的需求。而百度网站本身的用户群体更偏重的是年轻一代的学生,以及刚参加工作不久的年轻人,这一群体和腾讯的重合度相当高。百度杀入 这一市首当其冲的是与腾讯抢肉吃,虽然现在无法预料最终谁能够抢到更多。

年轻一代喜欢尝试新产品,且忠诚度相对较低,百度的介入貌似机会很大,一个强劲的对手横空出世,腾讯这只笨重的企鹅看来是要小心了。

 

IM市场的战斗或许才刚刚开始

2007年度中国互联网调查统计数据显示,目前中国IM市场规模已达到47.5亿元人民币,预计到2009年,这一市场规模将达87.6亿元,具有超过30%的市场年增长速度。百度介入这一市场,不管是从满足其用户沟通需求,还是满足其C2C平台的发展需要,还是基于与IM老大的与虎谋皮,分食市场的策略来看,都是非常合理的。

百度hi挥剑所指的是腾讯的奶酪,百度是一家技术型公司,有非常出色的产品设计规划能力,在用户体验方面百度的产品一直是在业内做得最优秀的公司。包括百度网页搜索、mp3搜索、贴吧、知道等系列产品,在用户中都是有口皆碑。

而互联网的竞争归根结底就是看谁能够给用户最好的体验,谁能够让用户爽到想不到!这才是制胜的王道,从这个角度来看,IM市场的战斗才刚刚开始。面对百度的腾腾杀气,腾讯会如何应对?值得关注和期待!

不管你对百度hi的前程是看好还是看坏,百度杀入即时通讯市场注定会成为今年度互联网最受关注的新闻之一,其将影响未来中国互联网的格局。

对于百度介入这一市场,腾讯一直很低调。而百度还在继续High,不管一干看客是捧也好,骂也罢,这都是百度所欢迎的!

社交网络与诺基亚N平台将引爆手机游戏产业

  Informa预计今年手机游戏业市场将增长23%,至40亿美元,推动这一增长的主要原因将是诺基亚未来数周即将推向市场的N-Gage游戏平台。

 

 

 

3月5日消息,社交网络的流行再加上诺基亚新推出的平台为手机视频游戏出版商带来了新的希望,2007年手机视频游戏市场一直处于低迷状态。

据国外媒体报道,手机游戏市场去年一年惨淡经营,这完全出乎业界此前的预料,大多游戏开发商和业界分析师将原因归结于电信运营商对游戏推广的投资严重缺乏兴趣。而现在,社交网站的迅速兴趣让运营商们又看到了希望,它们打算通过社交网站宣传游戏产品。

Digital Chocolate是为数不多的几家全球游戏出版商之一,该公司将其最新力作《Tower Bloxx》发布到了数家社交网站和游戏站点。发布到Facebook之后的短短4个月内,该游戏的安装次数已超过了40万次。

Digital Chocolate游戏开发主管伊柯卡·帕纳楞表示:“(游戏在)社交网站的宣传效果出乎我们的意料,今年我们将支持对全部的产品采取同类的营销方式。”

媒体研究公司M:Metrics表示,去年美国和欧洲市场购买手机游戏的人数与上一年相比几乎没有任何变化,预装游戏日渐流行。

市场研究机构Informa分析师丹尼尔·温特伯托姆表示:“手机游戏产业长期以来一直缺乏增长动力,事实上购买和玩手机游戏人数尚不足手机用户数的5%。”“运营商们几乎不愿意出资对新游戏内容进行宣传推广,”他同时指出,大约有90%的手机游戏购买行为是通过运营商的入口站点完成的。

Informa预计今年手机游戏业市场将增长23%,至40亿美元,推动这一增长的主要原因将是诺基亚未来数周即将推向市场的N-Gage游戏平台。诺基亚多媒体手机均可下载N-Gage平台,该平台拥有多款游戏版游戏。

几乎所有的手机游戏出版商,包括电子艺 界、Gameloft 和 Glu Mobile等都已经与诺基亚签署协议为该平台开发游戏。估计游戏出版商们遇到了最大难题之一将是无以计数的手机型号,全球五大手机厂商每年向市场推的新 机就有数百种之多,而每一款手机又使用不同的软件,单单为如此众多的手机类型开发游戏内容的花费就占据了游戏开发商开发成本的一半。

诺基亚N-Gage平台普及之后,游戏开发商就可以为超过100万部手机生产同一种版本的游戏内容,到第二季度上述数字还可能成们增长,将来诺基亚S60软件平台的用户和三星与LG的多款手机都可以使用同一版本的游戏。 zhangtao

比尔·盖茨:谷歌不懂企业需求

u9244780291986443905gp0.jpg

新浪科技讯 北京时间3月4日消息,据国外媒体报道,微软董事会主席比尔·盖茨(Bill Gates)周一在SharePoint会议上发表了讲话,并回答了一些热点问题。

当被问到微软收购雅虎将对SharePoint产生什么样的影响时,盖茨表示:“不管我们最终能否成功收购雅虎,都不会对SharePoint 产生实质性的影响。显而易见,SharePoint代表着我们全力争夺消费搜索市场的想法。从SharePoint可以看出,我们十分看好搜索和软件未来 的发展前景。”

当被问到谷歌新推出的企业应用是否对微软构成威胁时,盖茨给出了直接的回答。他说:“不要过高地估计谷歌,这家公司并没有真正理解企业的特殊需 求。目前,谷歌的经济模式完全以消费搜索为基础。当然,在消费搜索领域,谷歌的表现非常优势,我们将加大在这一领域的投入,向谷歌发起更强劲的挑战。”

盖茨同时表示:“谷歌推出了生产力应用,但并没能吸引大量用户。至少到目前为止,谷歌在这一领域获得的成功十分有限。坦白地讲,对于谷歌的很多 产品来说,发布的当天是它最好的日子,而之后就(逐步被人遗忘)。我记得谷歌曾经推出一款名为‘Gtalk’的产品,当时号称要挑战整个世界。但现在,我 已经想不起它的确切名字了。”

当被问到支持谁担任下一届美国总统时,盖茨并没有给出明确的答复,而是建议提问者和其他人访问一个网站。在这一网站上,美国总统主要候选人就呼吁他们就任后造访非洲的请愿给出了答复。(马丁)