当我测试我的脚本时,我收到此错误
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>
答案 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重定向。