我如何解决已发送的标题问题

时间:2012-11-19 22:10:13

标签: php mysql arrays

当我测试我的脚本时,我收到此错误

Warning: Cannot modify header information - headers already sent by (output started at /nfs/c06/h04/mnt/153892/domains/authomotive.com/html/artpoint/gallery/index.php:12) in /nfs/c06/h04/mnt/153892/domains/authomotive.com/html/artpoint/gallery/main.php on line 17
我们都知道 我删除了其他文件中的所有空格,并将ob_start()和ob_flush()添加到文件中,我还能做些什么?我是否必须找到另一种方式来发送标题,还是有另一种方法可以绕过此警告?

脚本从我的数据库和我的地图中删除文件。

main.php的来源

<?php 
ob_start();
    if(isset($_GET['remove'])){
        $id=$_GET['id'];
        include('conf.php');
        require_once('classes/db.class.php');
        $db = new DB($db_name,$db_host,$db_user,$db_passw);
        $q = $db->query('SELECT photourl,minurl,projectID FROM photo WHERE id='.$id);
            while ($line = $db->fetchNextObject()) {
                $file = $line->photourl;
                unlink($file);
                $filemin = $line->minurl;
                unlink($filemin);
            }
        //$db->execute('DELETE FROM project WHERE id='.$line->projectID,true);
        $db->execute('DELETE FROM photo WHERE id='.$id);
        header("Location:index.php");
    }
    if(isset($_GET['success'])){
        echo('het werkt');
    }
    ob_flush();
?>
<h1> Projecten </h1>

<ul id="edit-menu">
    <li>
        <ul>
            <li><a class="addPro" href="#"><img src="images/addProject.png" /></a></li><br/>
            <li><a class="add" style="padding-left:15px"href="#">Project +</a></li>
        </ul>

    </li>
    <li>
        <ul>
            <li><a class="addPho" href="#"><img src="images/add.png" /></a></li><br/>
            <li><a class="add" href="#">Toevoegen </a></li>
        </ul>
    </li>


    <li>
        <ul>
            <li><a class="deletePho" href="#"><img src="images/delete.png" /></a></li><br/>
            <li><a href="#">Verwijderen </a></li>
        </ul>
    </li>
    <div id="addproject">
        <?php include('addproject.php'); ?>
    </div>
    <div id="addphoto">
        <?php include('addphoto.php'); ?>
    </div>
    <div id="deletephoto">
        <?php include('removePhoto.php'); ?>
    </div>
</ul>

3 个答案:

答案 0 :(得分:2)

通常,此问题是由文件末尾的空行引起的,<?php ... ?>标记之外。这些空白行由PHP解释为需要输出的(HTML)内容的一部分。

对于主PHP文件,它显然只适用于文件的开头,但是对于包含的文件,它们两端的空白行可能会导致输出,从而导致header()调用失败。

当然,他们生成的任何其他输出也会产生相同的效果,但空白行很容易成为人们解决这个问题的最常见原因,而不能解决导致它的内容,因为它并不明显,并且因为当您查看源以找出正在发生的事情时,很难发现单个杂散空白行。

您应该检查程序加载的所有PHP文件,以确保不输出任何内容。具体检查文件的开头和结尾,以确保没有任何空行。

希望有所帮助。

答案 1 :(得分:1)

这里最有可能发生的是正在执行的文件是index.php,正在使用include('main.php');。但如果index.php在包含main.php之前已经发送了一些数据,那么您将无法更改标题。

index.php可能会有一些空白行被回显。这很容易被忽视。

此外,这非常不安全:

$db->execute('DELETE FROM photo WHERE id='.$id);

网络安全规则#1: Never trust the client

答案 2 :(得分:0)

你不能在html输出或echo后使用标题。 你仍然可以使用元或javascript重定向。