有个问题,就是当用户发出了错误的请求的时候,我们往往把他定向到一个 404.php我写的程序,有些时候可以,有些时候不能重定向,我把代码贴出来给大家看看,帮我分析一下啊,谢谢了比如下面这段代码,如果用户发送了正确的请求,也就是 houses, jobs,等等,是没问题的,如果用户没有发送参数,那么我的程序会自动跳转到 404.php ,但是如果发送了错误的请求,比如 fid="111",就不会跳转的,我把跳转语句放在了 default 中, 这是为什么呢 if( isset($_POST['fid']) ){ switch ($_POST['fid']) {
case "houses" :
$fid = 'GHW_FORUM_MESSAGE_HOUSES';
$rfid = 'GHW_REPLY_HOUSES';
$GLOBALS['MESSAGE']['AREA'] = "HOUSE";
break;
case "jobs" :
$fid = 'GHW_FORUM_MESSAGE_JOBS';
$rfid = 'GHW_REPLY_JOBS';
$GLOBALS['MESSAGE']['AREA'] = "JOBS";
break;
case "friends" :
$fid = 'GHW_FORUM_MESSAGE_FRIENDS';
$rfid = 'GHW_REPLY_FRIENDS';
$GLOBALS['MESSAGE']['AREA'] = "FRIENDS";
break;
case "et" :
$fid = 'GHW_FORUM_MESSAGE_MARKET';
$rfid = 'GHW_REPLY_MARKET';
$GLOBALS['MESSAGE']['AREA'] = "MARKET";
break;
case "travel" :
$fid = 'GHW_FORUM_MESSAGE_TRAVEL';
$rfid = 'GHW_REPLY_TRAVEL';
$GLOBALS['MESSAGE']['AREA'] = "TRAVEL";
break;
case "tutor" :
$fid = 'GHW_FORUM_MESSAGE_TUTOR';
$rfid = 'GHW_REPLY_TUTOR';
$GLOBALS['MESSAGE']['AREA'] = "TUTOR";
break;
case "cars" :
$fid = 'GHW_FORUM_MESSAGE_CARS';
$GLOBALS['MESSAGE']['AREA'] = "CARS";
break;
default:
header('Location: 401.php');
break;
}
}
else{
header('Location: 401.php');
}还有下面这个,如果某两个内容是空的,虽然能进入 if 的语句,但是还是跳转不了的,这是为什么呢? if( empty($_POST['title']) || empty($_POST['context']) ){
header('Location: 401.php');
}
case "houses" :
$fid = 'GHW_FORUM_MESSAGE_HOUSES';
$rfid = 'GHW_REPLY_HOUSES';
$GLOBALS['MESSAGE']['AREA'] = "HOUSE";
break;
case "jobs" :
$fid = 'GHW_FORUM_MESSAGE_JOBS';
$rfid = 'GHW_REPLY_JOBS';
$GLOBALS['MESSAGE']['AREA'] = "JOBS";
break;
case "friends" :
$fid = 'GHW_FORUM_MESSAGE_FRIENDS';
$rfid = 'GHW_REPLY_FRIENDS';
$GLOBALS['MESSAGE']['AREA'] = "FRIENDS";
break;
case "et" :
$fid = 'GHW_FORUM_MESSAGE_MARKET';
$rfid = 'GHW_REPLY_MARKET';
$GLOBALS['MESSAGE']['AREA'] = "MARKET";
break;
case "travel" :
$fid = 'GHW_FORUM_MESSAGE_TRAVEL';
$rfid = 'GHW_REPLY_TRAVEL';
$GLOBALS['MESSAGE']['AREA'] = "TRAVEL";
break;
case "tutor" :
$fid = 'GHW_FORUM_MESSAGE_TUTOR';
$rfid = 'GHW_REPLY_TUTOR';
$GLOBALS['MESSAGE']['AREA'] = "TUTOR";
break;
case "cars" :
$fid = 'GHW_FORUM_MESSAGE_CARS';
$GLOBALS['MESSAGE']['AREA'] = "CARS";
break;
default:
header('Location: 401.php');
break;
}
}
else{
header('Location: 401.php');
}还有下面这个,如果某两个内容是空的,虽然能进入 if 的语句,但是还是跳转不了的,这是为什么呢? if( empty($_POST['title']) || empty($_POST['context']) ){
header('Location: 401.php');
}
————————————————————————————————
基于CSDN论坛提供的插件扩展功能,自己做了个签名档工具,分享给大家,欢迎技术交流 :)
header("Location:")作为php的转向语句。其实在使用中,他有几点需要注意的地方。 1、要求header前没有任何输出,这一点要特别注意!!! 但是很多时候在header前我们已经输出了好多东西了,但是此时如果再次header的话,显然是出错的,在这里我们启用了一个ob的概念,这个东东的意思是在服务器端先存储有关输出,等待适当的时机再输出,而不是像现在这样运行一句,输出一句,发现header语句就只能报错了。 具体的语句有: 1、ob_start(); ob_end_clean();ob_flush();.........
2、在header("Location:")后要及时exit
否则他是会继续执行的,虽然在浏览器端你看不到相应的数据出现,但是如果你进行抓包分析的话,你就会看到下面的语句也是在执行的。而且被输送到了浏览器客户端,只不过是没有被浏览器执行为html而已(浏览器执行了header进行了转向操作)。 所以,标准的使用方法是:
ob_start();........if ( something ){ ob_end_clean(); header("Location: yourlocation"); exit;else{ .......... ob_flush(); //可省略}