spl_autoload_register的问题

去访问一个纯html文件,理论上应该是不会访问到else里面的内容,结果服务器在这一行$api = new $classname;报错,而浏览器则是在加载完<head>标签中的js之后,在<body>标签最后的js报出500错误


index大面如下


// 分析uri

$path = $_SERVER['REQUEST_URI'];

$paramerters = explode('/',$path);

//加载核心类 初始化

//require_once DIR.'/autoload/_Autoload.php';

$len = count($paramerters) - 1;


if(preg_match('/\.html$/',$path)){

    // 纯html

    $page = file_get_contents("./view/{$paramerters[$len]}");

    echo $page;

}else{

    //api接口

        $classname = $paramerters[2];

        $functioname = $paramerters[3];

        //自动加载类

        if(!preg_match('/\.html$/',$path)){

            define('DIR',dirname(__FILE__));

            require_once DIR.'/autoload/Autoload.php';

            $res = spl_autoload_register("\\Core\\Autoload::_autoload");

            $api = new $classname;

            $api->{$functioname}();

        }

}


扬帆大鱼
浏览 437回答 3
3回答

慕运维8079593

突然想起来,是浏览器拿到html之后,会根据里面内容再次请求js等文件。之后请求js文件的的request(中文有点拗口)就会直接重定向到index.php,正则就没有匹配成功,报500错误。

暮色呼如

if(preg_match('/\.html$/',$path))去除html后的$,$表示以.html结尾,如果REQUEST_URI是xxx.html?a=1&b=2便无法通过正则匹配

拉莫斯之舞

因为$api = new $classname;有语法错误吧。应该写成:$api = new $classname();php要先编译再运行,编译时有语法错误就终止输出了。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript