我开发了一个PHP应用程序,在其中我使用apache创建了一个路由系统
使用这个路由系统,每个http请求都指向index.php,除非请求是服务器上的实际文件。
我的问题是,如果文件不存在,每次文件请求传递404错误时,我的整个应用程序都会被执行,导致我的应用程序变得非常慢。
我试着听$_SERVER
,看看我是否发现了一些数据,这些数据表明执行是由一个断开的文件链接完成的,如果我发现了什么,我会执行die()
函数,这样就不会加载应用程序。
我在$_SERVER
上没有发现任何东西,也没有发现以下任何功能:
getallheaders();
headers_list();
headers_sent();
http_response_code();
最初我使用的是下面的脚本,但后来发现,如果有人在请求的末尾放了一个类似somestring.test
的字符串,那么整个应用程序就会关闭。
if(FULL_URL !== rtrim(PROTOCOL.'://'.$_SERVER['HTTP_HOST']).'/'){
// Get path extension
$ext = pathinfo(FULL_URL, PATHINFO_EXTENSION);
if($ext !== ''){
die;
}
}
我可以做些什么来确定http请求是坏文件请求还是正常请求?
我通过监听函数getallheaders()
:给出的字段Accept
解决了问题
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;
}
}
}