php撰写的日志

如何提高PHP编程效率

    用单引号代替双引号来包含字符串,这样做会更快一些。因为PHP会在双引号包围的字符串中搜寻变量,单引号则不会,注意:只有echo能这么做,它是一种 可以把多个字符串当作参数的“函数”(译注:PHP手册中说echo是语言结构,不是真正的函数,故把函数加上了双引号)。
1、如果能将类的方法定义成static,就尽量定义成static,它的速度会提升将近4倍。
2、$row[’id’] 的速度是$row[id]的7倍。
3、echo 比 print 快,并且使用echo的多重参数(译注:指用逗号而不是句点)代替字符串连接,比如echo $str1,$str2。
4、在执行for循环之前确定最大循环数,不要每循环一次都计算最大值,最好运用foreach代替。
5、注销那些不用的变量尤其是大数组,以便释放内存。
6、尽量避免使用__get,__set,__autoload。
7、require_once()代价昂贵。
8、include文件时尽量使用绝对路径,因为它避免了PHP去include_path里查找文件的速度,解析操作系统路径所需的时间会更少。
9、如果你想知道脚本开始执行(译注:即服务器端收到客户端请求)的时刻,使用$_SERVER[‘REQUEST_TIME’]要好于time()。
10、函数代替正则表达式完成相同功能。
11、str_replace函数比preg_replace函数快,但strtr函数的效率是str_replace函数的四倍。
12、如果一个字符串替换函数,可接受数组或字符作为参数,并且参数长度不太长,那么可以考虑额外写一段替换代码,使得每次传递参数是一个字符,而不是只写一行代码接受数组作为查询和替换的参数。
13、使用选择分支语句(译注:即switch case)好于使用多个if,else if语句。
14、用@屏蔽错误消息的做法非常低效,极其低效。
15、打开apache的mod_deflate模块,可以提高网页的浏览速度。
16、数据库连接当使用完毕时应关掉,不要用长连接。
17、错误消息代价昂贵。
18、在方法中递增局部变量,速度是最快的。几乎与在函数中调用局部变量的速度相当。
19、递增一个全局变量要比递增一个局部变量慢2倍。
20、递增一个对象属性(如:$this->prop++)要比递增一个局部变量慢3倍。
21、递增一个未预定义的局部变量要比递增一个预定义的局部变量慢9至10倍。
22、仅定义一个局部变量而没在函数中调用它,同样会减慢速度(其程度相当于递增一个局部变量)。PHP大概会检查看是否存在全局变量。
23、方法调用看来与类中定义的方法的数量无关,因为我(在测试方法之前和之后都)添加了10个方法,但性能上没有变化。
24、派生类中的方法运行起来要快于在基类中定义的同样的方法。
25、调用带有一个参数的空函数,其花费的时间相当于执行7至8次的局部变量递增操作。类似的方法调用所花费的时间接近于15次的局部变量递增操作。
26、Apache解析一个PHP脚本的时间要比解析一个静态HTML页面慢2至10倍。尽量多用静态HTML页面,少用脚本。
27、除非脚本可以缓存,否则每次调用时都会重新编译一次。引入一套PHP缓存机制通常可以提升25%至100%的性能,以免除编译开销。
28、尽量做缓存,可使用memcached。memcached是一款高性能的内存对象缓存系统,可用来加速动态Web应用程序,减轻数据库负载。对运算码 (OP code)的缓存很有用,使得脚本不必为每个请求做重新编译。
29、当操作字符串并需要检验其长度是否满足某种要求时,你想当然地会使用strlen()函数。此函数执行起来相当快,因为它不做任何计算,只返回在 zval 结构(C的内置数据结构,用于存储PHP变量)中存储的已知字符串长度。但是,由于strlen()是函数,多多少少会有些慢,因为函数调用会经过诸多步 骤,如字母小写化(译注:指函数名小写化,PHP不区分函数名大小写)、哈希查找,会跟随被调用的函数一起执行。在某些情况下,你可以使用isset() 技巧加速执行你的代码。
(举例如下)
if (strlen($foo) < 5) { echo “Foo is too short”$$ }
(与下面的技巧做比较)
if (!isset($foo{5})) { echo “Foo is too short”$$ }
调用isset()恰巧比strlen()快,因为与后者不同的是,isset()作为一种语言结构,意味着它的执行不需要函数查找和字母小写化。也就是说,实际上在检验字符串长度的顶层代码中你没有花太多开销。
34、当执行变量$i的递增或递减时,$i++会比++$i慢一些。这种差异是PHP特有的,并不适用于其他语言,所以请不要修改你的C或Java代码并 指望它们能立即变快,没用的。++$i更快是因为它只需要3条指令(opcodes),$i++则需要4条指令。后置递增实际上会产生一个临时变量,这个 临时变量随后被递增。而前置递增直接在原值上递增。这是最优化处理的一种,正如Zend的PHP优化器所作的那样。牢记这个优化处理不失为一个好主意,因 为并不是所有的指令优化器都会做同样的优化处理,并且存在大量没有装配指令优化器的互联网服务提供商(ISPs)和服务器。
35、并不是事必面向对象(OOP),面向对象往往开销很大,每个方法和对象调用都会消耗很多内存。
36、并非要用类实现所有的数据结构,数组也很有用。
37、不要把方法细分得过多,仔细想想你真正打算重用的是哪些代码?
38、当你需要时,你总能把代码分解成方法。
39、尽量采用大量的PHP内置函数。
40、如果在代码中存在大量耗时的函数,你可以考虑用C扩展的方式实现它们。
41、评估检验(profile)你的代码。检验器会告诉你,代码的哪些部分消耗了多少时间。Xdebug调试器包含了检验程序,评估检验总体上可以显示出代码的瓶颈。
42、mod_zip可作为Apache模块,用来即时压缩你的数据,并可让数据传输量降低80%。
43、在可以用file_get_contents替代file、fopen、feof、fgets等系列方法的情况下,尽量用 file_get_contents,因为他的效率高得多!但是要注意file_get_contents在打开一个URL文件时候的PHP版本问题;
44、尽量的少进行文件操作,虽然PHP的文件操作效率也不低的;
45、优化Select SQL语句,在可能的情况下尽量少的进行Insert、Update操作(在update上,我被恶批过);
46、尽可能的使用PHP内部函数(但是我却为了找个PHP里面不存在的函数,浪费了本可以写出一个自定义函数的时间,经验问题啊!);
47、循环内部不要声明变量,尤其是大变量:对象(这好像不只是PHP里面要注意的问题吧?);
48、多维数组尽量不要循环嵌套赋值;
49、在可以用PHP内部字符串操作函数的情况下,不要用正则表达式;
50、foreach效率更高,尽量用foreach代替while和for循环;
51、用单引号替代双引号引用字符串;
52、“用i+=1代替i=i+1。符合c/c++的习惯,效率还高”;
53、对global变量,应该用完就unset()掉;
转载网络.

网站信息查询工具

最近花了点时间写己几个对站长实用的工具。当然还有很多可以做有时间将其补上去.希望能帮到大家.
Martin MD5在线加解密
Martin alexa排名查询
Martin Google PageRank查询
下面是一些seo方面的知识。
站外SEO
站外SEO,也可以说是脱离站点的搜索引擎技术,命名源自外部站点对网站在搜索引擎排名的影响,这些外部的因素是超出网站的控制的。最有用功能最强大的外部站点因素就是反向链接,即我们所说的外部链接。毫无疑问,外部链接对于一个站点收录进搜索引擎结果页面起到了重要作用。
那么如何产生高质量的反向链接呢?

高质量的内容
产生高质量的外部链接最好的方法就是书写高质量的内容,你的文章能够让读者产生阅读的欲望而对文章进行转载。
合作伙伴、专业交换
与合作伙伴互相推荐链接。与行业网站、相关性网站进行链接。
分类目录
将网站提交到DMOZ目录、yahoo目录、ODP目录一个一些专业目录网站。
社会化书签
将网站加入百度搜藏、雅虎收藏、Google书签、QQ书签等社会化书签

站内SEO
站内SEO优化的几个重要因素:

域名选择
选择域名有大量的学问,其重要的一点是尽量选择包括关键词的域名。其次查看这个域名之前是否有注册过。如果之前有高质量的站点和它做反向链接,那你就受益了;但是也有可能做反向链接的都是一些质量不好的站点,那你可能会被搜索引擎不友好一段时间了。
关键词设置
为你的文章增加新的关键词将有利于搜索引擎的“蜘蛛”爬行文章索引,从而增加网站的质量。但不要堆砌太多的关键词,应该考虑“人们在搜索引擎中找到这篇文章,会搜索什么样的关键词”。
这些关键词需要在你的文章中被频繁的提及,可以遵循下面的方法:
关键词应该出现在网页标题标签里面;
在网页导出链接的链接文字中包含关键词;
用粗体显示关键词(至少试着做一次);
在标签中提及该关键词(关于如何运用head标签有过争论,但一致都认为h1标签比h2、h3、 h4的影响效果更好,当然有些没有运用head标签的网页也有很高的PR值);
图像ALT标签可以放入关键词;
整个文章中都要包含关键词,但最好在第一段第一句话就放入;
在元标签(meta 标签)放入关键词,建议关键词密度最好在5-20% 之间。
站点设计
搜索引擎更喜欢友好的网页结构,无误的代码和明确导航的站点。确保你的页面都是有效的和在主流浏览器中的可视化。搜索引擎不喜欢太多的Flash、i frames和java script脚本,所以保持站点的干净整洁,也有利于搜索引擎“蜘蛛”更快更精确的爬行到你网站的索引。
站点的内部链接
搜索引擎的工作方式是通过“蜘蛛”程序抓取网页信息,追踪你写的内容和通过网页的链接地址来寻找网页,抽取超链接地址。许多SEO专家都建议网站提供网站地图,在网站上的每个页面之间最好都有一个到两个的深入链接。网站要做的第一步是确保导航中包含目录页面 ,也要确保每个子页面都有链接回到主页面和其它的重要页面。
有规律的更新
网站更新的次数越频繁,搜索引擎蜘蛛爬行的也就越频繁。这意味着网站新文章几天甚至几小时内就可以出现在索引中,而不需要等几个星期。这是网站最好的受益方式。
导出链接
导出链接会提高网站在搜索引擎中的排名,在文章中链接到其它相关站点对读者们是有用的,也有一些轶趣的证据来支持这种理论。太多的导出链接将影响降低你的网站,应该“适度是关键”。
每篇文章的主题
一个页面的主题越紧凑,搜索引擎对它的排名就越好。有时发现你写了很长的文章,覆盖了一些不同的话题,它们的相关性并不高,所以在搜索引擎上的排名也不好。如果你关心搜索引擎的排名,那最好把这样的文章切块,分成几个主题更密切的文章。最简单的方法是:选取关键词,围绕关键词书写文章,内容集中,不要写的过宽。
写适宜长度的文章
太短的文章不能获得较高的排名,一般控制每篇文章至少有300个字。另一方面,也不要让文章显得太长,因为这将不利于你保持关键词的密度,文章看上去也缺少紧凑。研究显示过长的文章会急剧减少读者的数量,他们在看第一眼的时候就选择了关闭文章。
避免内容重复
搜索引擎在使用指南中严重警告过关于多个网页相同内容的问题。不管这些网页是你拥有的还是别人拥有的。因为一系列的垃圾站点就是不断复制网页内容(也窃取别人网站内容)。有一些争论关于什么样的内容算复制,其实要看这些内容是否对你的网站有用来选择。
目录的数量
当我的目录过多的时候,我自己都会陷入麻烦。我认为大站点的等级比小站高,当然一些小站点也有高的等级,这并不是标准。目录越多,搜索引擎搜索的也就越全面。如果你有太多的页面,你需要组织它们以方便搜索引擎爬行。
提交到搜索引擎
如果你做了所有站内SEO都该做的事,网站却还没有出现在搜索引擎中。那是因为搜索引擎还没有开始收录,每个搜索引擎都允许用户提交未收录站点,这个工程一般要等待3-5天。
SEO是依据通过对长期摸索、观察得出来的技术与经验,利用搜索引擎录取网站的规则,将网站的整体结构、网站布局、关键词分布及密度进行优化,使网站对搜索引擎的抓取有友好性,从而进行搜索引擎优化,达到网站提高排名的效果。由于搜索引擎的排名规则及算法是是在不断改变中的,而且这些规则和算法又是商业机密,所以不可能达到保证排在某几位的效果的。
seo=更多页面的收录+页面文字的友好安排+转化率
SEO分为白帽SEO和黑帽SEO,白帽SEO就是正规合理的运作,黑帽SEO就是作弊手法,下面介绍几种常见的作弊方法,希望大家不要用
桥页(doorway pages)
通常是用软件自动生成大量包含关键词的网页,然后从这些网页做自动转向到主页。目的是希望这些以不同关键词为目标的桥页在搜索引擎中得到好的排名。当用户点击搜索结果的时候,会自动转到主页。有的时候是在桥页上放上一个通往主页的链接,而不自动转向。大部分情况下,这些桥页都是由软件生成的。你可以想象,生成的文字是杂乱无章,没有什么逻辑的。如果是由人写出来的真正包含关键词的文章,就不是桥页了。
关键词堆砌(keyword stuffing)
在网页中大量堆砌关键词,希望提高关键词密度,提高网页针对关键词的相关度。关键词堆砌可以在很多地方,比如在用户可以看到的文章本身中,也有在title网站标题,关键词标签keywords,说明标签description中。随着搜索引擎算法的改进,关键词密度已经不是一个重要的因素。
隐藏文字(hidden text)
隐藏文字是在网页的HTML文件中放上含有关键词的文字,但这些字不能被用户所看到,只能被搜索引擎看到。可以有几种形式,比如说超小字号的文字,与背景同样颜色的文字,放在评论标签当中的文字,放在表格input标签里面的文字,通过样式表把文字放在不可见的层上面等等。其目的也都是想提高网页的相关性。有的时候,有的人还在这些地方放上与网站内容无关的,但是很热门的关键词,希望网页能在这些热门关键词下得到好的排名和流量。
隐藏链接(hidden link)
隐藏链接和隐藏文字相似,但是区别是把关键词放在链接里面,而这个链接也是用户所看不到的。
隐藏页面(cloaked page)
有的网页使用程序或脚本来检测来访问的是搜索引擎还是普通用户。如果是搜索引擎,网页就返回经过优化的网页版本。如果来访的是普通人,返回的是另外一个版本。这种作弊方式,通常用户无法发现。因为一旦你的浏览器去看这个网页,无论是在页面上还是在HTML源文件中,你所得到的都已经是与搜索引擎看到的不同的版本。检测的方法是,看一下这个网页的快照。
细微文字
许多做搜索引擎优化的人士明白隐藏文字可能会遭到惩罚,所以就将本来隐藏的文字以细微的字体暴露出来。细微文字即使是使用微小的字体在网页不显眼的地方书写带有关键词的句子。一般这些文字是放在网页的最顶端或者最底部。这些文字的色彩虽然不是和隐藏文字那样与背景使用相同颜色,但是经常也以非常相近的颜色出现。
在搜索引擎眼中,像“版权所有”这样的声明性的文字一般是用迷你字体来显示的。这些细微文字一般会被浏览者忽视,但是他们组成的句子会有滥用的嫌疑。

php 配置文件 php.ini 详细介绍

View Code PHP;;;;;;;;;;;;;;;;;
;; 关于php.ini ;;
;;;;;;;;;;;;;;;;;
; 这个文件必须命名为’php.ini’并放置在httpd.conf中PHPINIDir指令指定的目录中。
; 最新版本的php.ini可以在下面两个位置查看:
; http://cvs.php.net/viewvc.cgi/php-src/php.ini-recommended?view=co
; http://cvs.php.net/viewvc.cgi/php-src/php.ini-dist?view=co
 
;;;;;;;;;;;;
;; 语法 ;;
;;;;;;;;;;;;
; 该文件的语法非常简单。空白字符和以分号开始的行被简单地忽略。
; 章节标题(例如: [php])也被简单地忽略,即使将来它们可能有某种意义。
;
; 设置指令的格式如下:
; directive = value
; 指令名(directive)是大小写敏感的!所以"foo=bar"不同于"FOO=bar"。
; 值(value)可以是:
; 1. 用引号界定的字符串(如:"foo")
; 2. 一个数字(整数或浮点数,如:0, 1, 34, -1, 33.55)
; 3. 一个PHP常量(如:E_ALL, M_PI)
; 4. 一个INI常量(On, Off, none)
; 5. 一个表达式(如:E_ALL &amp; ~E_NOTICE)
;
; INI文件中的表达式仅使用:位运算符、逻辑非、圆括号:
; | 位或
; &amp; 位与
; ~ 位非
; ! 逻辑非
;
; 布尔标志用 On 表示打开,用 Off 表示关闭。
;
; More >

Web 设计与开发终极资源大全

来自网络。摘抄一下。
1. 函数与类库
A. CAPTCHA
CAPTCHA 用来防止恶意表单发布,以下 CAPTCHA 系统可以轻松集成到你的程序中:
reCAPTCHA
这是目前最流行的 CAPTCHA 机制,该机制同时是一个古籍数字化工程的一部分,用户在验证的同时,也帮助辨认一些不够清晰的估计扫描。reCAPTCHA 还有一个 Perl 模块 实现该功能。
Securimage
这个一个免费的,开源 PHP CAPTCHA 脚本。
freeCap
基于 GPL 协议的 CAPTCHA 脚本
HN CAPTCHA
PHP CAPTCHA 脚本,基于 LGPL 协议
B. 日期处理
日期操作并不轻松,尽管 PHP 和 Perl 内置了大量此类函数,但未必满足你的需要,以下是几个很好用的日期函数:

PEAR Date
通用 PHP 日期类库
Date Class
PHP 类库,计算及其增减与日期差异
Date manipulation in PHP
PHPBuilder.com 上的一个教程,讲解如何进行日期处理
Date::Calc Perl Module
Perl模块,用于格列高利历法的日期计算

C. 图形处理
图片缩放,添加水印等:

Image Manipulation Class
在 PHP 中缩放,反转,旋转图片
PHP Thumbnailer
一个轻量级图片缩略图工具
PHP GD
一个强大的图片处理类库
Perl GD
Perl 图片处理模块

D. 表单验证
表单验证不仅保证用户填写的准确,还可以防止攻击:

validaForms
一个 PHP 表单验证类库
User Input Validation Class
一个 PHP More >

php 简单 无级分类 无递归

记录一下,以便以后使用。
替换成相应的字段.
代码如下:

View Code PHP public static function toTree($rows) {
if ( !is_array($rows) ) return false;
$tree = array();
$index = array();
foreach ( $rows as More >

ubuntu php sphinxapi 使用方法

配置文件:youconfig.conf
建立索引:

View Code SHELLsource src1
{
type = mysql
sql_host = localhost
sql_user = root
sql_pass More >

PHP面向对象技术OOP(全面讲解)、概念开始

1.面向对象的概念
面向对象编程(Object Oriented Programming, OOP, 面向对象程序设计)是一种计算机编程架构,OOP的一条基本原则是计算机程序是由单个能够起到子程序作用的单元或对象组合而成,OOP达到了软件工程的三个目标:重用性、灵活性和扩展性。为了实现整体运算,每个对象都能够接收信息、处理数据和向其它对象发送信息。面向对象一直是软件开发领域内比较热门的话题,首先,面向对象符合人类看待事物的一般规律。其次,采用面向对象方法可以使系统各部分各司其职、各尽所能。为编程人员敞开了一扇大门,使其编程的代码更简洁、更易于维护,并且具有更强的可重用性。有人说PHP不是一个真正的面向对象的语言,这是事实。PHP 是一个混合型语言,你可以使用OOP,也可以使用传统的过程化编程。然而,对于大型项目,你可能需要在PHP 中使用纯的OOP去声明类,而且在你的项目里只用对象和类。这个概念我先不多说了,因为有很多朋友远离面向对象编程的主要原因就是一接触面向对象概念的时候就理解不上去, 所以就不想去学下去了。等读者看完整体内容后再去把概念搞明白吧。
2.什么是类,什么是对象,类和对象这间的关系
类的概念:类是具有相同属性和服务的一组对象的集合。它为属于该类的所有对象提供了统一的抽象描述,其内部包括属性和服务两个主要部分。在面向对象的编程语言中,类是一个独立的程序单位,它应该有一个类名并包括属性说明和服务说明两个主要部分。
对象的概念:对象是系统中用来描述客观事物的一个实体,它是构成系统的一个基本单位。一个对象由一组属性和对这组属性进行操作的一组服务组成。从更抽象的角度来说,对象是问题域或实现域中某些事物的一个抽象,它反映该事物在系统中需要保存的信息和发挥的作用;它是一组属性和有权对这些属性进行操作的一组服务的封装体。客观世界是由对象和对象之间的联系组成的。
类与对象的关系就如模具和铸件的关系,类的实例化结果就是对象,而对一类对象的抽象就是类。类描述了一组有相同特性(属性)和相同行为(方法)的对象。
上面大概就是它们的定义吧,也许你是刚接触面向对象的朋友,不要被概念的东西搞晕了,给你举个例子吧,如果你去中关村想买几台组装的PC机,到了那里你第一步要干什么,是不是装机的工程师和你坐在一起,按你提供的信息和你一起完成一个装机的配置单呀,这个配置单就可以想象成是类,它就是一张纸,但是它上面记录了你要买的PC机的信息,如果用这个配置单买10台机器,那么这10台机子,都是按这个配置单组成的,所以说这10台机子是一个类型的,也可以说是一类的。那么什么是对象呢,类的实例化结果就是对象,用这个配置单配置出来(实例化出来)的机子就是对象,是我们可以操作的实体,10台机子,10个对象。每台机子都是独立的,只能说明他们是同一类的,对其中一个机做任何动作都不会影响其它9台机器,但是我对类修改,也就是在这个配置单上加一个或少一个配件,那么装出来的9个机子都改变了,这是类和对象的关系(类的实例化结果就是对象)。
3.什么是面向对象编程呢?
就不说他的概念,如果你想建立一个电脑教室,首先要有一个房间, 房间里面要有N台电脑,有N张桌子, N把椅子, 白板,投影机等等,这些是什么,刚才咱们说了, 这就是对象,能看到的一个个的实体,可以说这个电脑教室的单位就是这一个个的实体对象,它们共同组成了这个电脑教室,那么我们是做程序,这和面向对象有什么关系呢?开发一个系统程序和建一个电脑教室类似,你把每个独立的功能模块抽象成类,形成对象,由多个对象组成这个系统,这些对象之间都能够接收信息、处理数据和向其它对象发送信息等等相互作用。就构成了面向对象的程序。

php 无极分类 详解

我们在用 php 制作网站时,分类是很重要的,在分类下面又再分类这第二个分类称为次分类,而现在大多数网站分类只分到第三类:
第一分类(父分类)–>第二分类(子分类)–>第三分类(孙分类)
这种亲缘分类越多,程序和数据库的控制就越加的复杂困难.在同一级的分类处理和控制是非常的简单的,因为只需要一个数据库来记载这一级的分类就行了,如:系统,新闻等分类,在这一级上处理是很简单的,但对一个网站来说一级分类是不够的,还需要再分类,如:
系统–>linux,windows
新闻–>linux 新闻,windows 新闻
这样分类就清晰些了,至少让人明白了,系统包括 linux 和 windows,而新闻包括 linux 新闻和 windows 新闻,为了让信息资料更加清晰,于是再继续分类:
linux–>系统工具,内核,编程语言,开发工具

分类到了第三级,信息资料的处理就更清晰了,也就是说为了很清晰地处理资料,分类越详细就越方便,这样即方便处理信息又方便网友目的明确地查找到需要的资料,但随着不断的细化分类,在程序和数据库的控制上就会越来越困难.
困难一:如何在数据库里处理这些互有关联的亲缘分类?
困难二:如何用 php 完成这种一目了然的关系?
这种分级多而细的分类是每个 php 程序员都必须解决的问题,因为制作一个好而出色的网站分类问题是不可避免的,而解决这个问题又是相当复杂的,其中最大的问题就是数据库的分类处理,因为如果数据库处理不当将会带来巨大的工作量甚至是不得不重新规划数据库…
这并不是夸张,因为很多人在数据库处理上就会采用一级分类建立一个数据库的做法,我当时也是采取这种方法处理分类的,因大多网站都是分到第三级,所以数据 库里只需三个分类数据库来进行处理.但是需要继续向下分类时,这种做法的弊端就显露出来了,因为越往下分,工作量,程序量将会巨增..
我要介绍的这种方法就是如何用一个分类数据库建立无限向下分级的分类方法,用过 windows 的读者都知道 windows 文件夹就可以建立无限分级的目录,可在目录下面继续建立目录,这样没完没了的分下去,Linux 的目录创建也有这种功能,我介绍的这个方法跟这种形式相同.
数据库的规划
前面谈到分类的复杂性,因此如何规划数据库便成为了实现无限分类非常重要的一步.
我曾介绍过论坛的数据库规划,不错论坛能够实现无限的跟接,无限分类便是这种形式的扩展,分类同样是这种子父的关联关系,所以分类的数据库就是如何确立明确这种子父关系,这里面有几个难点.
1)如何处理各分类的信息存储;
2)如何处理分类的亲缘关系;
3)如何处理对信息的查询;
亲缘关系的数据库处理与论坛的数据库处理类似,这里建个 type 的数据库用来处理分类:
建立字段:
id(int):用来记录各分类的自然序号
uid(int):用来记录该分类的父分类的 id 号
type(char):类别的名称
roue_id(varchar):亲缘树,以 :0:2:10:20: 的 id 连接表明亲源关系
roue_char(varchar):亲缘树,类似 :系统:linux:开发工具:gcc: (这个字段有没有都没关系,为了更方便地了解各亲缘关系当然字符表述比数字表述更直接^o^,不过最好加上这个字段)
这样一个无限分类的类别表就建立了起来,接下来就需要建立存储信息的数据库,处理查询一个表最方便所以这里建立一个表存储信息 type_message:
id(int):信息的序号;
typeid(int):所属类别的 id 号;
title(varchar):信息标题;
message(text):信息内容;
time:信息建立的时间;
这两个数据表就能够完成无限分类的这个任务了(两个表的辅助字段就没加了,读者可自行加入).
剩下的任务就全部交由 php 来处理完成.
程序控制
实现无限分类这个功能中就属这一步最为复杂辛苦,首先看看程序需要完成的步骤:
1)创建分类上传;
2)创建信息上传;
3)明确显示各分类及其之间的关系;
4)处理查询功能;
5)如何处理编辑和删除的功能;
而这五步中最为困难的就是第五个步骤,因为对分类的编辑和删除涉及到一至性的问题.
下面我就逐一描述 php 的程序控制:
1)创建分类上传
在介绍这个功能前,先介绍一下 explode( ) 这个函数,这是个字串处理函数,用来分解字串的,具体的用法,例:
分解”0:1:2:3:4″里的数字

$val=”0:1:2:3:4″;
$rid=explode(“:”,$val);

经过 explode( ) 函数处理,$val 内的所有数字都分解到 $rid 数组中了,要引用时只需打印:echo “$rid[0],$rid[1],$rid[2]…”; 就行了.explode( ) 函数在整个分类处理中起着非常重要的作用,好现在开始介绍无现分类的程序控制.
可以假设个总分类 0 ,所有的分类都是它的子孙分类,现在来建立第一个分类”系统”,来看看它在数据库的存储形式:
id | More >

uchome 数据库表结构 浅析

uchome_member 用户数据表
数据表说明:存放uchome用户数据
属性说明:
uid mediumint(8) — 用户uid
username char(15) — 用户名id
password char(32) — 用户密码
uchome_adminsession 管理员后台在线记录
数据表说明:后台登录记录
属性说明:
uid mediumint(8) — 登录ID
ip char(15) — 登录ID
dateline int(10) — 登录日期
errorcount tinyint(1) — 密码错误次数
uchome_album 相册
数据表说明:存放相册资料
属性说明:
albumid mediumint(8) –相册ID
albumname varchar(50) — 相册名称
uid mediumint(8) — 用户ID
username varchar(15) — 用户名
dateline int(10) -- 创建日期
updatetime int(10) -- 更新日期
picnum smallint(6) -- 图片数量
pic varchar(60) -- 最近图片地址
picflag tinyint(1) --
friend tinyint(1) --好友可见度
password varchar(10) --相册密码
target_ids text More >

常用的正则表达式[asp,php,jsp,js,c#]

匹配中文字符的正则表达式: [\u4e00-\u9fa5]
匹配双字节字符(包括汉字在内):[^\x00-\xff]
应用:计算字符串的长度(一个双字节字符长度计2,ASCII字符计1)
String.prototype.len=function(){return this.replace([^\x00-\xff]/g,”aa”).length;}
匹配空行的正则表达式:\n[\s| ]*\r
匹配HTML标记的正则表达式:/<(.*)>.*<\/\1>|<(.*) \/>/
匹配首尾空格的正则表达式:(^\s*)|(\s*$)
应用:javascript中没有像vbscript那样的trim函数,我们就可以利用这个表达式来实现,如下:
String.prototype.trim = function()
{
return this.replace(/(^\s*)|(\s*$)/g, “”);
}
利用正则表达式分解和转换IP地址:
下面是利用正则表达式匹配IP地址,并将IP地址转换成对应数值的Javascript程序:
function IP2V(ip)
{
re=/(\d+)\.(\d+)\.(\d+)\.(\d+)/g //匹配IP地址的正则表达式
if(re.test(ip))
{
return RegExp.$1*Math.pow(255,3))+RegExp.$2*Math.pow(255,2))+RegExp.$3*255+RegExp.$4*1
}
else
{
throw new Error(“Not a valid IP address!”)
}
}
不过上面的程序如果不用正则表达式,而直接用split函数来分解可能更简单,程序如下:
var ip=”10.100.20.168″
ip=ip.split(“.”)
alert(“IP值是:”+(ip[0]*255*255*255+ip[1]*255*255+ip[2]*255+ip[3]*1))
匹配Email地址的正则表达式:\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*
匹配网址URL的正则表达式:http://([\w-]+\.)+[\w-]+(/[\w- ./?%&=]*)?
利用正则表达式去除字串中重复的字符的算法程序:[注:此程序不正确,原因见本贴回复]
var s=”abacabefgeeii”
var s1=s.replace(/(.).*\1/g,”$1″)
var re=new RegExp(“["+s1+"]“,”g”)
var s2=s.replace(re,””)
alert(s1+s2) //结果为:abcefgi
我原来在CSDN上发贴寻求一个表达式来实现去除重复字符的方法,最终没有找到,这是我能想到的最简单的实现方法。思路是使用后向引用取出包括重复的字符,再以重复的字符建立第二个表达式,取到不重复的字符,两者串连。这个方法对于字符顺序有要求的字符串可能不适用。
得用正则表达式从URL地址中提取文件名的javascript程序,如下结果为page1
s=”http://www.9499.net/page1.htm”
s=s.replace(/(.*\/){0,}([^\.]+).*/ig,”$2″)
alert(s)
利用正则表达式限制网页表单里的文本框输入内容:
用 正则表达式限制只能输入中文:onkeyup=”value=value.replace(/[^\u4E00-\u9FA5]/g,”)” onbeforepaste=”clipboardData.setData(‘text’,clipboardData.getData(‘text’).replace(/[^\u4E00-\u9FA5]/g,”))”
用 正则表达式限制只能输入全角字符: onkeyup=”value=value.replace(/[^\uFF00-\uFFFF]/g,”)” onbeforepaste=”clipboardData.setData(‘text’,clipboardData.getData(‘text’).replace(/[^\uFF00-\uFFFF]/g,”))”
用 正则表达式限制只能输入数字:onkeyup=”value=value.replace(/[^\d]/g,”) “onbeforepaste=”clipboardData.setData(‘text’,clipboardData.getData(‘text’).replace(/[^\d]/g,”))”
用 正则表达式限制只能输入数字和英文:onkeyup=”value=value.replace(/[\W]/g,”) “onbeforepaste=”clipboardData.setData(‘text’,clipboardData.getData(‘text’).replace(/[^\d]/g,”))”