您现在的位置: 天下网吧 >> 网吧天地 >> 天下码农 >> 后端开发 >> PHP >> 正文

Discuz里forum_image.php代码样例分析和学习

[ 作者:天下网咖 来源: 天下网吧 时间:2021-5-25我来说两句

Discuz里面有个显示图片的通用入口。链接URL如下:「forum.php?mod=image&aid=145489&size=297x231&key=dfad7d044e81ae8d&type=fixnone」

如果你需要显示一张图片缩略图时只需要知道图片的aid即可生成对应的缩略图完整的url。那么DZ是怎么实现这个功能的呢?

今天看看Discuz X!的关于forum.php?mode=image里面的核心实现方法(./source/module/forum/forum_image.php),重要的行后面已经代码分析并添加注释:


<?php

/**
 *      [Discuz!] (C)2001-2099 Comsenz Inc.
 *      This is NOT a freeware, use is subject to license terms
 *
 *      $Id: forum_image.php 32531 2013-02-06 10:15:19Z zhangguosheng $
 */

if(!defined('IN_DISCUZ') || empty($_GET['aid']) || empty($_GET['size']) || empty($_GET['key'])) {
	header('location: '.$_G['siteurl'].'static/image/common/none.gif');
	exit;
}//判断环境是否为Discuz环境下,并检查相关参数是否完整。正常完整的参数应该是:forum.php?mod=image&aid=145489&size=297x231&key=dfad7d044e81ae8d&type=fixnone

$nocache = !empty($_GET['nocache']) ? 1 : 0;//是否启用了不使用缓存的模式,该模式下会重新生成缩略图文件
$daid = intval($_GET['aid']);//附件的aid
$type = !empty($_GET['type']) ? $_GET['type'] : 'fixwr';//缩略图显示模式,2种模式,1=fixone,2=fixwr
list($w, $h) = explode('x', $_GET['size']);//获取url参数里面的宽和高值
$dw = intval($w);
$dh = intval($h);
$thumbfile = 'image/'.helper_attach::makethumbpath($daid, $dw, $dh);$attachurl = helper_attach::attachpreurl();
if(!$nocache) {//如果不是非缓存模式,先判断该图片缓存文件是否已经存在。存在的情况下直接返回
	if(file_exists($_G['setting']['attachdir'].$thumbfile)) {
		dheader('location: '.$attachurl.$thumbfile);
	}
}

define('NOROBOT', TRUE);

$id = !empty($_GET['atid']) ? $_GET['atid'] : $daid;
if(dsign($id.'|'.$dw.'|'.$dh) != $_GET['key']) {
	dheader('location: '.$_G['siteurl'].'static/image/common/none.gif');
}//对key的验证,如果key非法,直接显示空的图片

if($attach = C::t('forum_attachment_n')->fetch('aid:'.$daid, $daid, array(1, -1))) {//附件id是否合法
	if(!$dw && !$dh && $attach['tid'] != $id) {//如果传过来的是tid,tid的值跟数据库里不一样
	       dheader('location: '.$_G['siteurl'].'static/image/common/none.gif');
	}
        dheader('Expires: '.gmdate('D, d M Y H:i:s', TIMESTAMP + 3600).' GMT');//图片过期时间3600秒
	if($attach['remote']) {//附件保存在ftp上,
		$filename = $_G['setting']['ftp']['attachurl'].'forum/'.$attach['attachment'];
	} else {
		$filename = $_G['setting']['attachdir'].'forum/'.$attach['attachment'];
	}
	require_once libfile('class/image');
	$img = new image;
	if($img->Thumb($filename, $thumbfile, $w, $h, $type)) {//图片处理核心类方法创建缩略图
		if($nocache) {//不使用缓存,读取文件后删除文件
			dheader('Content-Type: image');
			@readfile($_G['setting']['attachdir'].$thumbfile);
			@unlink($_G['setting']['attachdir'].$thumbfile);
		} else {
			dheader('location: '.$attachurl.$thumbfile);
		}
	} else {//失败,尝试直接读取。
		dheader('Content-Type: image');
		@readfile($filename);
	}
} 


欢迎访问最专业的网吧论坛,无盘论坛,网吧经营,网咖管理,网吧专业论坛 https://bbs.txwb.com

关注天下网吧微信/下载天下网吧APP/天下网吧小程序,一起来超精彩


本文来源:天下网吧 作者:天下网咖

声明
声明:本站所发表的文章、评论及图片仅代表作者本人观点,与本站立场无关。若文章侵犯了您的相关权益,请及时与我们联系,我们会及时处理,感谢您对本站的支持!联系邮箱:support@txwb.com.,本站所有有注明来源为天下网吧或天下网吧论坛的原创作品,各位转载时请注明来源链接!
天下网吧 网吧天下