【发布时间】:2013-12-19 17:46:10
【问题描述】:
我收到以下错误消息“标头可能不包含多个标头,检测到新行”我知道它表示已检测到新行,但我不知道该行来自何处。我试图修剪变量..我以不同的方式重新编写了标题行,但没有任何结果。我添加了 getallheaders 函数来查看正在传递的内容,但我在输出 $headers 中看不到新行或任何额外字符。即使使用 ob_start() 也无济于事。
<?php
ob_start();
include "catalog.obj";
session_start();
$catalogObj = $_SESSION['catalogObj'];
if (isset($_POST['st']))
$st = $_POST['st'];
else
$st = '0';
if (isset($_POST['num']))
$num = $_POST['num'];
else
$num = '0';
if (isset($_POST['type']))
$type = $_POST['type'];
else
$type = '0';
if (isset($_POST['rec']))
$rec = $_POST['rec'];
else
$rec = '0';
if (isset($_POST['option']))
$option = $_POST['option'];
else
$option = '0';
if(strcmp($_POST['submit'],"Reset Form") == 0)
{
header("location: search_catalog.php?type=$type&firstTime=1");
exit;
}
elseif(strcmp($_POST['submit'],"Catalog Administration") == 0)
{
Header("Location: administration.php");
exit;
}
else
{
$inventory_id_num = $_POST['inventory_id_num'];
$inventory_desc = $_POST['inventory_desc'];
$inventory_revision = $_POST['inventory_revision'];
$quantity = $_POST['quantity'];
$catalog_status_id = $_POST['catalog_status_id'];
$order_form_type_id = $_POST['order_form_type_id'];
$catalogObj->inventory_id_num = $inventory_id_num;
$catalogObj->inventory_desc = $inventory_desc;
$catalogObj->inventory_revision = $inventory_revision;
$catalogObj->quantity = $quantity;
$catalogObj->catalog_status_id = $catalog_status_id;
//$catalogObj->order_form_type_id = array();
$catalogObj->order_form_type_id = $order_form_type_id;
$count=count($order_form_type_id);
for ($i=0; $i<$count; $i++)
{
//print "order_form_type_id: $order_form_type_id[$i]<br>";
if(strlen($order_form_type_id[$i]) > 0)
{
$catalogObj->order_form_type_id[$i] = $order_form_type_id[$i];
}
}
if(strcmp($_POST['submit'],"Back to Order Form") == 0)
{
Header("Location: order_form.php?num=$num");
exit;
}
else
{
//$url = "type=".$type."option=".$option."rec=".$rec."st=".$st."num=".$num;
Header("location: search_catalog_handler.php?type=$type&option=$option&rec=$rec&st=$st&num=$num");
//Header("location: search_catalog_handler.php?" . rawurlencode($url));
if (function_exists('getallheaders'))
{
$headers = getallheaders();
print_r( $headers);
}
exit;
}
}
function getallheaders()
{
$headers = '';
foreach ($_SERVER as $name => $value)
{
if (substr($name, 0, 5) == 'HTTP_')
{
$headers[str_replace(' ', '-', ucwords(strtolower(str_replace('_', ' ', substr($name, 5)))))] = $value;
}
}
return $headers;
}
?>
【问题讨论】:
-
什么是 catalog.obj ??
-
从这里的语法高亮来看,这条线可能有问题
Header("location: search_catalog_handler.php?type=$type&option=$option&rec=$rec&st=$st&num=$num");,而你正在使用POST。这样的 URL 理论上应该取自GET -
这是导致问题的行!我正在更新一个 11 年前编写的 php 网站。原作者有一半时间使用帖子来传递标头函数中使用的数据。就像这里的情况一样。我有三个星期的时间来更新 108 个与此类似的 php 代码文件……如何在不重写所有内容的情况下解决这个问题?
-
然后尝试使用
rawurlencode,如$type = rawurlencode($type); Header("location: search_catalog_handler.php?type=$type&option=$option&rec=$rec&st=$st&num=$num");,从SO from this question的答案中找到 -
我在另一个网站上找到了this Q&A。请参阅条目
#4,但您需要将ereg_replace替换为preg_replace或preg_match等效项。