PHP 修炼【五】

来源:互联网 发布:充电电流检测软件 编辑:程序博客网 时间:2024/04/28 03:18

showmessage()、cpmsg()、showsettings()
有两个global.func.php分别在include与admin里面。
forumdata存放缓存、模板缓存、上传附件等,因此属性必须是777。
archiver与wap存放了两个子系统,分别为搜索引擎和手机用户准备的
重新计算积分的条件,用户可以定义总积分计算公式,但默认情况下,总积分等于积分1,updatecredits(),updatepostcredits()函数重新计算积分。
对$_GET、$_POST、$_COOKIE释放成全局变量,对于数组中以_开头的KEY会被忽略。
由于搜索引擎抓取的很频繁,因此可以从技术上禁止蜘蛛的访问,Discuz!会输出HTTP/1.1 403 Forbidden。
unset()函数用来释放一些变量,保障安全
preg_match("/[/d/.]{7,15}/", $onlineip, $onlineipmatches)用来对IP地址做一些严格过滤。
onlineip需要严格的校验,因为HTTP_X_FORWARDED_FOR是不能相信的。
theads表与posts表都有fid字段,虽然数据库结构有些冗余,但这样的设计很常见,避免过多的连表操作。
random() formhash() quescrypt() $_DSESSION['sid'] = random(6) $_DSESSION['seccode'] = random(6, 1) 函数会随机
filemtime()函数用来取得文件的最后修改时间,也会产生IO操作,建议封装一下。
touch()函数可以产生一个空文件,也可以改变文件的最后访问时间,不影响内容。
sid是cdb_sessions表的主键,cdb_sessions表是一种内存表,内存表中不能设置text类型字段。
require、include的区别。
$_DCOOKIE、$_DSESSION、$_DCACHE
版本判断使用 PHP_VERSION > '5.1'


--------------------------------------------------------------------------------------------
$a = file_get_contents()

$b = ob_get_contents()

readfile()

$arr = file()

 

如果模板提供打包上传功能,服务器目录需要设置成777属性。

forumdata cache log attachments

                         discuz smtay
                         phpbb
模板大致可以分成解释型、编译型、编译缓存型。

 

对于多风格程序,当用户切换风格时,不需要每次重新编译模板。

Discuz!用户表由几张组成两张
forum表 members memberfields
        ------- ------------
           |        |
         定长表   变长表


$discuz_action定义了多种动作,方便系统做日志。
discuz的页面缓存,当磁盘空间不大于1M的时,就不让写了。
编辑器不是100%兼容的,少量功能在不同浏览器中有差别或者不可使用。


为了避免安全隐患,discuz的远程上传使用了一组自己封装的FTP函数,例如dftp_connect。

在数据库设计上Discuz使用整型变量来描述时间,这样做有诸多好处。
showmessage() 当提示信息中有“返回”字样,会产生一个返回上一页的链接。


计划任务中的多个任务不会同时执行。


Discuz!使用checklowerlimit()函数检查积分下限。

制作新的Discuz!模板,仅需要将需要变更的模板拷贝出来存放即可,没有修改的会使用默认模板。
由于语言包是编译到模板缓存中的,所以例如“引用”等在js里面的文字使用英文quote,而没使用中文。
Discuz!采用GIF图在一定程度上可以防止灌水机

会员组与管理组在cdb_members表中分别用groupid、adminid表示,实际上管理组只有管理员、超级版主和版主,是不能继续添加的。
用户权限由系统设置、版块设置、用户组、用户等四个级别叠加产生,优先级也是系统设置最高。
用户组信息全部被缓存在formdata/cache/下,例如usergroup_1.php等。
当用户的积分超过用户组的最大上限,当用户查看帖子或者下次时会晋升。


fup表示论坛的父ID,一旦fup等于0,则type一定定于group。
cdb_forums表只存了部分论坛权限,其它的权限在cdb_forumfields表里。
在不同的论坛之间移动帖子,需要对用户的权限重新判断。


积分下限为0的用户组不允许被删除。
系统保留组都有特殊用途,无法被删除。
通过getgroupid()函数可以更新用户所在组信息。


mysql_insert_id()函数存在缺陷,可以使用SQL的"SELECT last_insert_id()"查询解决。
mysql_close()不需要强制使用。在页面执行完毕时,会自动卸载。
MySQL的UTF8编码使用"utf-8"字样,而HTTP编码使用"utf8"字样即可,的确很麻烦。
D SET sql_mode=''使得SQL规则变得宽松


语言包不仅仅包含在模板中,在install目录下也有安装需要的语言包文件。
在Discuz!中可以使用$page = max(1, $page)来约束$page的取值。
在每个目录下放一个空的index.htm文件已防止由于Apache设置不同产生文件列表。
在CSS语法中,如果想让IE与Firefox兼容可以通过!important来设置。


chr()-ord()

hexdec()  dechex()

bindec() decbin()

 


在cdb_sessions表中保存用户最后一次使用的验证码的十进制数。
使用seccodeconvert()函数可以将验证码转换成ASCII码。
在Discuz!模板使用中,涉及到的parse_template()函数,当无法读取到语言包的时候会中止。template.lang.php

可以使用{template header}引用子模板,可以使用{DISCUZ_ROOT}来引用常量。

SET NAMES 'utf-8' 可以设置字符集为UTF8类型。
在同一个$db->query()函数中不可以同时执行多条SQL语句。
可以使用wipespecial()函数对路径进行过滤,主要是过滤".."、"/r"、"/n"。
include/security.inc.php 文件用于防止CC攻击,二次请求等。
get_magic_quotes_gpc()函数可以获取到PHP对于引号的转义设置,当返回1时说明输入中的“'”会被转义成“/'”。
当PHP_VERSION > 5.1 时,需要对时区进行软纠正。
$tpp表示每页显示条目数,$ppp也是。

$cachelost用于标示缓存是否丢失。

在执行上一条计划任务的时候,就检索出下一个需要执行的计划任务,并存储在cdb_crons表中。


rawurlencode() 函数与 urlencode() 的区别在于处理空格上。
addslashes()与mysql_real_escape_string()的区别在于后者对字符集的处理上。
readfile()与file_get_contents()的区别在于前者直接输出文件内容,后者仅赋值给变量。


伪静态需要对Web服务器进行设置,例如Apache服务器。
通过output()函数调用rewrite_thread()等系列函数把动态地址全部替换成静态地址。
伪静态并没有实际上把脚本静态化,好处在于对于搜索引擎的友好度提高了。
PM使用cdb_pms表,其中folder用来区分邮件所处文件夹,通过delstatus对删除状态进行判断。
当delstatus=0表示没有被任何人删除,当delstatus=1表示被发起者删除,delstatus=2表示被接收者删除。
PM搜索时会使用cdb_pmsearchindex表进行缓存。
当用户刷新页面,会根据cdb_members表的new字段判断出用户是否有最新的短消息。
javascript外部调用使用UpdateCache()函数对缓存进行更新与判断。
当rewrite开启,javascript外部调用使用jsrewrite()函数支持伪静态功能。

原创粉丝点击