当我在php中使用标题(位置:...)重定向时会引发警告?
这是警告:
警告:无法修改标题信息 - 第26行〜\ addMarket1.php中已经发送的标题(输出从〜\ index.php:51开始)
这是代码:
$folder = 'images/markets/';
$orig_w = 500;
if( isset($_POST['submit']) )
{
$imageFile = $_FILES['image']['tmp_name'];
$filename = basename( $_FILES['image']['name']);
if(strstr($_FILES["image"]["type"],"image")){
list($width, $height) = getimagesize($imageFile);
$src = imagecreatefromjpeg($imageFile);
$orig_h = ($height/$width)* $orig_w;
$tmp = imagecreatetruecolor($orig_w, $orig_h);
imagecopyresampled($tmp, $src, 0,0,0,0,$orig_w,$orig_h,$width,$height);
imagejpeg($tmp, $folder.$filename,100);
imagedestroy($tmp);
imagedestroy($src);
$filename = urlencode($filename);
mysql_query("insert into photos (`image`) values ('$filename')");
// echo '<meta http-equiv="refresh" content="0;URL=../Admin/?p=crop&filename=$filename&height=$orig_h">';
header("Location: ../Admin/crop.php?filename=$filename&height=$orig_h");
}
else
echo "The file uploaded is not image. Please choose jpg, png,gif or png image !";
}
答案 0 :(得分:2)
使用 HTTP [标题] 2 (Location
一个)进行重定向。
HTTP标头只能在内容之前发送:生成页面时,服务器将:
这就是HTTP协议的工作方式 - 你无能为力。
如果正在开始发送正文,那么HTTP标题也已经被发送 - 一旦完成,你就不能再发送任何HTTP标题了 - 这解释了警告。
两种可能的解决方案:
注意:您可以使用headers_sent()
函数来确定是否已发送HTTP标头。
答案 1 :(得分:2)
exit;
之后他失踪了header('Location:...');
因此,当他试图进行302重定向时,它仍在发送当前文档的标题。
答案 2 :(得分:1)
检查您的初始<?php
是否在文件的最开头(UTF BOMs在这方面可能很讨厌,但事实并非如此);并且在完成标题之前确保没有?>
。
之后,查看您调用的每个函数:其中一个函数正在生成一些输出。实际上,它必须是出现在文件第26行的那个。如果你不希望它产生输出,那么检查该函数的文档,看看它产生它的原因。或者使用该第26行的内容更新您的问题,以便我们更好地为您提供帮助。
PS:还要检查该警告之前的完整输出(查看源)。知道输出的内容可能有助于找出为什么正在输出;)
答案 3 :(得分:0)
从PHP手册:
请记住,必须调用header() 在发送任何实际输出之前, 通过普通的HTML标签,空白 文件中的行,或来自PHP。它是一个 用于读取代码的常见错误 include(),或require(),函数或 另一个文件访问功能,并有 输出的空格或空行 在调用header()之前。相同 使用单个时存在问题 PHP / HTML文件。
因此,如果您想重定向,则必须首先执行您的脚本或 HTML输出。
答案 4 :(得分:0)
扩展我的评论:
考虑到已注释掉的<meta>
代码的位置,我愿意打赌您已经在脚本点击header()
来电之前输出了一些HTML。
在header()
来电之前,您无法将任何数据发送到浏览器。
答案 5 :(得分:0)
您可以添加
ob_start();
位于文档的顶部,它将消失