Posts Tagged ‘PHP’

Microsoft Access 转 MySQL软件

星期六, 十月 4th, 2008

以前刚开始学网页脚本的时候,先学的是ASP,ASP一般配合Access数据库使用。直到后来一个高手推荐我学PHP,才屁颠屁颠地学了点PHP,又用上了MySQL。Access和MySQL数据库各有特色,Access的特点是小巧玲珑,而且由一个文件构成、数据库备份之类的只要复制一下文件就好,挺方便的;所以我刚开始用MySQL的时候不解,为什么要做成这种后台形式呢?无论安装PHP程序还是备份数据,多麻烦?不过MySQL的特点也是显而易见的,高效、稳定。

以前偶尔会做一些小玩意,比如我曾经从网上下载了一个电话号码定位的数据库,里面大概有 130XXXX – 139XXXX 的号码段对应的城市,这个数据库是Microsoft Access格式的,而我当时用的是PHP+MySQL,所以得转为sql格式放入MySQL中。一开始用的是PHP脚本法,即写一个PHP脚本,通过ODBC从Access中读取出来,再插入MySQL。不过那个速度是相当的慢。本来也想找一个软件来完成这项工作,但上网找了一下,似乎有一个这样的软件,不过是收费的,还是算了。

最近又在搞一个小玩意,《成语词典》,我从CSDN下载的源文件,原本是ASP+Access格式的,我又得把它转为MySQL,数据大概有13000条,我查了一下家里放着的那一本《学生常用成语词典》,不过才8000+条成语而已,可见这个数据还是比较全面的。

还好这次找到了一个Access To MySQL这个软件。这个软件是丹麦一家公司Bullzip开发的免费的软件。立即下载来试用了一下。感觉不错。首先要安装一个ODBC的软件(如果有安装IIS似乎会一起装,没有的话上MySQL官方网站下载)。

打开程序,选中要导出的MDB文件,

再填写MySQL服务器信息及要导入到的数据库名,

可以选择要导入的表和列

再设定“覆盖原表及数据”,“转存数据”,“转存索引”等设置,点击开始,即可开始转换过程。

我的大概13000条,4MB的数据也仅仅转换了30S左右,如果用PHP脚本写的话不知道要到猴年马月。

美中不足的是,这个软件对字符集的支持并不好,它不支持设定字符集,我第一次的时候导入以后数据全部是问号,因为它创建的表的字符集都是默认的拉丁_瑞典语字符集,而MDB文件的字符集是GB2312,后来我只好自己先创建好表,设定好字符集,再用导入数据的模式进行操作,操作完后一切正常。

再花了一个下午写了这个《成语词典》,欢迎大家使用。

如何禁止搜索引擎收录?

星期五, 九月 19th, 2008

很多站长都认为有搜索引擎收录是一件好事,首先是自己的网站得到了承认,通过搜索引擎也能带来一定的流量。其实并不完全准确,某些比较不知名的搜索引擎,即便收录了许多网页,并且天天更新,却不能带来实在的利益,反而浪费了服务器带宽(国内的主机一般宣称不限流量,但国外的Dreamhost这样的主机都是限制流量的),这样的搜索引擎,收不收录也是无所谓的。本文说说如何禁止某些搜索引擎的抓取及收录。

首先谈谈哪些搜索引擎是一定有用的,Google,百度,我认为这两个搜索引擎是必须的。国内网站的90%以上的搜索引擎流量来自于Google和百度,其中百度七成,Google三成左右。Google是搜索引擎的权威(强龙),而百度就是中文搜索的领袖(地头蛇)。除此之外,我认为其他的搜索引擎都可以屏蔽。雅虎中国、Live中文、以及国内的搜狗、搜搜、有道之辈均是无足轻重的搜索引擎。

禁止搜索引擎收录的方法大概有3种。

方法一:服务器禁止访问。

这需要服务器配备有cPanel这样的后台管理软件,设定某个搜索引擎所在的IP段禁止访问。如要封锁Google的蜘蛛,先通过域名对应IP查询得www.google.com的IP地址,如74.125.19.99,再通过IP WHOIS查询查到IP段 74.125.0.0 – 74.125.255.255 的所有人均是Google公司,把这个IP段填入IP黑名单中。(具体的方法根据不同的管理软件有所不同,可能是74.125.0.0-74.125.255.255或74.125.*.*)

这个方法比较好的地方在于直接禁止搜索引擎的访问,除了HTTP请求头,几乎不耗费流量,一般情况下这点流量也不会计算在你的消耗的流量当中。这是禁止搜索引擎收录的最好方法。但麻烦在于你不可能得到Google的所有IP段,这个就得靠收集了。

方法二:robots.txt禁止

robots.txt(小写)是放置在网站根目录下的搜索引擎权限控制文件。搜索引擎一般遵守robots.txt协议。通过编辑robots.txt协议,可以禁止某些搜索引擎的访问、禁止某个文件、文件夹被搜索引擎收录,适合用于保护私有文件。搜索引擎通过读取robots.txt,判断自己是否在被禁止搜索引擎之列,如果被禁止,一般不会对该网站进行抓取,除了百度这变态

robots.txt的简单用法:

1.禁止百度收录(想和淘宝一样抵制百度就这么做 :)

  1. User-agent: *
  2. Disallow:
  3.  
  4. User-agent: baiduspider
  5. Disallow: /

首先是User-agent,每个搜索引擎都有自己的User-agent,比如Google的为 Googlebot,百度的为 baiduspider ,可能区分大小写,其他相对应的应该到搜索引擎的帮助页面去查询一下。 * 是一个通配符,通配所有的搜索引擎,Disallow: 项目表示禁止访问的位置,第一个Disallow:后面为空,表示没有禁止访问的项目,也就是允许所有的搜索引擎收录。但如果要添加例外,还可以添加一行User-agent: baiduspider,表示下面的规则仅适合百度蜘蛛,百度蜘蛛的规则是Disallow: / ,也就意味着禁止收录该域名下所有的网页。

在特殊情况下,我们可能希望部分不被所有的搜索引擎收录,比如Wordpress的wp-admin/目录是后台管理的目录,wp-content/是存放主题、插件的目录,这个不需要被搜索引擎收录,可以编辑robots.txt为

  1. User-agent: *
  2. Disallow: /wp-admin/
  3. Disallow: /wp-content/

2.仅允许百度以及Google收录(推荐)

  1. User-agent: Googlebot
  2. Disallow:
  3.  
  4. User-agent: baiduspider
  5. Disallow:
  6.  
  7. User-agent: *
  8. Disallow:/

使用robots.txt需要注意的是,并非所有的搜索引擎都遵守该协议,而且就算遵守该协议不代表蜘蛛不对网站进行抓取,可能是抓取后不发布出来而已,流量是要样要耗费的。

方法三:脚本判断,禁止

这里写一下PHP的方法,其他ASP等方法也是类似的。
检测来访的访客的User-agent(UA),如果是搜索引擎的蜘蛛则立即禁止访问,提示出错信息。

  1. if(preg_match("/(google|baidu)/i", $_SERVER['HTTP_USER_AGENT'])){
  2.     header('HTTP/1.1 403 Forbidden');
  3.     exit;
  4. }

该代码当来访的访客的UA中包含google或baidu字样即返回403禁止信息并退出脚本。

  1. //禁止UA中含有bot/crawl/spider字样的用户
  2. //但允许百度和Google
  3. if(preg_match("/(bot|crawl|spider)/i", $_SERVER['HTTP_USER_AGENT']) && !preg_match("/(google|baidu)/i", $_SERVER['HTTP_USER_AGENT'])){
  4.     header('HTTP/1.1 403 Forbidden');
  5.     exit;
  6. }

用脚本的方法禁止搜索引擎的访问比较方便快捷,特别是WordPress这样的程序,只要加一个插件即可(过些天做一个发布出来)。用这个方法对服务器流量的消耗也不大,可以接受。

PHP-Javascript“返回上一页”无缓存问题

星期三, 八月 27th, 2008

很多用PHP写脚本的朋友都会遇到这样的问题,比如一个注册页面(不使用任何AJAX),需要填写账号密码等信息,填写完后需要到服务端验证,如果验证不通过,就要让用户重新填写资料,这对很多用户来说这是一大煎熬,有可能就因此放弃了注册。遇到这种问题,一般有这几种解决方法:

1.仍然调用刚才的页面,输出错误提示,并把<input>中 value的值改为刚才用户输入的值。这应该是最好的方法,但缺点是要在这个页面的<input>的VALUE进行处理,比较麻烦。

2.还有很多懒人像我一样,遇到验证不通过,直接输出一个出错提示页面,并在页面中加入JavaScript的代码:

  1. <a href="javascript:window.history.back();">返回</a>
  2. <a href="javascript:window.history.go(-1);">返回</a>

这个代码是返回上一页的代码,返回后,除了密码类型的所有数据均会保留在网页中,这算是比较友好了。

但有很多朋友反应使用JS的返回后,网页上并没有数据的缓存,有时候却又有,真让人捉摸不定。前几天我在开发的时候也碰到了这个问题,上网Google许久未果,只好又从自己的代码分析入手。这时候,一句 session_start(); 引起了我的注意。session_start(); 是开启 $_SESSION 会话的函数,开启SESSION后,似乎是每次访问一个网页都要重新调用一次网页。我把这句话去掉以后,问题就解决了。如果遇到网页数据不能缓存的,不妨去掉SESSION试试 :)

Contact Me 服务

星期六, 八月 23rd, 2008

ContactMe服务是专门为各种网站/博客建立的电子邮件联系表单的网站,通过ContactMe服务,现在你可以不必费尽心思去自己亲自动手做一个联系页面,也不用担心你的服务器不支持PHP的mail函数了,把你的Contact Me页面让它来托管吧!

示范页面: http://dev.neekey.com/callme/lang/zh-cn/contact/2

服务简介:在这个网站上输入你的邮件地址,经过邮件地址确认后,将会得到一个唯一的URL地址,在自己的博客上创建一个ContactMe的链接到这里,你的访客要给你留言时就可以直接上这里来了。你既省去了制作页面的麻烦,也不怕电子邮件地址直接放在网页上而被SPAM扫描到了 :)

服务特色:

1.多语言支持。可选多种语言,使用范围广,国际化服务。(目前提供中英两种语言,但预留了接口,只要有翻译,可以随意增加语言种类)。

2.多模板支持。不仅有系统默认的模板,将来还可以提供多种模板,(也可以自己编写HTML、CSS)让你的联系页面与众不同。

3.多种调用格式支持。除了直接访问这个URL外,将来预计还能支持在自己的博客上通过FLASH,JavaScript,iframe调用。

4.多项贴心设置:开启Email可见模式,可以把您的Email地址制作成图片显示,既放置被SPAM扫描到,又能在服务器发生错误时手动发送邮件。

目前这个服务只制作了一个联系表单,注册模块等还未制作,其他的服务都在构思中。如果想先体验这项服务的不妨留下你的大名(邮件地址我在后台可以看到),率先体验一下这项功能。

PHPxref使用指南

星期五, 八月 22nd, 2008

PHPXref是一个十分优秀的PHP开发工具,它能将某一个程序(如Wordpress)中所有的函数、变量、常量等分类记录,生成一个HTML网页列表,你可以轻松地在这个列表中找到某个函数在什么位置被定义,在什么位置被引用。这一点无论是对于一个Wordpress插件开发者,还是想学习研究Wordpress的人都是十分有用的。

PHPXref官方有个已经制作好的Wordpress的分析文档:http://phpxref.com/xref/wordpress/,此外,PHPXref还制作了多种PHP程序的分析文档,有兴趣的可以Google站内搜索一下。

PHPXref的主要功能包括

1.文件管理。无论要找什么文件,用它能很快地搜索到,如果你的文件中有符合语法规则的注释,PHPXref还能将它列在文件名的旁边,更容易了解这个文件的功能用途,也不用为了找一个文件翻遍整个文件夹,打开每个文件查找注释了。

2.函数、变量、常量、类管理。Wordpress内置了多种功能强大的函数、类,无论是字符处理还是远程URL读取等都有现成的函数,但我们往往不知道这个函数能在Wordpress里面找到,现在容易多了,搜索一下就找到了,如果在开发过程中遇到某个Wordpress函数,不知道它是干什么用的,这时候就得找到这个函数在哪里定义的,可是Wordpress里面上百个文件上哪找去?还是用PHPXref好了。

3.文件包含管理。Wordpress中需要很多 include,require包含别的文件,但偶尔也会遇到重复包含导致出错,虽然require_once可以解决,但我们也最好要了解某个脚本包含了哪些文件,要调用这个文件时也心中有数。PHPXref提供了每个文件的包含文件列表和被包含的文件。

4.源代码高亮。这个功能也是比较实用的,但在实际测试中偶尔会出错。

5.出色的关联功能。在浏览源代码时,将鼠标指到某个函数名,就会在鼠标旁边出现函数的定义页面,以及被使用次数,此外,还对使用较多的变量名,也是可以直接有个页面显示所有的关于这个变量的使用情况。

既然PHPxref那么强大,该如何使用呢?

1.首先,从SF下载最新的程序,现在的版本是0.7,下载那个win32的版本就好了。下载后解压出来。

2.phpxref目录下有一个 source 的文件夹,这是存放源代码的文件夹,把另外下载的Wordpress源代码放到这里来,请注意,不要把 wordpress/这整个目录放进来,而是里面的文件放进来就行了,确保以 source/index.php,source/wp-content/ ..这样的格式就行。

3.运行可执行文件phpxref.exe ,将进行生成文档的工作,这个过程大约需要1分钟左右,由于需要高频率读取硬盘和大量计算消耗CPU资源,请暂停其他工作。

4.提示成功后,output 这个目录下就是所有的文档了,建议在本地上用XAMPP进行调试,把整个output 文件夹搬到 xampp的 htdocs 的目录下,再把名字改为好记的 phpxref ,这样,就可以通过 http://localhost/phpxref/ 访问了。效果和 http://phpxref.com/xref/wordpress/ 的是一模一样,当然,速度快了很多。

PHPXref还提供了在Linux下生成文档的版本,但我很少用Ubuntu,也没有去Ubuntu下测试了,我想更多数人需要的还是Win系统下的,如果有需要,把Win下生成的文档可以搬到服务器上去供大家访问,还可以在页面下面放点Google Adsense广告赚点外快。但PHPxref生成的文档实在太大了,一个1.2MB的Wordpress(压缩包),解压后再生成文档,居然要80多MB的位置!压缩完后也需要接近20MB,所以我打消了把它放在自己服务器上的愿望(说不定制作重复的镜像还会被搜索引擎处罚)。

除了用PHPXref来生成已有的Wordpress或其他PHP示范程序(如Discuz)进行学习外,用PHPXref来生成自己制作的PHP程序,进行检验错误或者是整理代码资源也很有用。我从学PHP至今大概写过5个比较大型的程序(我认为算比较大型了,但没有一个是成型的商业产品),几乎也是写了5次的邮件地址验证函数,用户名验证函数,密码验证函数,MySQL类…看来还得用PHPXref来整理资源了。

在使用PHPxref之前,我还读过awflasher.com提供的简介,特此感谢。

创建你的电子邮件联系页面

星期六, 八月 16th, 2008

无论是一个网站还是一个博客,站长与网友的互动,不但需要有一个QQ、Email,更需要一个在线的即时Email联系表单。在Wordpress博客中有很多插件能够实现这种功能。但如果发送一个邮件都得调用WP程序的话,速度慢、安全系数不高,不如单独创建一个联系页面。

创建一个feedback.php 页面

  1. <?php
  2.  
  3. $email = $_REQUEST['email'] ;//留言者的Email
  4. $message = strip_tags($_REQUEST['message']);//留言信息,去除HTML标记
  5. if(!empty($message)){
  6.     mail( "username@example.com", "Feedback Form Blog", $message.'From:'.$email , "From: username@example.com");//调用系统函数 mail() 发送邮件。
  7.     //第一个参数是接收者,第二个参数是标题,这里设置了固定的标题,第三个是留言信息,第四个实际上设置了发送者的邮箱,为了防止被邮件系统误判为垃圾邮件,且安全起见,最好不要用用户直接输入的邮箱。
  8.     header('Location:http://photozero.net/thankyou.html');//留言完转到感谢页面
  9. }
  10.  
  11. ?>
  12.  
  13. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  14. <html xmlns="http://www.w3.org/1999/xhtml">
  15. <head>
  16. <meta http-equiv="Content-type" content="text/html;charset=utf-8" />
  17. <title>Feedback</title>
  18. </head>
  19. <body>
  20. <!-- 创建一个提交信息的表单 -->
  21. <form method="post" action="feedback.php">
  22.     您的邮箱: <input name="email" type="text" /><br />
  23.     意见或建议:<br />
  24.     <textarea name="message" rows="15" cols="40"></textarea><br />
  25.     <input type="submit" value="提交" />
  26. </form>
  27. </body>
  28. </html>

需要有几个需要注意的地方。
1.mail() 函数。不是所有的空间都可以使用mail()函数的,要取决于所在的服务器是否有正确设置了sendmail,否则即使使用了mail()函数也是无法发信的。创建这个页面后最好自己试一下能否使用。一般来说,国外比较大的空间,如我用的Dreamhost,mail函数都配置得挺好的,可以直接用。而国内很多空间的服务水平很差,很多函数、PHP库都没有设置、启用。我曾经用过的某个国内空间就是这样,(甚至连 iconv 这个很重要的函数都不支持,PHP版本居然还是 4.2.5的,我问他们技术支持,让他们升级PHP版本,他们却无动于衷)如果mail() 函数无法使用,则可能需要使用一些第三方的MAIL库或MAIL类,我也没试过,下回找一个

2.编码。国内很多邮箱是采用了GB2312等编码,建议在mail()函数的第四个参数(邮件的HEADER)设置一下,如这个代码来取代mail函数

  1. function mailer($to,$subject,$content,$header = ""){
  2.     $header .= "Content-type: text/plain; charset=utf-8 \r\n";//设置邮件编码
  3.     $header .= "Content-Transfer-Encoding: 8bit\r\n";
  4.     $subject = "=?UTF-8?B?".base64_encode($subject)."?="; //对标题进行编码,
  5.     @mail($to,$subject,$content,$header);
  6. }
  7. mailer( "username@example.com", strip_tags($_REQUEST['title']), $message.'From:'.$email , "From: username@example.com");

其他CSS之类的自己随便做一下就好了,挺简单的吧:)

PHP中的UNZIP(解压缩)

星期四, 八月 7th, 2008

Linux系统一直对ZIP格式提供了良好的支持,在Linux系统中有unzip命令可以解压缩文件包,这对于使用SSH在Dreamhost上搭建博客的朋友是一个十分方便的功能。此外,7ZIP(推荐,开源免费)与WinRAR是常用于Win系统上的ZIP压缩/解压缩软件。在PHP中我们该如何使用压缩和解压缩功能呢?

上回我做了一个一键下载WP主题的插件Get_Theme,代码核心的两部分分别是下载与解压缩。下载比较简单了,通常是用file_get_contents(FILENAME); 这函数或者用 fsockopen 函数下载即可,可解压缩部分就比较复杂点了。由于我对ZIP也算是一无所知,唯一知道的就是PHP似乎内置了对ZIP/UNZIP的支持。后来一查文档才发现,这个功能需要加载额外的DB库,并且有些主机不支持。还好网上提供了很多不需要加载库的解决方案。

第一次用了PHPMYADMIN里面的unzip库。如果有本地用XAMPP搭建测试平台的不妨到 phpMyAdmin/libraries 目录下,找到 unzip.lib.php,里头有个 SimpleUnzip 的UNZIP类,它的作用是将一个ZIP文件解析出一个二维数组,这个数组中每个文件又是一个数组,数组中包含了路径、文件数据、创建时间等信息,解出数组后还要根据每个文件的路径判断是否需要新建文件夹等。后来我用这个类在本地的PHP环境中测试了一下,工作得不错。但当我把它上传到Dreamhost空间进行测试的时候却出现了问题。当我从Wordpress主题站下载主题进行测试解压时,解压后的每个文件均能被正常识别、创建,但文件里的内容都是乱码。我一直不解其中原因。后来我想起7ZIP里面有个似乎可以查看压缩算法的功能,看了一下,算法好像都是 Deflate。而下面的主操作系统信息引起了我的怀疑。我在本地压缩的几个主题包的主操作系统都是 FAT ,而WP主题站下载的主题的主操作系统都是 UNIX ,可能是由于数据的存储方式不同导致了这个问题。 而后我又记起了WP自己拥有的插件升级功能,必然也需要用到UNZIP功能,在WP的文件里找了一下,终于找到了一个UNZIP类,它位于 wp-admin/includes/ 下的 class-pclzip.php 用这个 PclZip 类很容易地解析出了ZIP包的内容,同样需要进行创建文件夹、文件等操作。

这里说一下大概过程,假设有个$archive_files数组,里面有数个$file数组,$file里是真正的每个文件的数据,如$file[filename] 是文件名(包含文件路径,有可能是 file.php 也有可能是 /dir/file.php),$file[content]是文件数据,还有创建时间修改时间等就不列了。

有了文件名首先把它连上绝对路径,用file_exists()或is_dir()的函数判断路径是否存在,不存在就要创建。判断的时候还要注意有可能存在多级文件夹未创建的情况,所以应该先用 explode 函数分解成几个数组,用个for循环把每级目录都判断一遍,不存在则创建。

接下来就是用文件函数创建函数了。

如何获取Alexa排名数据

星期一, 七月 28th, 2008

上回说到Alexa的排名数据来源于Alexa工具条,所以排名数据并不十分准确,特别是对于中文网站来说,国内装Alexa工具条的多是被某些网站“误导”的用户以及一些网站站长,所以很多人也对Alexa数据不以为然。在目前情况下,Alexa的排名还是和Google PR一样被广告商们看重的数据和作为衡量网站广告投放价值的依据。

这里讲讲如何获取Alexa的数据排名。最简单的莫过于装上Alexa提供的工具条了,Alexa提供了Firefox和IE的版本,但纯粹为了看一个网站的排名而安装这个插件显得有点浪费资源。我在Firefox浏览器用的是SearchStatus这个插件,这个插件同时显示了Google PR和Alexa排名,占用位置也不大,用起来比较方便。

本文着重要讲的是如何使用从Alexa的服务器下载数据,并进行分析后应用于WP插件或提供给访客(如 http://alexa.chinaz.com/这样的服务)。Alexa官方提供了收费的API接口,每千次查询$0.15(上回凭印象说是$0.1,更正一下),既然要收费,肯定没有多少人愿意花这钱了,特别在我们中国人看来更是难以理解,照理说用你Alexa的数据应该是相当给你面子,给你人气,你还要向我收费?还好早就有人破解了Alexa工具条(貌似很多国内网站强迫要求下载的Alexa工具条还经过改装,拥有木马功能了),并把它的服务器接口盗取出来分享给大家了。

接口一:

http://data.alexa.com/data/+wQ411en8000lA?cli=10&dat=snba&ver=7.0&cdt=alx_vw=20&wid=12206&act=00000000000&ss=1680×1050&bw=964&t=0&ttl=35371&vis=1&rq=4&url=http://www.baidu.com

接口二:

http://data.alexa.com/data/TCaX/0+qO000fV?cli=10&dat=snba&ver=7.0&cdt=alx_vw=20&wid=31472&act=00000000000&ss=1024×768&bw=639&t=0&ttl=4907&vis=1&rq=23&url=http://www.baidu.com

接口三:

http://data.alexa.com/data/ezdy01DOo100QI?cli=10&dat=snba&ver=7.0&cdt=alx_vw=20&wid=16865&act=00000000000&ss=1024×768&bw=775&t=0&ttl=1125&vis=1&rq=2&url=http://www.baidu.com

接口四:

http://data.alexa.com/data/+wQ411en8000lA?cli=10&dat=snba&ver=7.0&cdt=alx_vw=20&wid=12206&act=00000000000&ss=1680×1050&bw=964&t=0&ttl=35371&vis=1&rq=4&url=http://www.baidu.com

事实上,分析一下这些地址可以看到它已经将用户的浏览器信息,系统信息等发送给了服务端。

ezdy01DOo100QI是aid。
“cli=10&dat=snba&ver=7.0&cdt=alx_vw=20&”这部分是固定值。
wid是个随机数。
act数据包含了Alexa Toobar功能的被使用情况。
ss很明显是屏幕分辨率了。
bw是IE窗口的宽度。
t取值是0或1,和当前IE的window对象还有referrer有关。
ttl是当前页面打开速度,和Site Stats中的Speed有关。
vis表明IE是否显示工具条。
rq是对象计数器。

有了这些接口,我们就可以提供Alexa排名查询的服务了。

访问任意上述地址任意一个,查询baidu.com的信息,返回XML文件如下:

  1. <?xml version="1.0" encoding="UTF-8"?>
  2.  
  3. <ALEXA VER="0.9" URL="baidu.com/" HOME="0" AID="=">
  4. <RLS PREFIX="http://" more="315">
  5. <RL HREF="www.3721.com/" TITLE="3 7 2 1"/>
  6. <RL HREF="search.21cn.com/" TITLE="21CN"/>
  7. <RL HREF="itsearch.ccidnet.com/" TITLE="itsearch.ccidnet.com/"/>
  8. <RL HREF="e.pku.edu.cn/" TITLE="e.pku.edu.cn/"/>
  9. <RL HREF="21cn.com/" TITLE="21cn.Com -"/>
  10. <RL HREF="163.com/" TITLE="163.com/"/>
  11. <RL HREF="search.163.com/" TITLE="search.163.com/"/>
  12. <RL HREF="dir.sohu.com/" TITLE="dir.sohu.com/"/>
  13. <RL HREF="cn.search.yahoo.com/" TITLE="cn.search.yahoo.com/"/>
  14. <RL HREF="yahoo.com/" TITLE="Yahoo!"/>
  15. </RLS>
  16. <SD TITLE="A" FLAGS="DMOZ">
  17. <TITLE TEXT="Baidu.com"/>
  18.  
  19. <ADDR STREET="The Ideal International Bldg, 12th floor" CITY="Beijing 100080,  " STATE="" ZIP="" COUNTRY="CHINA" />
  20. <CREATED DATE="11-Oct-1999" DAY="11" MONTH="10" YEAR="1999"/>
  21. <PHONE NUMBER="+86 1082607100"/>
  22.  
  23. <OWNER NAME="Baidu.com, sillyser"/>
  24. <EMAIL ADDR="baidu_dns_master@baidu.com"/>
  25. <LANG LEX="zh-CN"/>
  26. <LINKSIN NUM="58665"/>
  27. <SPEED TEXT="1062" PCT="82"/>
  28. <POPULARITY URL="baidu.com/" TEXT="11"/>
  29. <RANK DELTA="-2"/>
  30. <CHILD SRATING="0"/>
  31. <REACH RANK="13"/>
  32. </SD>
  33.  
  34. <KEYWORDS>
  35. <KEYWORD VAL="Chinese Simplified"/>
  36. </KEYWORDS><DMOZ>
  37.  
  38. <SITE BASE="baidu.com/" TITLE="Baidu.com" DESC="The leading Chinese language search engine, provides “simple and reliableâ€? search experience, strong in Chinese language and multi-media content including MP3 music and movies, the first to offer WAP and PDA-based mobile search in China.">
  39. <CATS>
  40. <CAT ID="Top/World/Chinese_Simplified/计算机/互联网络/搜寻/搜索引擎" TITLE="搜寻/搜索引擎" CID="1005774"/>
  41. </CATS>
  42. </SITE>
  43. </DMOZ>
  44. </ALEXA>

开头包括了一些反向链接的网站,中间是网站排名等信息,下面是网站介绍,网站管理员可以向Alexa添加这些信息。如果是比较不知名的小站,如我的http://photozero.net 信息就没有那么全了。

在前面的文章里提到了,调用Neekey API servicesAlexa rank显示图片还会提升Alexa排名,实际上指的就是在调用Alexa数据时,我们是模拟Alexa工具条进行查询的,所以你的博客的Alexa排名自然就提升上去了,不信您试试?我在Firefox里装上SearchStatus插件后,每天访问自己的博客一会儿,眼睁睁看着Alexa排名从300W排名开外冲到目前的110W。

PHP中获取文件排名的方法

  1. $content = file_get_contents('$alexaURL'); //自行将URL放入,如果服务器的file函数没有开启ALLOW_URL_OPEN 选项(如Dreamhost),应该用 fsockopen 等函数替代。
  2. $pattern = '/<POPULARITY URL="\s*(.+?)" TEXT="\s*(.+?)"\/>/'; //在XML中匹配的 <populartity />项里面的数据就是Alexa排名了
  3. preg_match($pattern, $content, $match); //进行匹配搜索
  4. echo $match[2]; //$match[2] 就是排名了。
  5. //如果需要其他信息就自己写个匹配模式,从里面提取出来就行了。当然用PHP提供的XML处理函数也是可以的。

除了在服务端调用进行输出外,做个AJAX调用的查询程序也不错,还节省了服务器资源。下次抽空做个放出来。

PHP创建(中/英文字)图片

星期天, 七月 27th, 2008

这个PHP代码是我做的一个程序的一部分,现在贴出来分享一下。这个代码的功能是创建一个图片,不但可以用自定义字体在图片上写英文,也可以写中文了!这个代码适用于验证码、给图片加水印等功能。

  1. <?php
  2. /*
  3. Photozero.net 改编自PHP参考文档
  4. */
  5.  
  6. //设置Header,如果输出图片不成功,请先暂时去掉这代码,查看错误信息
  7. header("Content-type: image/png");
  8. header("Cache-Control: no-cache");
  9.  
  10. $zh_text = '黑体';
  11. $en_text = 'Test';
  12. //要输出的字
  13.  
  14. $zh_font = 'simhei.ttf';
  15. $en_font = 'arial.ttf';
  16. //字库的文件名。建议中文字体和E文字体用不一样的,因为宋体、黑体字库里的英文实在不咋滴
  17. //这里用的都是TTF字体。懒得上网找就到 C:\WINDOWS\Fonts 下,Copy几个字体到程序目录下就好了
  18.  
  19. // 创建一个真彩的图片背景,参数是 X长 ,Y宽。
  20. $im = imagecreatetruecolor(400, 400);
  21. //或者可以调用已有的PNG图片等 : $im = imagecreatefrompng('background.png');
  22.  
  23. // 定义几个色彩
  24. $white = imagecolorallocate($im, 255, 255, 255);
  25. $grey = imagecolorallocate($im, 128, 128, 128);
  26. $black = imagecolorallocate($im, 0, 0, 0);
  27.  
  28. //填充背景为白色
  29. imagefill($im, 0, 0, $white);
  30. //将背景透明化
  31. imagecolortransparent($im,$white);
  32. //以上两行是创建透明图片的关键!
  33. //很多人反应, imagecreatetruecolor创建后的图片,背景颜色是黑的,无论怎么修改都不能变成白色的
  34. //我先将背景填充为白色,再做透明处理就可以了!在Firefox3和IE7下测试成功!
  35.  
  36. // 这是一个很简单的产生阴影的效果。
  37. //先在原本要输出的位置的偏左下角一点点输出灰色的字体,接着再用黑色字体写上去就有阴影效果了
  38. //下次再提供点别的花样~
  39. //imagettftext($im, 20, 0, 11, 21, $grey, $en_font, $en_text);
  40.  
  41. // 写入字体
  42. imagettftext($im, 12, 0, 100, 120, $black, $en_font, $en_text);
  43.  
  44. imagepng($im);
  45. imagedestroy($im);
  46. // 不用说了,输出图片,然后清除缓存
  47.  
  48.  
  49. //函数都是用PHP内置的,如果有不了解的请参考一下文档。
  50. ?>

整个代码的功能是比较单一的,但这是一个创建图片比较基本的框架。无论是做验证码还是要提供显示IP的服务,只要略微修改就很快能用了。就留着这代码备用吧,以后哪天说不定就用上了。

PHP识别Robot(Spider,机器人,搜索引擎)函数

星期三, 七月 16th, 2008

最近有想做一些有趣的网站的想法,但由于时间不充足,只是光想,没有去做,但部分所需的函数还是利用课余时间想好了,也顺便分享出来,方便大家使用。

很多Web2.0网站采用了AJAX构造,这样对搜索引擎不是很友好,这里就提供一个识别各个搜索引擎的函数,在判断是搜索引擎后转入专门为搜索引擎提供的页面,方便搜索引擎收录。

  1. function is_bot(){
  2.     $ua = strtolower($_SERVER['HTTP_USER_AGENT']);
  3.     $botchar = "/(bot|crawl|spider|slurp|yahoo|sohu-search|lycos|robozilla)/i";
  4.     if(preg_match($botchar, $ua)) {
  5.         return true;
  6.     }else{
  7.         return false;
  8.     }
  9. }

这是利用了搜索引擎的USER_AGENT进行判断,像Google的UA为GoogleBot,百度的为Baiduspider,基本上所有的搜索引擎都会增加这些字符以表明Robot的身份。

  1. if(is_bot()){
  2.     readfile('for-robot.html');
  3. }else{
  4.     include('index2.php');
  5. }

在使用时,判断是否机器人进行不同操作。