我开发了一个PHP应用程序,我用apache创建了一个路由系统 使用此路由系统,每个http请求都指向index.php,除非请求是服务器上的实际文件。
我的问题是,如果文件不存在,每次文件请求发出404错误时都会执行我的整个应用程序,导致我的应用程序变得非常慢。
我试图听$_SERVER
看看我是否发现了一些数据,这些数据表明执行是由一个损坏的文件链接完成的,如果我发现了什么,我会执行{{1} 1}}函数所以没有加载应用程序。
我在die()
上找不到任何内容,也没有在下面的任何功能中找到任何内容:
$_SERVER
最初我正在使用下面的脚本,但后来发现如果有人在请求结束时放了一个像getallheaders();
headers_list();
headers_sent();
http_response_code();
这样的字符串,整个应用程序就会关闭。
somestring.test
我该怎么做才能确定http请求是破坏的文件请求还是正常的请求?
答案 0 :(得分:1)
我设法通过听取函数Accept
给出的字段getallheaders()
来解决我的问题:
if(FULL_URL !== rtrim(PROTOCOL.'://'.$_SERVER['HTTP_HOST']).'/'){
// Get path extension
$ext = pathinfo(FULL_URL, PATHINFO_EXTENSION);
if($ext !== ''){
$contenttype = isset(getallheaders()['Accept']) ? getallheaders()['Accept'] : NULL;
if(empty($contenttype) || strpos($contenttype, 'text/html') === FALSE){
die;
}
}
}