【问题标题】:Header Location not working after 3 times标题位置在 3 次后不起作用
【发布时间】:2015-07-31 01:59:04
【问题描述】:

我在运行 MySQL 查询的页面上使用函数 header("Location: example.php"),该查询创建照片库,然后重定向到刚刚创建的照片库页面。 问题是,在创建了 3 或 4 个相册后,会出现此错误:

“无法修改标头信息 - 标头已由...发送”

我知道header()之前不应该有任何输出,但我的问题是:为什么它工作了几次然后就失败了?

<?php 
if(isset($_POST['crea'])){

    $nome_lista = $_POST['nome_lista'];
    $slug_lista = str_replace(' ','_',$nome_lista);

    $luogo_lista = $_POST['luogo_lista'];

    $inserisci = mysql_query("INSERT INTO `prova`(`id_lista`, `nome_lista`,`slug_lista`, `id_utente`, `luogo_lista`,`copertina`) VALUES (NULL,'$nome_lista','$slug_lista','$user_id','$luogo_lista','copertina.jpg')");

    $user_id = $_SESSION['id_utente'];

    $id_lista = mysql_query("
    SELECT id_lista 
    FROM prova 
    WHERE id_utente ='$user_id'
    ORDER BY id_lista DESC");

    $ultima_lista = mysql_result($id_lista,0); 

    if($inserisci){
        $percorso_album = "./img_globali/".$user_id.$username;
        mkdir($percorso_album."/".$slug_lista, 0775);
    }else{
        echo 'Non ho inserito la cartella del nuovo album '.mysql_error();
    } 
    header("location: album.php?id=".$ultima_lista);
    exit;
}
?>

查询被执行,即使页面没有重定向

【问题讨论】:

  • 我想有时它会转到echo 'Non ho inserito la cartella del nuovo album '.mysql_error();
  • 第三到第四次,您的INSERT 查询失败,添加调试语句以了解发生了什么?注意:由于此类调试语句,重定向可能会失败。首先,调试然后继续重定向的东西......
  • @Makesh 查询被执行,即使页面没有重定向

标签: php redirect header location


【解决方案1】:

标头必须在任何内容之前发送,删除任何回显命令,它将起作用。此外,请确保这部分 PHP 代码之前没有空格或 HTML。

您还可以在 PHP 代码的最顶部使用 ob_start(); 打开输出缓冲,然后头将在任何回显变量之前发送。

【讨论】:

  • ob_start();的使用只是隐藏了实际问题。
  • 并非如此,几乎在所有情况下都将其打开并没有什么坏处,并且在某些配置下可能会给您带来小的性能提升。
  • 我认为使用ob_start没有问题,它也提到了here
【解决方案2】:

在您的情况下,输出仅在 else 块中发送。因此,当$inseriscitrue 时,您不会收到该错误。

if ($inserisci){
    // No output here, so error will happen when in this block
    $percorso_album = "./img_globali/".$user_id.$username;
    mkdir($percorso_album."/".$slug_lista, 0775);       
 }else{
     // You have output here, hence "header already sent" error
     echo 'Non ho inserito la cartella del nuovo album '.mysql_error();

 } 
 header("location: album.php?id=".$ultima_lista);

【讨论】:

    【解决方案3】:
    header("Location:album.php?id=$ultima_lista");
    

    【讨论】:

      猜你喜欢
      • 2013-08-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-01-10
      • 1970-01-01
      相关资源
      最近更新 更多