单个代码行中的header()+ die()的多个实例

时间:2011-06-04 21:14:32

标签: php redirect header die

我正在尝试操作PHP脚本,以便重定向到特定的URL,而不是给我一个MySQL错误。所以我离开了......

$qs = mysql_query("SELECT url FROM $table WHERE `id` = $gid;") or die('MySQL error: '.mysql_error());

......对此:

$qs = mysql_query("SELECT url FROM $table WHERE `id` = $gid;") or header("Location: http://www.example.com");

哪个有效,但有两件事与我有关。首先,它默认为302重定向,我更喜欢301重定向。其次,我担心通过从这一行删除die(),重定向后脚本没有正确退出。

现在,我已经在这里完成了一些功课,但我无法弄清楚是否可以将die()与两行代码中的header()组合在一起(即不改变周围的内容)这条特殊的路线。)

5 个答案:

答案 0 :(得分:4)

除了“你不应该这样做”之外,这里有你如何做到这一点:

$qs = mysql_query(...) or (header(...) xor die);

说明:xoror类似,区别在于保证双方的表达式得到评估并且不会被短路。 (好的,xoror不同,但为了这个答案并不重要。)

答案 1 :(得分:3)

您可以使用if块:

$qs = mysql_query("SELECT url FROM $table WHERE `id` = $gid;");
if (!$qs) {
    header("Location: http://www.example.com");
    die('MySQL error: '.mysql_error());
}

答案 2 :(得分:3)

$query_string = '';
$location = '';

$qr = mysql_query($query_string);
if (!$qr) {
  header ('HTTP/1.1 301 Moved Permanently');
  header ('Location: '.$location);
  die('MySQL error: '.mysql_error());
}

答案 3 :(得分:2)

你可以随时:

$qs = mysql_query("blah");
if (!$qs) {
   //headers
   header('Location: blah');
   die('MySQL error: '.mysql_error());
}

答案 4 :(得分:0)

没有任何目的可以显示骰子消息,因为任何浏览器都会捕获HTTP状态代码并相应地执行操作而忽略文档的内容。在那里你应该使用exit()命令,它执行相同的操作,减去回显缓冲区的任何内容。

您可能正在使用此回退操作,所以为什么不将它作为一个常见的回退功能:

function fallback($location='/default/path/to/somewhere') {
    header('HTTP/1.1 301 Moved Permanently');
    header('Location: '.$location);
    exit();
}

$query = mysql_query('...') or fallback('/path/to/somewhere/');