标签归档:php

ip-国家查询之MySQL+PHP版

这个IP-国家查询库使用Webnet77整理的数据,包含了9万多个IP段,在免费数据中是最完整的了(原地址)。我把它转换成了MySQL数据表,同时加入了中文国家名。

使用时,先把SQL文件导入数据库。数据库有点大,完整大小8390KB,压缩后1.19MB,如果你无法一次性导入这么大的数据,可以考虑使用一些导入工具,比如Bigdump

查询时,先用ip2long()函数把xxx.xxx.xxx.xxx形式的IP(标准地址)转换成int数据(IPv4地址),然后执行查询:

$query = “SELECT * FROM iptocountry WHERE lower_bound <= $ip AND upper_bound >= $ip”;

详细代码就不写了,大致就是上面的那个意思。

下载SQL文件

解决Zend_Filter_Input中文乱码问题

Zend_Filter_Input默认会给所有通过的数据添加一个HtmlEntities的过滤器。不幸的是,这个HtmlEntities使用的是ISO-8859-1编码,如果你使用的是GB2312或者UTF-8一类的编码,那中文字符就惨了,乱码无疑。

想要避开这个问题,就不能再用$input->field的方式访问数据了,要用$input->getUnescaped(‘field’)的方式,这样会忽略掉默认的HtmlEntities过滤器。如果你仍然喜欢用$input->field的方式,往下看:

一个简单的解决方法是直接去改Zend/Filter/HtmlEntities.php文件,把构造函数(public function __construct($quoteStyle = ENT_COMPAT, $charSet = ‘ISO-8859-1’))里第二个参数的默认值改成你的网站使用的编码。

这个方法还有一个额外的好处,以后当你使用HtmlEntities时也无需再指定编码了。虽然通常不鼓励直接修改Zend Framework的源文件,但是这一点小小的改动不会有什么英系那个。唯一的弊端就是每次升级Zend Framework时必须再改一次。

另一个方法是用别的过滤器替换掉默认的HtmlEntities过滤器。你可以使用其他的标准过滤器,比如StringTrim;也可以模仿HtmlEntities写个你自己的html转移过滤器,用上你自己的网站编码;还可以创建一个空过滤器,不进行任何过滤。然后在实例化Zend_Filter_Input时这样写:

 $myFilter);
$input = new Zend_Filter_Input($filters, $validators, $data, $options);
?>

或者:

setDefaultEscapeFilter($myFilter);
?>

大功告成!

解决Xdebug与Zend Optmizer不兼容问题的方法

xdebug的官方手册中指出xdebug应当作为zend extension加载:

zend_extension_ts=”c:/php/modules/php_xdebug-4.4.1-2.0.2.dll”

但这样的话xdebug就会与ZendOptmizer冲突,导致Apache无法启动。

如何让xdebug与ZendOptmizer共存呢?解决方法就是不以zend extension的形式加载xdebug,用加载常规扩展的方法。把xdebug的dll文件放入php的ext文件夹中,然后在php.ini中加入:

extension=php_xdebug-4.4.1-2.0.2.dll

这样xdebug就能与ZendOptmizer共存了。

虽然phpinfo()里会提示:XDEBUG NOT LOADED AS ZEND EXTENSION,但据我观察这样并不影响xdebug的正常使用。

以上方法在WinXP,Apache2.2,PHP5.2,Xdebug2.0.3下试验成功。

用PHP生成随机数(另附PHP随机函数)

通常情况下,当我们要生成一个随机字符串时,总是先创建一个字符池,然后用一个循环和mt_rand()或rand()生成php随机数,从字符池中随机选取字符,最后拼凑出需要的长度。

function randomkeys($length)
{
	$pattern = '1234567890abcdefghijklmnopqrstuvwxyz
                ABCDEFGHIJKLOMNOPQRSTUVWXYZ,./&l
                t;>?;#:@~[]{}-_=+)(*&^%$£"!';    //字符池
	for($i=0;$i<$length;$i++)
	{
		$key .= $pattern{mt_rand(0,35)};    //生成php随机数
	}
	return $key;
}
echo randomkeys(8);

这个php随机函数能生成XC*=z~7L这样的字符串,够随机!

现在介绍另一种用PHP生成随机数的方法:利用chr()函数,省去创建字符池的步骤。

function randomkeys($length)
{
	$output='';
	for ($a = 0; $a < $length; $a++) {
		$output .= chr(mt_rand(33, 126));    //生成php随机数
	}
	return $output;
}
echo randomkeys(8);

在第二个php随机函数里,先用mt_rand()生成一个介于33到126之间的php随机数,然后用chr()函数转化成字符。查看ascii码表就会发现,33到126代表的正是第一个函数中字符池里的所有字符。第二个函数和第一个函数功能相同,而且更简洁。

2008年8月8日——PHP4最后一次更新

 GoPHP5

2008年8月8日是什么日子?北京奥运会开幕!没错!但如果你是一位PHP的使用者,你还必须知道——那天是PHP4最后一次更新的日子。

去年12月,php社区已经宣布停止对PHP4的支持,不过这只意味着PHP4不会添加新的功能,而对安全问题的修复仍然会继续(即中版本号不变,停留在4.4,而小版本号会继续增加,现在已经发布到4.4.8)。如果不出意外的话,29天后,对PHP4的安全问题修复也将不再提供,社区将完全放弃对PHP4的支持。

如果你仍然在用PHP4进行开发,那么在2008年8月8日后,你可能就惨了。Ivo Jansch描述了一幅可怕的情景:

  • 如果在2个月的时间里,黑客发现了PHP4暴露出的bug该怎么办?
  • 如果他们编写蜘蛛在互联网上搜寻PHP4程序该怎么办?
  • 如果他们用恶意代码攻击这些网站该怎么办?
  • 如果真的没有任何补丁来修补这些漏洞该怎么办?
  • 你那时候该怎么办?(除了像个没头苍蝇一样到处乱撞)

黑客可能已经发现了某些可以利用的漏洞,而他们故意等到8月8日以后,PHP4不再发布安全补丁后才进行攻击,从而让影响最大化。

开源软件的作者们早就开始积极转向PHP5了,其中包括著名的PEAR, phpMyAdmin, Drupal, Gallery和Zen Cart等。目前在GoPHP5上登记的开源项目已超过100个,而且仍然在不断增加中。长远来看,越来越多的开源软件将放弃使用PHP4。对于使用开源程序架设网站的经营者来说,继续停留在PHP4上,意味着更窄的软件选择面和无法获得软件的最新版本。

So,赶快阅读PHP4转移到PHP5的文章,让你的主机服务商给你更换PHP5的主机。你只有29天的时间。

Nexen发布08年6月的PHP统计数据

Nexen发布08年6月的PHP统计数据,该统计的数据源于对三千万个域名的跟踪调查。

统计数据显示:

  • PHP5.2.6市场份额增长迅速(因为PHP5.3仍未发布)。
  • PHP5在整个PHP市场中的份额达到38.93%,上升2%。
  • 份额最高的PHP版本是PHP4.4,占到39%;其次为PHP5.2的30%,PHP4.3位居第三,占19%。
  • 中国市场的PHP占有率仅为17.16。
  • 在国内各省中,PHP占有率最高的是澳门,89.61%;其次是广州,53.92%;青海第三,46.67%。

查看详细的统计数据信息,请访问:http://www.nexen.net/chiffres_cles/phpversion/18519-php_statistics_for_june_2008.php

PHP调查系统——LimeSurvey

limesurvey

LimeSurvey是一款开源的PHP调查系统,用官方的话来说,“LimeSurvey有许多种特性,它具有创造一个优雅的在线调查所需的一切元素。”

LimeSurvey具有以下特性:

  • 支持20多种问题类型
  • 强大的用户管理功能
  • 问卷安全设置
  • 允许创建调查分支,即根据之前选项的不同,之后的题目也不同
  • 允许将问题分组、分页显示
  • 允许自定义结果分析方式(例如设置不同问题的权重)
  • 允许在调查中集成图片和视频
  • 自动创建调查表的可打印版本
  • 可以将调查导出为多种格式(text, CSV, PDF, SPSS, queXML, MS Excel)
  • 可以通过email发送邀请和提醒
  • 允许自定义模板
  • 多语言支持,包括简体中文

与其他PHP调查系统相比,LimeSurvey功能十分强大,但同时也造成了一个缺点——上手难。不过一旦适应以后,相信你就可以随心所欲的按照自己的想法创建一个PHP调查问卷了。

想了解更多信息,你可以去LimeSurvey的官方网站:http://www.limesurvey.org/

LimeSurvey的下载是放在SourceForge上的,而SourceForge遭到了GFW的封锁。如果你需要下载的话,可以到这里下载LimeSurvey的最新稳定版本1.71Plus:http://www.mediafire.com/?ybdn1uytmmy