标题位置在 3 次后不起作用

Posted

技术标签:

【中文标题】标题位置在 3 次后不起作用【英文标题】:Header Location not working after 3 times 【发布时间】: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 查询被执行,即使页面没有重定向 【参考方案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");

【讨论】:

以上是关于标题位置在 3 次后不起作用的主要内容,如果未能解决你的问题,请参考以下文章

jquery datepicker在导航到另一个组件后不起作用

Laravel 5.1 Php artisan 命令在作曲家更新后不起作用

CSS悬停在初始动画后不起作用

RegisterClientScriptCode 在部分回发后不起作用

添加约束滚动后不起作用

为啥我的贴纸在(可能)2 周后不起作用?