【问题标题】:getting warning "Header may not contain more than a single header, new line detected"收到警告“标题可能不包含多个标题,检测到新行”
【发布时间】:2013-04-25 14:01:03
【问题描述】:

我正在 oops 中进行编码,以便在 PHP 中上传图像。但是提交图像后,它会发出警告

“标题不能包含多个标题,检测到新行”

下面是我的函数,它给出的错误

public function ft_redirect($query = '') {

    if (REQUEST_URI) {

        $_SERVER['REQUEST_URI'] = REQUEST_URI;

    }

    $protocol = 'http://';

    if (HTTPS) {

        $protocol = 'https://';
    }

    if (isset($_SERVER['REQUEST_URI'])) {

        if (stristr($_SERVER["REQUEST_URI"], "?")) {

            $requesturi = substr($_SERVER["REQUEST_URI"], 0, strpos($_SERVER["REQUEST_URI"], "?"));

            $location = "Location: {$protocol}{$_SERVER["HTTP_HOST"]}{$requesturi}";
        } else {


            $requesturi = $_SERVER["REQUEST_URI"];

            $location = "Location: {$protocol}{$_SERVER["HTTP_HOST"]}{$requesturi}";

        }

    } else {

        $location = "Location: {$protocol}{$_SERVER["HTTP_HOST"]}{$_SERVER['PHP_SELF']}";

    }

    if (!empty($query)) {

        $location .= "?{$query}";

    }

    header($location);

    exit;

}

【问题讨论】:

  • 回显传递给 header() 的值,并确保它们不包含换行符
  • echo out value is------> "Location : localhost/filethin/index.php?dir=" 但它不包含任何新行
  • 我遇到了同样的问题,结果证明是 POST 请求方法上未设置的变量。
  • authenticate 方法应该返回一个字符串而不是重定向。

标签: php oop


【解决方案1】:

URL 地址中的行数不应超过两行。检查您的网址。

Good URL - "http://mail.google.com"  - 1 line

Bad URL - "http://mail.              - 2 lines
            google.com/"

【讨论】:

  • 我最近几次遇到这个错误,每次都是因为错字错过了结束引号等
  • 当您设置header()\n(换行符)之间也会发生这种情况。
【解决方案2】:

在“Illuminate\Auth\Middleware\Authenticate”中,“redirectTo”方法应该返回一个 url 路径,而不是 Redirect 响应。

...
protected function redirectTo()
{
    if(\Auth::user()->hasRole('copy')){
        return '/copy/dashboardCopy';
    }       
}
...

【讨论】:

    【解决方案3】:

    问题可能出在您的 phpMyAdmin、表 wp_options、option_value 中。

    如果 URL 前有 空格,它将生成错误:警告:标头可能不包含多个标头,在...中检测到新行

    【讨论】:

      【解决方案4】:

      出现此警告表示您的变量的字符串内容中可能有一个新行 [/n]。 示例

        header("Location: ../control.php?post='$title1'&sample='$val'");
      

      这里有2个变量

      $title1 和 &$val

      所以运行时如果出现这个警告警告

      “标题不能包含多个标题,检测到新行”

      解决办法是 像这样去掉变量的可通过的新行内容

          $val=str_replace(PHP_EOL, '', $val);
          $title1=str_replace(PHP_EOL, '', $title1);
      

      然后你可以在头文件中包含变量


      理想的解决方法是这样的

      $url="../control.php?post='$title1'&sample='$val'";
       $url=str_replace(PHP_EOL, '', $url);
       header("Location: $url");
      

      ** 这将 100% 有效;**

      【讨论】:

      • 我会说 trim() 是一种更传统的方式来处理不需要的空白
      • trim() 仅从字符串的开头和结尾 中删除空白字符(或您指定的其他字符)。如果换行符在字符串的中间,trim() 不会做任何事情来解决这个问题。
      【解决方案5】:

      似乎您用于创建 Location 属性的变量中有一个换行符。将它们传递给urlencode()

      【讨论】:

      • 我已经回显了我的链接。但是没有新线呢。下面是我已经回显的链接“位置:localhost/filethin/index.php?dir="
      【解决方案6】:

      尝试对您的 URL 进行编码,它应该可以工作:http://php.net/manual/en/function.urlencode.php

      【讨论】:

        【解决方案7】:

        你应该把 URL "http://example.com 这样放,请避免 "http://example.com/" "/" 确实给出 URL Mismatch ,所以避免,同样的问题也会出现 wordpress。所以尝试这样使用。

        【讨论】:

          【解决方案8】:

          当我在我的 PhpmyAdmin 中复制/粘贴我的网站的 URL 时发生这种情况,当时我打算更改 wp_options URL(siteurl 和 home)。

          我通过在 wp_options 中删除我的网站 URL 中的空格解决了这个问题!

          【讨论】:

            猜你喜欢
            • 2013-12-27
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2021-07-31
            • 2017-06-20
            • 1970-01-01
            相关资源
            最近更新 更多