我在PHP中创建此失败捕获时遇到一些问题。我想在用户输入错误的网址时显示require 'error.php';
,该网址会返回$echo_error_404 = 1
。
我使用普通的PHP路由,这意味着,我的网址被分成/example1/example2/example3/
。
我有这个页面projects
,当我进入该页面时,它与$routes[1]
相同。文件projects.php
不存在。正确理解projects
应该属于第二个elseif
声明。然后在使用$error_echo_404 = 1
时给予file_exists()
。但是......出于一些奇怪的原因,它一直持续到$echo_content = '<div id="content-wrap">'.$php_doc_html."</div>";
PS:我也知道我的很多代码都格式不正确,但是,我试图解决我的问题。
检查要求的文件并运行错误检查的代码:
// FIND WEBSITE CONTENT
$echo_content = "";
if(empty($routes[1])){
require 'frontpage.php';
if($echo_error_404 == 0){
$echo_content = '<div id="content-wrap">'.$front_page_html."</div>";
}
}
elseif((!empty($routes[1])) && ($routes[1] == "page")){
require 'frontpage.php';
if($echo_error_404 == 0){
$echo_content = '<div id="content-wrap">'.$front_page_html."</div>";
}
}
elseif((!empty($routes[1])) && ($routes[1] != "page")){
$php_doc = $routes[1];
$file_exist = $php_doc.".php";
if(file_exists($file_exist)){
require $php_doc.".php";
if($echo_error_404 == 0){
$echo_content = '<div id="content-wrap">'.$php_doc_html."</div>";
}
if(empty($echo_content)){
$echo_error_404 = 1;
}
}
else{
$echo_error_404 = 1;
}
}
else{
$echo_error_404 = 1;
如果我$echo_error_404 = 1
if($echo_error_404 == 1){
require 'error.php';
$error_index_head = <<< EOF
HTML TAG OPENING, TITLE, HEAD AND BODY OPENING ETC.
EOF;
echo $error_index_head;
echo $header_html;
echo '<div id="content-wrap">'.$error_page_html.'</div>';
echo $echo_index_after;
echo $footer_html;
}
else{
echo $echo_index_head;
echo $header_html;
echo $echo_content;
echo $echo_index_after;
echo $footer_html;
}
这是我在浏览器中看到的返回内容,清楚地显示$echo_error_404
未分配值1
:
var_dump()
结果:
elseif((!empty($routes[1])) && ($routes[1] != "page")){
$php_doc = $routes[1];
var_dump($php_doc);
$php_doc_html = "";
var_dump($php_doc_html);
// THE CODE INBETWEEN
else{
$echo_error_404 = 1;
}
var_dump($php_doc_html);
var_dump($echo_error_404);
返回表明项目位于$routes[1]
且$echo_error_404
为= 1
:
string(8) "projects"
string(0) ""
string(0) ""
int(1)
答案 0 :(得分:2)
使用switch()
可能会更清洁一点。如果我们首先检查$routes[1]
是否为空,我们不应该在以后的条件下再次执行此操作。我在你的elseif
中检查它是没有意义的。如果它是空的,它将满足第一个if
而不会转到语句的下一部分。
// Assume no content
$echo_content = "";
// Check for content
if(empty($routes[1])){
require 'frontpage.php';
if($echo_error_404 == 0){
$echo_content = '<div id="content-wrap">'.$front_page_html."</div>";
}
} else {
switch($routes[1]){
case "page":
require 'frontpage.php';
if($echo_error_404 == 0){
$echo_content = '<div id="content-wrap">'.$front_page_html."</div>";
}
break;
default:
$file_exist = "{$routes[1]}.php";
if(file_exists($file_exist)){
require $file_exist;
if($echo_error_404 == 0){
$echo_content = '<div id="content-wrap">'.$php_doc_html."</div>";
}
} else {
$echo_error_404 = 1;
}
}
}
if(empty($echo_content) || $echo_content == ""){
$echo_error_404 = 1;
}