上节课我们讲到如果我们未定义DEDEREQUEST时执行common.inc.php内部定义函数进来的操作,首页我们分析一下,作为mvc每次都要经过index.php,为comminc.php在前面,所以刚开始的时候DEDEREQUEST为false,所以经过了common.inc.php,然后在包含request.php,其实执行request.php;
dede注释已经讲的很清楚了..........
//其实他主要工作也就是注释写的,建好调用request类中的item方法,主要是他没有构造函数,所有封转一下调用很简单,就是检查当前是否存在该类,然后是否初始化,然后调用方法item,很简答啊..........
class Request
{
var $isinit = false;
//用户的cookie
var $cookies = array();
//把GET、POST的变量合并一块,相当于 _REQUEST
var $forms = array();
//_GET 变量
var $gets = array();
//_POST 变量
var $posts = array();
//用户的请求模式 GET 或 POST
var $request_type = ‘GET‘;
//文件变量
var $files = array();
//严禁保存的文件名
var $filter_filename =
‘/\.(php|pl|sh|js)$/i‘;
function Init()
{
global $_POST,$_GET;
//处理post、get
$formarr = array(‘p‘ =>
$_POST, ‘g‘ => $_GET);
foreach($formarr as $_k
=> $_r)
{
if(
count($_r) > 0 )
{
foreach($_r
as $k=>$v)
{
if(
preg_match(‘/^cfg_(.*?)/i‘, $k) )
{
continue;
}
$this->forms[$k]
= $v;
if(
$_k==‘p‘ )
{
$this->posts[$k]
= $v;
}
else {
$this->gets[$k]
= $v;
}
}
}
}
unset($_POST);
unset($_GET);
unset($_REQUEST);
//处理cookie
if( count($_COOKIE) > 0
)
{
foreach($_COOKIE
as $k=>$v)
{
if(
preg_match(‘/^config/i‘, $k) )
{
continue;
}
$this->cookies[$k]
= $v;
}
}
//unset($_POST,
$_GET);
//上传的文件处理
if( isset($_FILES)
&& count($_FILES) > 0 )
{
$this->filter_files($_FILES);
}
$this->isinit =
TRUE;
//global变量
//self::$forms[‘_global‘] =
$GLOBALS;
}
function Myeval_r( $phpcode )
{
return eval_r( $phpcode
);
}
function Item( $formname, $defaultvalue = ‘‘
)
{
return
isset($this->forms[$formname]) ? $this->forms[$formname] :
$defaultvalue;
}
function Upfile( $formname, $defaultvalue = ‘‘
)
{
return
isset($this->files[$formname][‘tmp_name‘]) ?
$this->files[$formname][‘tmp_name‘] : $defaultvalue;
}
function FilterFiles( &$files )
{
foreach($files as
$k=>$v)
{
$this->$files[$k]
= $v;
}
unset($_FILES);
}
function MoveUploadFile( $formname, $filename,
$filetype = ‘‘ )
{
if(
$this->is_upload_file( $formname ) )
{
if(
preg_match($this->filter_filename, $filename) )
{
return
FALSE;
}
else
{
return
move_uploaded_file($this->files[$formname][‘tmp_name‘], $filename);
}
}
}
function GetShortname( $formname )
{
$filetype =
strtolower(isset($this->files[$formname][‘type‘]) ?
$this->files[$formname][‘type‘] : ‘‘);
$shortname = ‘‘;
switch($filetype)
{
case
‘image/jpeg‘:
$shortname
= ‘jpg‘;
break;
case
‘image/pjpeg‘:
$shortname
= ‘jpg‘;
break;
case
‘image/gif‘:
$shortname
= ‘gif‘;
break;
case
‘image/png‘:
$shortname
= ‘png‘;
break;
case
‘image/xpng‘:
$shortname
= ‘png‘;
break;
case
‘image/wbmp‘:
$shortname
= ‘bmp‘;
break;
default:
$filename
= isset($this->files[$formname][‘name‘]) ? $this->files[$formname][‘name‘]
: ‘‘;
if(
preg_match("/\./", $filename) )
{
$fs
= explode(‘.‘, $filename);
$shortname
= strtolower($fs[ count($fs)-1 ]);
}
break;
}
return $shortname;
}
function GetFileInfo( $formname, $item = ‘‘ )
{
if( !isset(
$this->files[$formname][‘tmp_name‘] ) )
{
return
FALSE;
}
else
{
if($item==‘‘)
{
return
$this->files[$formname];
}
else
{
return
(isset($this->files[$formname][$item]) ? $this->files[$formname][$item] :
‘‘);
}
}
}
function IsUploadFile( $formname )
{
if( !isset(
$this->files[$formname][‘tmp_name‘] ) )
{
return
FALSE;
}
else
{
return
is_uploaded_file( $this->files[$formname][‘tmp_name‘] );
}
}
function CheckSubfix($formname, $subfix =
‘csv‘)
{
if(
$this->get_shortname( $formname ) != $subfix)
{
return
FALSE;
}
return TRUE;
}
}
这个类不难,我讲讲关键的,看看类的成员就行了,主要是post和get请求变成forms数组,然后对文件的处理..
其实这里大家可以看到,过滤的更详细了,比如像文件传递,不知道dede为什么要写两次,comminc.php中的就像鸡肋,也许是改版的痛吧....