“PHP”目录存档

根据IP显示国家国旗

2008年07月11日,星期五

经过2天的开发,终于把这个能够根据IP地址显示国家国旗的程序开发出来了 :)

演示:

  1. 调用 <img src=”http://photozero.net/api/img.php”>
    显示 (无参数,显示访问者的国家国旗)
  2. 调用 <img src=”http://photozero.net/api/img.php?s=64.233.189.104“>
    显示 (输入需要查询的IP地址或主机如 www.google.com ,显示该IP/HOST的国家国旗)
  3. 访问  http://photozero.net/api/xml.php?s=64.233.189.104
    用XML文件显示该IP的相关信息如:
    <?xml version="1.0" encoding="UTF-8"?>
    <ipquery>
    <query s="64.233.189.104" />
    <return status="1" ip="64.233.189.104" country="United States" countryabbreviation="US" img="http://photozero.net/api/icon/png/us.png" />
    <info runtime="0.1131010055542 s" />
    </ipquery>

需要用的朋友去试试,我的Reviewers_Info插件也会尽快添加这个功能。

做这个程序主要有2个难点:

一.IP数据来源,国内有纯真IP数据库,但它的国家、地区是用中文储存的,而该程序需要用到2位字符的国家英文代码(如 cn,us)作为图片的链接(如 http://example.com/cn.png),纯真数据库并没有提供,且纯真数据库虽然提供较完整数据,但相对于只需要国家代码,存那么多的数据就有点臃肿了。所以只能用国外提供的数据库了。上Google搜一下,国外某些数据库还是不错的,但都是企业级应用,动辄上百上千$的费用不是我能支付的。后来找到了与Firefox插件Flagfox中使用相同数据的http://geotool.servehttp.com,并通过链接找到了Maxmind(不知为何这个网站被瑞星防火墙阻挡了)提供的数据库,这个数据库数据比较整洁,只有起止IP、国家英文名、国家缩略名如:

“2.6.190.56″,”2.6.190.63″,”33996344″,”33996351″,”GB”,”United Kingdom”
……
……

这个数据库不错,它是CVS格式的,我又费了好些时间将它导入到MySQL数据库中。接下来就好办了,输入一个IP就容易得出国家信息了。在效率方面,使用Coolcode写的利用 QQWry.Dat 实现 IP 地址高效检索(PHP)的方法(从DAT文件中搜索)每搜索一次约耗时 0.01-0.1秒,而该程序利用数据库搜索(约10万条数据),约耗时0.1-0.2秒,虽然耗时长了点,但还在可以接受范围内的。

二.国家国旗数据,在百度上找的国旗数据,不是不够完整就是图片太丑陋,显示效果一般,或者是没有匹配的杂乱排序,如 015454.gif 这样的文件名,难道叫我来分辨200多个国家地区?最后终于在FAMFAMFAM找到了完整的国旗,并配有 GIF/PNG 格式,大小普遍在16*11左右(少数国旗非常规形状除外,如尼泊尔),其命名规则也是 cn.png jp.png 这样的格式,刚好满足我的要求。

终于写好了~~~~~~前面走了不少弯路,太累了。希望看到的朋友都支持一下,或者下载Reviewers_Info这个插件试用一下~~~~~~

在线代理服务器的程序PHProxy

2008年05月1日,星期四

    很多人都在用代理爬墙,一般的浏览只要用在线代理服务器就可以了,有个叫PHProxy的程序可以做到,可惜的是,作者去年停止开发了,作者是一个沙特阿拉伯人,抱着与中国人相同的心态开发了这个很好很强大的PHProxy,恐怕是遭受到了某些恐吓,作者不得不停止开发,还在官方页面上说“该作品引发的后果与本人无关”。我曾经也用它在Dreamhost做了几个代理服务器,但Dreamhost后来就封了我的那个站,因为DH的条款里似乎有说不能用来作代理服务器,我也是跟别人买的分享空间,哪知道能作什么不能作什么?

    先来评析一下PHProxy这个程序,从名字就可以看出是用PHP写的,没错,写得很好,虽然PHProxy官网已经停止开发停止下载,但还是可以轻易地从SourceForge.net,和国内很多下载站下载到,这个代理程序不只是通过普通的远程URL读取文件的功能,还能构造Header通过socket连接,通过对Header的构造,伪造浏览器、伪造系统、伪造COOKIES,能让对方以为就是一个普通的访客在浏览他们的网页。

    按照PHProxy的作者的理解,由于太多人用PHProxy翻墙浏览色情之类的网站(可见长城不仅中国有,沙特阿拉伯也有,不知道沙特的墙是‘中国制造’吗?),迫于压力,不得已停止开发,但一年前更新的PHProxy 0.5b2版本功能已经十分强大了,可以选择是否使用COOKIES,对图像、JS进行过滤等强大功能,应该足以应付一般的浏览了。

    (不知道这软件在中国是否遭禁了,所以不方便提供下载,有需要者百度一下,你就找到了)

PHP生成HTML转义代码解决网页乱码问题

2008年02月23日,星期六

    在ASP,PHP程序设计时常会遇到网页乱码问题,特别是在网页里没有指定编码或服务器在HEADER里自动指定编码。这时候,我们可以考虑把汉字转为HTML转义代码来解决问题。

    转义代码是什么?如 &nbps; 是空格的转义代码; © 是版权符号的转义代码,除此之外,还有 &#XX; (XX代表数字)的转义代码。中文的转义代码在 20000多左右。

    把汉字转为HTML转义代码有什么好处?可以在任意字符集下正常显示中文(首先需要对方电脑里能够显示中文,即便你指定的编码是西欧编码,日文编码,都能正常显示中文。顺便提提,我最近弄了一个算“缘分指数”的小玩具就是根据输入姓名转为HTML转义代码来计算的。)

    这里讲一下如何用PHP算出中文的转义代码。(参考COOLCODE

    首先服务器需要支持 iconv 扩展,这是一个转换字符编码的拓展,很多空间都有提供,但也有些空间不提供,需要自己测试一下。

code.jpg
这样输入一个汉字,就能自动输出 &#XXXXX; 的结果了。在浏览器里看是这个汉字,在源代码里就漏出原型了。

从0开始玩转WordPress——安装篇(图解)

2008年02月14日,星期四

很早就开始想做一期安装Wordpress的专题节目,最近又有朋友求教如何安装Wordpress,所以决定从头开始写一篇在本机上安装测试Wordpress的专题。看完这篇专题,你能在30分钟内在你的电脑上开始玩Wordpress,并向互联网上其他用户提供服务(如果可能:))。

目录:
一;配置服务器;
二;调试服务器;
三;安装Wordpress;

一;配置服务器。(如果你使用Dreamhost这样的虚拟空间,这一步Dreamhost已经为你准备好了)

Wordpress推荐使用 Linux(服务器)+Apache(Web服务)+MySQL(数据库)+PHP(编程语言) (LAMP)。但一般来说,在本机测试的用户以装Windows XP 居多,这里以Windows XP讲解(其实Windows系列基本类似)。

首先要明确装什么Web服务软件,Apache还是Windows自带的IIS?毫无疑问,Apache更适合PHP,还有MySQL,PHP不能少。如果要一个一个装,可能会很麻烦,对新手来说,配置它们是很要命的事。还好,前人栽树,后人乘凉,网上有提供Apache+PHP+MySQL搭配好的打包软件,其中比较出名的有国产的AMPServ和国外的XAMPP,它们提供了快速的建设网站的功能,只要开启它们,你的电脑马上就变成一台提供Web服务的服务器了,也就马上可以安装Wordpress了!

ampserv.jpg
AMPServ的界面

xampp.jpg
XAMPP的界面

相对来说,XAMPP更为友好一些,先来尝试一下XAMPP吧:)。

第一步,下载XAMPP安装包;http://www.apachefriends.org/zh_cn/xampp-windows.html#1787 找到你需要的版本,如 http://www.apachefriends.org/download.php?xampp-win32-1.6.6-installer.exe 适合Win XP 的版本。

第二步,下载后,将它运行:
xampp-s-1.jpg
由于后台程序暂时没有中文版本(但管理及帮助界面都有中文),我们就选English吧。一路 NEXT 吧;默认的配置都不错的。

第三步,花个2分钟就安装好了?恩。然后打开这个程序。

二;调试服务器;现在看到
xampp.jpg
将Apache和Mysql后面的Start点上,就可以开始提供服务了!(FileZilla是提供FTP服务的,暂时用不到)请确认点了START后,出现“Running” 字样,表示正常运行!

激动人心的时候到了,请打开你的浏览器,在地址栏输入 http://localhosthttp://127.0.0.1 (表示你本机的默认地址)是不是看到:
xampp-s-s.jpg
如果有,则表明你配置的服务器已经成功,已经是一个网站啦!

三;安装Wordpress;

现在,打开http://localhost/phpmyadmin ,这是MySQL的Web控制地址:
phpmyadmin.jpg
在新建数据库处新建一个新的数据库,用来安装Wordpress,取名如 wordpress ,“整理”即字符集,可以选 utf8_general_ci 。

建立好后如图:
phpmyadmin-1.jpg
现在暂时放在那里。

进行下一步,下载Wordpress程序。你可以下载Wordpress.org.cn提供的带有中文包的WP版本,也可以下载官方的英文版本。下载后把它解压出来。
wps.jpg

将整个wordpress文件夹放置在 C:\xampp\htdocs ,  C:\xampp\ 是你的安装目录。然后访问 http://localhost/wordpress ;如图:
wp-setup-1.jpg
这是提示你还没创建配置文件,点击“create …”的链接;再点下面的 “let’s go” ;再如图:
wp-setup-2.jpg
讲解一下 Database Name 就是数据库名,输入刚才创建的空的数据库,如wordpress;User Name 就是数据库登陆名;我们刚刚弄好了XAMPP,还没设置,默认是 root ,默认密码是空,Database Host 就是数据库主机地址啦,我们在本地测试,就是 localhost,Table Prefix 是数据前缀,如果一个数据库装多个WP的话,用不同的前缀就OK,这里不管它。

如果配置成功的话就会出现:
wp-setup-3.jpg
还等什么?点“run the install”吧!(如果不是出现这个,可能是你的输入有误,请确保每项正确输入,用户名 root 对应密码是空的,请删除空格! )

接下来:
wp-setup-4.jpg
输入你的博客名 和邮箱地址吧;你将会得到一个默认的用户名 admin ,密码是随机6位字符。请记住该密码,然后进行登陆。

登陆后,看到 Users -> 看到你的用户名点 Edit -> 看到更改密码的输入框了吧!或者你也可以新建一个你自己想要的用户名和密码 :)

OK。这篇教程到此结束。装好WP以后,如果不再进行测试,记住把你的XAMPP 的所有服务STOP 掉,免得占用资源又招来黑客攻击。。如果还有什么地方讲解的不好,不清楚,请回帖指出:) 谢谢指教!

推荐一个文本编辑工具 Notepad++

2008年02月11日,星期一

Notepad++(http://notepad-plus.sourceforge.net/)是一款相当不错的文本编辑工具,我常用它来编辑PHP文件,它拥有语法加亮等必备功能。当然,它的作用绝不仅仅是一款PHP文件编辑器,你可以用它来编辑ASP,HTML,C,C++,Delphi……几乎你想得到的所有语言。就算你不是一个编程人员,用它来取代你的Windows自带的记事本也是一个不错的选择。启动它的时间及它所占内存的空间不会比记事本大多少。

notepad_plus.jpg

选择Notepad++还不仅有以上的好处。Notepad++是一款基于GPL的开源免费软件,用它来替代Editplus是个不错的选择。Notepad++还提供了多国语言,包括简体中文。

下载链接:http://sourceforge.net/project/showfiles.php?group_id=95717&package_id=102072

Wordpress内置模板条件判断函数

2008年02月10日,星期天

sidebar.jpg
最近计划在本站首页的sidebar上方放置一个视频文件,只需要在首页显示就可以了,试着在后台编辑sidebar.php,先试了一下.

  1. <?php
  2. if($_SERVER['SCRIPT_NAME'] == '/index.php'){
  3.   echo '...';
  4. }
  5. ?>

经过测试发现,WP所有的页面都是在 index.php 上。看来只有找WP提供的判断函数了。在官方的CODEX(http://codex.wordpress.org/Conditional_Tags)上找到了各种判断页面的函数,这里简单介绍一下。

  1. is_home();
  2. //判断是否首页;
  3.  
  4. is_single();
  5. //判断是否文章页;
  6. is_single('17');
  7. //判断是否ID为17的文章页;
  8. is_single('Beef Stew');
  9. //判断标题是否为 Beef Stew 的文章页;
  10.  
  11. comments_open();
  12. //当前页是否允许回复;
  13.  
  14. pings_open()
  15. //是否开启 ping;
  16.  
  17. is_page() ;
  18. //是否是一个页面。
  19. //同样, is_page() 和 is_single() 的用法几乎一致,也可以加入参数。
  20.  
  21. is_category();
  22. //判断是否为分类页面,与is_page()等用法一致。
  23.  
  24. is_tag() ;
  25. //是否TAG页面;可以用 is_tag('tagname') 判断具体的TAG;
  26.  
  27. is_author();
  28. //是否某个用户的文章;可以加入用户ID,或用户名作为参数。
  29.  
  30. is_archive();is_search() ;is_404();
  31. //分别判断是否存档,是否搜索,是否404页面。
  32.  
  33. is_paged();
  34. //判断是否翻页;
  35.  
  36. //例如,一个只需要在首页显示的可以用一下语句解决:
  37. <?php if(is_home() && !is_paged()){?>
  38. ...
  39. <?php }?>
  40.  
  41. //当然,一个不在首页显示的,例如“最近发表文章”的插件可以加一个
  42. <?php if(!is_home()){?>
  43. ...
  44. <?php }?>
  45. //避免首页内容和插件内容重复。

SidXSpam-sidxspam.php代码详解

2008年02月5日,星期二

sidxspam.php是这个插件的主文件

  1. <?php
  2. /*
  3. Plugin Name: SidXSpam
  4. Version: 1.0
  5. Plugin URI: http://photozero.net
  6. Author: Neekey
  7. Author URI: http://photozero.net
  8. Description: Anti-Spam by check code.
  9. */
  10.  
  11. //获取插件URL
  12. $sxs_dir = get_bloginfo('wpurl').'/wp-content/plugins/sidxspam';
  13.  
  14. //验证码错误时输出信息。
  15. $sxs_lang_error = '
  16. <h1 style="color:red">Error:</h1>
  17. Sorry!Your Check Code is wrong.Please go back and try again!
  18. ';
  19.  
  20. //输入验证码的表格
  21. $sxs_lang_msg = '
  22. <br /><abbr title="Just check you are a person not a robot :)">Check Code</abbr>  <img alt="If you cannot see the CheckCode image,please refresh the page again!" src="'.$sxs_dir.'/image.php" />
  23. <input type="text" name="sxscode" maxlength="4" style="width:60px" title="Type here what you see in the left image" />
  24. ';
  25.  
  26.  
  27. @session_start();
  28.  
  29. //将插件载入WP
  30. add_action('comment_form','show_sxs');
  31. add_filter('preprocess_comment','check_sxs');
  32.  
  33.  
  34. //在回复框处显示验证码
  35. function show_sxs(){
  36.     global $sxs_lang_msg;
  37. echo $sxs_lang_msg;
  38. }
  39.  
  40. //发表评论时确认验证码
  41. function check_sxs($commentdata){
  42. if ($_POST['sxscode'] != $_SESSION['sxscode'] || time() > $_SESSION['sxscode_offtime']) {
  43. unset($_SESSION['sxscode']);unset($_SESSION['sxscode_offtime']);
  44. global $sxs_lang_error;
  45. die(__($sxs_lang_error));
  46. }
  47.     return $commentdata;
  48. }
  49. ?>

SidXSpam-image.php代码详解

2008年02月5日,星期二

 image.php主要是生成一个图片文件

  1. <?
  2.  
  3. $sxscode = '';//初始化
  4. $sxscode_len = 4;//验证码长度
  5.  
  6. //-----------
  7. //验证码范围,如果包含字母+数字组合则保留前一句,只需要数字则保留后一句
  8. $sxsarray = array('a','b','c','d','e','f','g','h','i','j','k','m','n','p','q','r','s','t','u','v','w','x','y','z','1','2','3','4','5','6','7','8','9','0');
  9. //$sxsarray = array('1','2','3','4','5','6','7','8','9','0');
  10. //-----------
  11.  
  12. //随机排序数列
  13. shuffle($sxsarray);
  14.  
  15. //随机数种子,PHP版本>4.2 可去除
  16. function make_seed() {
  17. list($usec, $sec) = explode(' ', microtime());
  18. return (float)$sec + ((float)$usec * 100000);
  19. }
  20. mt_srand(make_seed());
  21. //------------------------------
  22.  
  23.  
  24. //获取随机数
  25. for( ;strlen($sxscode)<=$sxscode_len-1; ){
  26. $sxscode .= $sxsarray[mt_rand(0, count($sxsarray))];
  27. }
  28.  
  29.  
  30. //写入服务器session,需要服务器session支持
  31. @session_start();
  32. $_SESSION['sxscode'] = $sxscode;
  33. $_SESSION['sxscode_offtime'] = time() + 15 * 60;
  34.  
  35. //绘图,输出
  36. $im = imagecreate(50,20);
  37. $white = ImageColorAllocate($im, 255,255,255);
  38. $black = ImageColorAllocate($im, 0,0,0);
  39. imagestring($im, 5, 6, 3, $sxscode, $black);
  40. header("Content-type: image/PNG");
  41. ImagePNG($im);
  42. ImageDestroy($im);
  43. ?>

WP反垃圾评论利器——SidXSpam

2008年02月5日,星期二

前一段时间,我的博客饱受SPAM困扰,WP原有的反SPAM根本不能抵御那些软件的进攻,平均每天接近百贴的垃圾评论。

第一时间想到了装一个发回复需验证码的插件,上网找了一下,有些插件的确很高级,采用英文单词的组合,还有录音播放单词,跟Windows Live 注册的那个验证码有点像,但仅压缩包就接近1M,显得臃肿了点。后来也懒得装,干脆要求注册后才能评论。

少了评论,感觉人气也差了点,还是开放评论吧,上网找个更好的验证插件,找到了WP-ImgCode,原作是http://www.dualface.com/的dualface开发的。适用了一下,发现了有几个小BUG,又发现台湾人chweng稍加修改的http://blog.chweng.idv.tw/wordpress/wp-imgcode-mod。总的感觉还不错,对它的代码研究了一下,发现了做这样一个插件难度其实并不大。而且WP-ImgCode使用的图片文件是自带的,虽然大小才40K,但如果用系统自带的字体,就更省了。总的来说,WP-ImgCode还是不错的,但我却想做一个更小的,更方便的Plugin。

我为它起名“SidXSpam”. Sid就是随机验证码的意思,一个大写“X”是不是像一个叉叉,把后面的“Spam”拒之门外。合起来意思就是“用Sid把Spam消灭”。

sxs.jpg
效果演示图

花了一个晚上加一个早上就写好了这个插件,还算比较快了。在本机上测试了一下,还挺好使的。又上传到博客上也能正常使用了。关于这个插件的代码,将会在稍后贴出来说明一下。

下载: http://photozero.net/sidxspam

Wordpress 2.3.2 更新

2007年12月30日,星期天

Wordpress 2.3.2 正式版已经于新年前夕发布了。

Wordpress 2.3.2的下载地址是
http://wordpress.org/wordpress-2.3.2.zip

这个版本修正了一些已知的BUG,另外还允许当数据库出错时自定义出错页面。