【问题标题】:codeigniter whitespace or header causing warningcodeigniter 空格或标题导致警告
【发布时间】:2012-11-02 07:07:43
【问题描述】:

我昨天一整天都收到警告错误,无法解决。不知道发生了什么。它抱怨在第 1 行对 property_model.php 执行重定向之前发送了一些输出。我去那里检查了所有内容,但没有运气。我还检查了空格。我将把错误和代码粘贴下来。

遇到了 PHP 错误

严重性:警告

消息:无法修改标头信息 - 标头已由 (输出开始于 /home/sddhd/public_html/rsw/application/models/property_model.php:1)

文件名:helpers/url_helper.php

行号:542

现在上面显示的模型代码是:

<? class Property_model extends CI_Model {
    function __construct()
        {
            parent::__construct();
        }

        function insert_property($propertyID)
        {
            $this->property_id = $propertyID;
            $this->type = $_POST['property_type'];
            $this->city = $_POST['property_city'];
            $this->address = $_POST['property_address'];
            $this->description = $_POST['property_description'];
            $this->owner = $_POST['property_owner'];
            $this->date_added = date("Y-m-d");
            $this->price = $_POST['property_price'];
            $this->offer_type = $_POST['property_offer'];
            $this->contact = $_POST['property_contact'];
            $this->db->insert('property', $this);
        }

        function insert_image_details($id, $url, $extension)
        {
            $current->property_id = $id;
            $current->extension = $extension;
            $current->url = $url;
            $this->db->insert('photos', $current);
        }
    }
?>

以及重定向调用的用途(包括对模型的整个控制器调用):

<?php
class Property extends CI_Controller {
    public function __construct()
    {
        parent::__construct();
        $this->load->helper('form');
                $this->load->helper('url');
        $this->load->model('property_model', 'propertymodel');
        $this->load->database();
    }

    public function index() {
        $this->load->view('home');
    }

    public function new_property()
    {
        $this->load->view('new_property', array('error' => '' ));    
    }

    public function create_property()
    {
        //Pass the posted data to model for insertion
        $propertyID = uniqid();
        $this->propertymodel->insert_property($propertyID); 
        $this->do_upload($propertyID);
        redirect('/home');
    }


        public function do_upload($propertyId)
        {
            $config['upload_path'] = './uploads/';
            $config['allowed_types'] = 'gif|jpg|png|jpeg';
            $config['max_size'] = '1000';
            $config['max_width']  = '1024';
            $config['max_height']  = '768';

            $this->load->library('upload', $config);
                if ( ! $this->upload->do_upload())
                {
                    $error = array('error' => $this->upload->display_errors());

                    $this->load->view('create_property', $error);
                }
                else
                {
                    $data = array('upload_data' => $this->upload->data());
                    //array to access all the file uploaded attributes
                    $image_data = $this->upload->data();

                    //parameters to be passed to model: 
                    $imgUrl = "../.".$config['upload_path'].$image_data['file_name'];
                    //$imgTitle = $image_data['file_name'];
                    $fileExtension = $image_data['file_ext'];
                    $this->propertymodel->insert_image_details($propertyId, $imgUrl, $fileExtension);
                }           
        }//end of function


}
?>

任何帮助将不胜感激

【问题讨论】:

  • 检查 '' 之前的任何空格或在 property_model.php 上的 '?>' 之后
  • 我这样做了几次。空空如也。为了以防万一,我还在多个编辑器上查看过它
  • 为了更安全,请使用&lt;?php 而不是&lt;?。可能与您的问题无关,但仍然值得一提。顺便说一句,那里可能有一个空白。
  • 我添加了
  • 正如您所说,这不是空格问题,但最好不要关闭仅 PHP 的页面。只需将 ?> 留在末尾即可。这不是必需的,并且可以在将来为您节省空格问题。

标签: php codeigniter


【解决方案1】:

我遇到了同样的问题。没有任何帮助。然后我决定创建一个完整的新文件并将导致错误的文件中的内容复制到新文件中。这行得通!显然原始文件在位置 0 有一个隐藏字节。

【讨论】:

    【解决方案2】:

    您在属性控制器中有错误。 在 create_property 方法中替换这两行

    $url= base_url().'home';
    redirect($url);
    

    redirect('/home');
    

    【讨论】:

      【解决方案3】:

      您是否启用了 error_reporting?该模型可能会抛出您在此处看不到的错误。而这个错误会导致已经发送的标头。

      顺便问一下,insert_image_details 方法中的$current 是从哪里来的?这可能会引发错误。

      【讨论】:

      • 不,不相关。 current 是一个简单的数组,可以命名任何东西。它包含要存储到数据库的数据。
      • 其实那是一个对象而不是一个数组,但你是对的,它不会抛出错误(不知道)。
      • 我相信错误即将到来,因为在我发布数据后(表单标签转到 property/create_property),当我重定向时 url 永远不会改变。因此,当我在页面上刷新该错误时,它仍会重新提交数据。那可能是通过的标题信息吗?如果是,我该如何解决?
      • 您的错误日志中还有其他内容吗?我刚想到的另一件事 - $this-&gt;load-&gt;model 是否区分大小写(您的模型称为 Property_model 而不是 property_model)?
      • 嗯,我认为这与您的帖子数据没有直接关系。
      【解决方案4】:

      在实际页面加载之前可能会发送一些警告。请在您的文档根目录的 index.php 中使用以下函数打开错误报告。

      ini_set('display_errors', 'On');
      error_reporting(E_ALL);
      

      【讨论】:

      • 不,我把它放在 index.php 与应用程序文件夹、系统文件夹等相同的目录中。没有显示
      【解决方案5】:

      在 Stackoverflow 中找到另一个人发布的替代解决方案。

       //Alternate Code for solve this issue
          $url = 'site/function1';
          echo'
          <script>
          window.location.href = "'.base_url().'index.php?/'.$url.'";
          </script>
          ';
      

      这真的很好用!希望使用它没有缺点!谢谢大家的支持。

      Codeigniter: headers already sent error

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-02-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-07-07
        • 1970-01-01
        • 1970-01-01
        • 2018-11-14
        相关资源
        最近更新 更多