【问题标题】:PHP Warning: session_start(): Cannot start session when headers already sentPHP 警告:session_start():当标头已发送时无法启动会话
【发布时间】:2021-10-27 16:28:59
【问题描述】:

我在我的 wp-debug 日志中收到一条错误消息,提示“PHP 警告:session_start():当第 228 行的 ...hooks.php 中的标头已发送时无法启动会话”。这是文件中的代码 sn-p

function _action_fw_flash_message_backend_prepare() {
            if ( ! session_id() ) {
                session_start();    
            }
        }

session_start();在 228 上。我读过 session_start 应该是文件中要执行的第一行代码。这不会影响代码的功能吗? (我的 PHP 经验为零)

【问题讨论】:

标签: php wordpress


【解决方案1】:

将session_start() 移至页面顶部。和ob_flush();在脚注或脚本末尾。

<?php
@ob_start();
session_start();
?>

【讨论】:

  • 有什么问题,你的代码有什么帮助?
【解决方案2】:

好的,伙计们,

这是在 000webhost 上对我有用的答案

如果对你有用,别忘了留下 comment 并点击 upvote

转到 public_html->.htacess

打开文件

粘贴此

php_flag output_buffering on;

繁荣它的工作。

【讨论】:

  • PHP 输出缓冲将 PHP 的行为更改为一次性发送所有数据,而不是在准备好后立即发送。所以标头不能已经发送,因此没有错误。但它可能会减慢网站速度,因为 PHP 必须在发送任何内容之前完成
  • 有什么问题,你的代码有什么帮助?
【解决方案3】:

升级到 PHP 7.4 后,我开始收到相同的错误消息,即使我的所有标签和脚本都在正确的位置,对我来说,问题在于文档编码,它是 UTF-8,所以我将其更改为 UTF-8 without BOM 并做到了。现在一切都很好。

【讨论】:

    【解决方案4】:

    对我来说,实际问题是 PHP 文件开头的 PHP 标记前有一个空格。以下代码应该是 PHP 文件的第一行。

    <?php session_start(); ?>
    

    当您编写一些 Html 代码甚至在上面的代码之前有一个空格时会出现问题,PHP 将您的 HTML 代码发送到浏览器,这就是它给出 Header 已经发送到浏览器的错误的原因。

    【讨论】:

      【解决方案5】:

      我的所有项目都使用WP Session Manager。消除创建会话的所有麻烦,您可以在代码中的任何位置使用$_SESSION 调用。就像其他 cmets 所说的那样,为了启动会话,您需要在设置标头之前运行 session_start() 函数,因此请使用钩子 plugins_loaded 来运行您的函数。

      function _action_fw_flash_message_backend_prepare() {
          if ( ! session_id() ) {
              session_start();    
          }
      }
      
      add_action( 'plugins_loaded', '_action_fw_flash_message_backend_prepare' );
      

      【讨论】:

        【解决方案6】:

        把它分开。像这样打开和关闭你的 php 头脚本:

        <?php
        
        session_start();
        
          if($_SESSION['Active'] == false){ /* Redirects user to login.php if not logged in */
            header("location:../index.html");
            exit;
        
                }
        ?>

        【讨论】:

          【解决方案7】:

          遇到了同样的问题,我找到了适合我的解决方案,而且很简单:

          php 文件应该以&lt;?php 开头,在此之前没有其他内容。 就我而言,我在&lt;?php 之前有一个空格;删除后错误消失了。

          【讨论】:

            【解决方案8】:

            启动 之前没有空格

            【讨论】:

            • 请添加更多详细信息以扩展您的答案,例如工作代码或文档引用。
            【解决方案9】:

            我的 php 代码中间的 session() 有这个问题,因为我只是先在那里开始会话。
            在第一行,我只有一个“”作为注释。

            这就是问题所在,“

            解决:
            在将注释行移至底部并在第一点移至“

            【讨论】:

            • 请确认您打算这样回答本页顶部的问题,而不是提出类似问题及其解决方案。
            猜你喜欢
            • 2019-09-25
            • 2017-08-29
            • 1970-01-01
            • 2014-06-04
            • 2014-06-24
            • 2016-05-28
            • 1970-01-01
            • 1970-01-01
            • 2018-01-29
            相关资源
            最近更新 更多