include/template.func.php在哪,Discuz!源代码分析系列:./include/global.func.php(3)

转自www.discuz.net 作者:郭鑫

/**

* 输出用的,这个时候可以做一点事情,比如说:把sid用正则写到form里面,rewrite规则启用后把论坛里面的forumdisplay.php?fid=1&page=2用正则换成forum-1-2.html。

* 并把ftp连接关掉,写入cache

*/

function output() {

global $sid, $transsidstatus, $rewritestatus, $ftp;

if(($transsidstatus = empty($GLOBALS['_DCOOKIE']['sid']) && $transsidstatus) || in_array($rewritestatus, array(2, 3))) {

if($transsidstatus) {

$searcharray = array

(

"/\]+\s*)href\=([\"|\']?)([^\"\'\s]+)/ies",

"/(\

)/is"

);

$replacearray = array

(

"transsid('\\3','

"\\1\n"

);

} else {

$searcharray = array

(

//"/\

"/\

"/\

"/\

"/\

);

$replacearray = array

(

//"

"rewrite_forum('\\1', '\\3', '\\4')",

"rewrite_thread('\\1', '\\5', '\\3', '\\6')",

"rewrite_profile('\\2', '\\3', '\\4')",

"rewrite_space('\\2', '\\3', '\\4')"

);

}

$content = preg_replace($searcharray, $replacearray, ob_get_contents());

ob_end_clean();

$GLOBALS['gzipcompress'] ? ob_start('ob_gzhandler') : ob_start();

echo $content;

}

if($ftp['connid']) {

@ftp_close($ftp['connid']);

}

$ftp = array();

if(defined('CACHE_FILE') && CACHE_FILE && !defined('CACHE_FORBIDDEN')) {

global $cachethreaddir;

if(diskfreespace(DISCUZ_ROOT.'./'.$cachethreaddir) > 1000000) {

$fp = fopen(CACHE_FILE, 'w');

if($fp) {

flock($fp, LOCK_EX);

fwrite($fp, empty($content) ? ob_get_contents() : $content);

}

@fclose($fp);

}

}

}

复制内容到剪贴板代码:

/**这一段都是rewrite规则,和上一个函数相映成趣~

* @para int $tid 帖子的id

* @para int $page 页数

* @para int $prevpage 上一页

* @para string $extra 附加的东东

*

* @return string 返回一个链接,如:

*/

function rewrite_thread($tid, $page = 0, $prevpage = 0, $extra = '') {

return '

}

function rewrite_forum($fid, $page = 0, $extra = '') {

return '

}

function rewrite_profile($uid, $username, $extra = '') {

return '

}

function rewrite_space($uid, $username, $extra = '') {

return '

}

复制内容到剪贴板代码:

/**

* 访问时段检查

* @para string $periods 允许访问的时段

* @para string showmessage 如果不允许访问的时段会员访问了的话出现的自定义提示

*

* @return TRUE or no return

*/

function periodscheck($periods, $showmessage = 1) {

global $timestamp, $disableperiodctrl, $_DCACHE, $banperiods;

if(!$disableperiodctrl && $_DCACHE['settings'][$periods]) {

$now = gmdate('G.i', $timestamp + $_DCACHE['settings']['timeoffset'] * 3600);

foreach(explode("\r\n", str_replace(':', '.', $_DCACHE['settings'][$periods])) as $period) {

list($periodbegin, $periodend) = explode('-', $period);

if(($periodbegin > $periodend && ($now >= $periodbegin || $now < $periodend)) || ($oeriodbegin < $periodend && $now >= $periodbegin && $now < $periodend)) {

$banperiods = str_replace("\r\n", ', ', $_DCACHE['settings'][$periods]);

if($showmessage) {

showmessage('period_nopermission', NULL, 'NOPERM');

} else {

return TRUE;

}

}

}

}

return FALSE;

}

复制内容到剪贴板代码:

/**

* 加密安全提问的,MD5加密

* @para int $qestionid

* @para string $anser

*

* @return string 返回加密后的字串

*/

function quescrypt($questionid, $answer) {

return $questionid > 0 && $answer != '' ? substr(md5($answer.md5($questionid)), 16, 8) : '';

}

复制内容到剪贴板代码:

/**

* 生成随机数(这里返回$hash名字有点点不合适,hash是包含key和value的,这里没有这样的意思)

* @para int $length 要生成的长度

* @para int $numeric 传入一个非零的数表示要生成的全是数字

*

* @return string 返回生成的字串

*/

function random($length, $numeric = 0) {

PHP_VERSION < '4.2.0' && mt_srand((double)microtime() * 1000000);

if($numeric) {

$hash = sprintf('%0'.$length.'d', mt_rand(0, pow(10, $length) - 1));

} else {

$hash = '';

$chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789abcdefghijklmnopqrstuvwxyz';

$max = strlen($chars) - 1;

for($i = 0; $i < $length; $i++) {

$hash .= $chars[mt_rand(0, $max)];

}

}

return $hash;

}

复制内容到剪贴板代码:

/**

* 删除目录和文件用的

* @para string $dirname 要删除的目录名

* @para boolean $keepdir 是否在删除文件后保留目录,也就是只清空目录

*

* @return boolean

*/

function removedir($dirname, $keepdir = FALSE) {

$dirname = wipespecial($dirname);

if(!is_dir($dirname)) {

return FALSE;

}

$handle = opendir($dirname);

while(($file = readdir($handle)) !== FALSE) {

if($file != '.' && $file != '..') {

$dir = $dirname . DIRECTORY_SEPARATOR . $file;

is_dir($dir) ? removedir($dir) : unlink($dir);

}

}

closedir($handle);

return !$keepdir ? (@rmdir($dirname) ? TRUE : FALSE) : TRUE;

}

复制内容到剪贴板代码:

/**

* 发信件用的,用到了include目录下的sendmail.inc.php

* @para string $email_to

* @para string $email_subject

* @para string $email_message

* @para string $email_from

*/

function sendmail($email_to, $email_subject, $email_message, $email_from = '') {

extract($GLOBALS, EXTR_SKIP);

require DISCUZ_ROOT.'./include/sendmail.inc.php';

}

复制内容到剪贴板代码:

/**

* 发送PM的函数

* @para int $toid 对方id

* @para string $subject PM主题

* @para int $fromid 发送方id

* @para string $from 发送方用户名

*/

function sendpm($toid, $subject, $message, $fromid = '', $from = '') {

extract($GLOBALS, EXTR_SKIP);

include language('pms');

if(isset($language[$subject])) {

eval("\$subject = addslashes(\"".$language[$subject]."\");");

}

if(isset($language[$message])) {

eval("\$message = addslashes(\"".$language[$message]."\");");

}

if(!$fromid && !$from) {

$fromid = $discuz_uid;

$from = $discuz_user;

}

$pmids = array();

foreach(explode(',', $toid) as $uid) {

if(is_numeric($uid)) {

$query = $db->query("INSERT INTO {$tablepre}pms (msgfrom, msgfromid, msgtoid, folder, new, subject, dateline, message)

VALUES ('$from', '$fromid', '$uid', 'inbox', '1', '$subject', '$timestamp', '$message')");

if($query) {

$pmids[] = $uid;

}

}

}

if($toid = implodeids($pmids)) {

$db->query("UPDATE {$tablepre}members SET newpm='1' WHERE uid IN ($toid)");

}

}

/**

* 大家熟悉的showmesage终于出现~!包含了ajax效果了

* @para string $message 显示在跳转页面的信息,比如:您已成功登陆……

* @para string $url_forword 下一个url,过三秒会自动跳转过去

* @para string $extra 这个用来控制一些特殊的显示,比如:HALTED, NOPERM,这样可以控制一些特殊场合,Discuz想得真是太全面了~!

*/

function showmessage($message, $url_forward = '', $extra = '') {

extract($GLOBALS, EXTR_SKIP);

global $extrahead, $discuz_action, $debuginfo, $seccode, $fid, $tid, $supe_fromsupesite, $supe_jumpurl, $supe, $charset, $show_message, $_DCACHE;

$supe_messagetpl = $supe_error = '';

$show_message = $message;

$msgforward = unserialize($_DCACHE['settings']['msgforward']);

$msgforward['refreshtime'] = intval($msgforward['refreshtime']);

$url_forward = empty($url_forward) ? '' : (empty($_DCOOKIE['sid']) && $transsidstatus ? transsid($url_forward) : $url_forward);

if($supe_fromsupesite && $supe['status']) {

$supe_messagetpl = 'supesite_';

$extra = '';

$supe_error = $url_forward ? false : true;

$url_forward = !empty($supe_jumpurl) && !$supe_error ? urldecode($supe_jumpurl) : $url_forward;

} elseif($url_forward && empty($_GET['inajax']) && $msgforward['quick'] && $msgforward['messages'] && @in_array($message, $msgforward['messages'])) {

updatesession();

dheader("location: ".str_replace('&', '&', $url_forward));

}

if(in_array($extra, array('HALTED', 'NOPERM'))) {

$fid = $tid = 0;

$discuz_action = 254;

} else {

$discuz_action = 255;

}

include language('messages'); //把message这个语言包加了进来

if(isset($language[$message])) {

$supe_pre = $supe_fromsupesite ? 'supe_' : '';

eval("\$show_message = \"".($language[$supe_pre.$message] ? $language[$supe_pre.$message] : $language[$message])."\";");

unset($supe_pre);

}

ajaxtemplate('showmessage_ajax');

$extrahead .= $url_forward ? '' : '';

if($advlist = $advlist['redirect']) {

foreach($advlist AS $type => $redirectadvs) {

$advlist[$type] = $redirectadvs[array_rand($redirectadvs)];

}

}

if($extra == 'NOPERM' && !$passport_status) {

//get secure code checking status (pos. -2)

if($seccodecheck = substr(sprintf('%05b', $seccodestatus), -2, 1)) {

$seccode = random(6, 1) + $seccode{0} * 1000000;

}

include template('nopermission');

} else {

include template($supe_messagetpl.'showmessage');

}

dexit();

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值