我正在用PHP创建网站。我在PHP中使用MVC。我的网站是这样的,如果用户转到example.com/about然后它将加载关于class和index()函数。如果用户将转到localhost / about / founder,那么它将从About类加载founder()函数。但问题是,如果我转到localhost / About或localhost / AbOut或类似的东西,它将从About类文件加载默认的index()函数。那么如何处理区分大小写呢?我的意思是我希望我的脚本从类文件加载index()函数,如果它是localhost / about或localhost / terms。如果任何东西都是大写的,那么它应该加载404错误函数。 404错误功能已在我的网站中设置。
请帮帮我朋友。
这是我的Bootstrap.php类文件
<?php
/*
Bootstrap class to run functions by URL
*/
class Bootstrap {
public $_req;
public $_body;
public $_file;
public $_error;
function __construct(){
if(empty($_GET['req'])){
require 'classes/home.php';
$this->_body = new Home();
$this->hdr($this->_body->head());
$this->_body->index();
$this->ftr();
exit();
}
$this->_req = rtrim($_GET['req'], '/');
$this->_req = explode('/', $this->_req );
$_file = 'classes/'.$this->_req[0].'.php';
if(file_exists($_file)){
require $_file;
}
else {
$this->error(404);
}
$this->_body = new $this->_req[0];
$this->hdr($this->_body->head());
if(isset($this->_req[2])){
if(method_exists($this->_req[0], $this->_req[1])){
$this->_body->{$this->_req[1]}($this->_req[2]);
}else {
$this->error(404);
}
}else {
if(isset($this->_req[1])){
if(method_exists($this->_req[0], $this->_req[1])){
$this->_body->{$this->_req[1]}();
}else {
$this->error(404);
}
}else {
$this->_body->index();
}
$this->ftr();
}
}
//this function is to set header in html code
public function hdr($var = false){
echo '<!DOCTYPE HTML><html><head>'.$var.'</head><body>';
}
//this function is tp set footer in html code
public function ftr($var = false){
echo $var.'</body></html>';
}
//error handler
public function error($var){
require 'classes/er_pg.php';
$this->_error = new Error();
$this->_error->index($var);
}
}
答案 0 :(得分:0)
由于内容重复,您不应该使用任何内容来加载非小写的URL,这是您正在做的一件好事。在这种情况下,错误的URL会自动失败。
但是,由于你没有显示你是如何进行这些调用的,所以我现在只能建议检查被调用的方法是否存在(区分大小写),如果不存在,则抛出/重定向到404页面(header($_SERVER["SERVER_PROTOCOL"]." 404 Not Found");
)。
更新
在评论中的所有聊天之后,似乎file_exists
在您的情况下不区分大小写,这真的很奇怪。希望有人能够弄明白,所以我可以删除它(保留它,因为评论中的信息)。
答案 1 :(得分:0)
我解决了这个问题。我用过这个
if(ctype_lower($this->_req[0])){
$_file = 'classes/'.$this->_req[0].'.php';
现在它的工作。无论如何朋友们。