2010-08-03 15 views
8

Tengo un problema con el modelo en mi aplicación codeigniter. Recibo este error al enviar información de encabezados. Básicamente, codeigniter se queja de que mi modelo de registro envía información de encabezado antes que cualquier otra cosa. ¿Como es posible? Pensé que los modelos son solo para mantener los métodos de consultas db y nada más. ¿Puede alguien por favor explicarme eso?¿Por qué me aparece el error "can not modify header headers already send by registration_model" en codeigniter?

Así es como el comienzo de un controlador se parece a:

function User() 
{ 
    parent::Controller(); 
    $this->view_data['base_url'] = base_url(); 
    $this->load->model('User_registration_model');  // don't forget capital, it's important 
    $this->load->model('user_map_model');    // don't forget capital, it's important 
    $this->load->model('Tribe_model');     // don't forget capital, it's important 
    $this->load->library('email');      // Loading email library 
    $this->load->library('session');      // sets up the session 
    $this->load->library ('form_validation');   // Loading form validation library 
    $this->load->helper(array('form', 'url')); 
} 
+0

En qué archivo está usando las funciones de cabecera, controlador o ver? – Sarfraz

+0

Estoy teniendo toda la información del encabezado en la vista Sarfaz. Debería haber mencionado que necesitaba reescribir mi registration_model.php porque lo perdí cuando intenté subirlo al servidor (perdí la conexión en ese momento) y no hice ninguna copia de seguridad (conozco a un terrible programador de pecado) nunca debe comprometerse). Pero al menos sé que hay algo mal con mi archivo de modelo. – Pavel

+0

¿verificaste el espacio en blanco antes/después de php-tags? – teemitzitrone

Respuesta

28

Tenga en cuenta que los encabezados deben ser enviados antes cualquier otra cosa. Asegúrese de que no hay código/html o incluso espacio/sangría antes de la función de encabezado y no hay nada antes de la primera etiqueta de php de apertura <?php, así como la etiqueta de finalización ?> en su vista.

+0

Gracias a Sarfraz por la pista. He puesto un espacio en blanco y un comentario antes de la clase de controlador. Después de eliminarlo, todo volvió a la normalidad. – Pavel

+0

Sí, tenía espacio antes de

+0

Un espacio en blanco simple atornilló mis 30 minutos; (gracias por la sugerencia @Sarfraz –

4

Actualmente algunos de los proveedores de host utilizan PHP header(); para redirigir nuestro sitio, por lo que en ese tipo de servidores si usamos PHP header() se dará el error. Creo que si. En Code Igniter redirect(); está utilizando PHP header() para redirigir nuestra URL. ¡Así que es por eso que dará este error!

Así que la única solución es usar JavaScript para resolver este problema, ¡lo estoy usando! Funciona bien

//Your Code is for redirect 
redirect('site/function1'); 

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

No sé, es esta la solución correcta para el problema anterior, pero la estoy usando, funciona al 100%. ¡Agradeciendote!

23

coloca este ob_start(); en primera línea de index.php bajo el directorio de aplicación como esta:

<?php 
ob_start(); 
/* 
*--------------------------------------------------------------- 
* APPLICATION ENVIRONMENT 
*--------------------------------------------------------------- 
+0

Podría dime por qué funcionó en mi caso? +1 por cierto – asprin

+0

Esto funciona ** PERO ¿POR QUÉ? **, ¿alguien puede explicarlo? – CodeGodie

+0

De acuerdo con la respuesta de @Sarfraz, ob_start(); activará el almacenamiento en búfer de salida. activo no se envía ningún resultado desde el script (que no sean los encabezados). – Gery

Cuestiones relacionadas