真假rewrite以后的怪事,找不到变量在哪里定义

继上篇真假rewrite以后的怪事
rewrite问题解决以后,我又遇到了哪些问题?php

$_GET获得的数据,居然没有一个地方使用,也没有定义变量。数组

个人大脑真的有点抽,怎么回事情?找不到变量定义!?函数

具体是怎么回事呢?
我在class下的index.php中获得思路。url

那就是数组变换成变量

这个方法是第一次见到,还真真的第一次见到code

方法以下开发

$_GET && extract($_GET);string

我苦苦思索,须要的变量究竟是哪里来的,使用sublime txt 在路径中查找就是没有找到,结果逐步跟踪的时候,发现这个东西it

extract() 方法在手册中是这样说的io

extract — 从数组中将变量导入到当前的符号表function

说明

intextract ( array&$var_array [, int$extract_type = EXTR_OVERWRITE [, string$prefix = NULL ]] )

本函数用来将变量从数组中导入到当前的符号表中。

检查每一个键名看是否能够做为一个合法的变量名,同时也检查和符号表中已有的变量名的冲突。

虽然php提供了如此优秀的方法,做为一个PHP的初学者,真心不肯意你使用这种方法,尤为是在不断的include的状况下,

看一下文件路径你就会知道了

root-class

   ----index.php   文件a

   -lib

   ----index.php  文件b

   -index.php  文件c

   -rewrite.php  文件d

整个系统文件执行过程是Apache伪静态重写至文件d

文件d对重写后的url进行解析(主要是一个preg_match方法进行正则对比)我再放一遍 主要方法,上篇文章的代码太多,不少人确定看不下去了。

function __rewrite(){

global $r_rewrite,$r_uri,$r_d,$r_dir,$r_content_type_list;

$matching=false;

foreach($r_rewrite as $v){

if(preg_match($v[0],$r_uri,$matches)){

$r_uri=$v[1];

$r_uri=preg_replace('/\$(\d+)/e','$matches[$1]',$r_uri);

$matching=true;

break;

}

if($matching){

$url_info=parse_url($r_uri);

$r_include=str_replace('/',$r_d,$r_dir.$url_info['path']);

if(file_exists($r_include) && filetype($r_include)=='file'){

if($query=$url_info['query']){

$sp=explode('&',$query);

foreach($sp as $v){

$sp2=explode('=',$v);

$_GET[$sp2[0]]=addslashes(urldecode($sp2[1]));//重要

}

$_SERVER['QUERY_STRING']=$query;

}

//if($url_info[''])

return $r_include;

} else return __rewrite();

} else return false;

}

解析后 若是正确解析则引入文件c 在 文件c 中引入 文件a 在文件a中引入文件b

文件a中使用extract 方法对$_GET 进行变量转换,在文件b中使用$_GET转换后的变量

流程就是上面的样子了, 这是多么让人悲哀的事情,多重的include,在没有手册指导注释引导的状况下,对系统的二次开发和后期维护形成很大难度。

故而本文不建议新手php使用这个方法。

相关文章
相关标签/搜索