Foros del Web » Programando para Internet » PHP »

[SOLUCIONADO] Warning: Cannot modify header information...

Estas en el tema de Warning: Cannot modify header information... en el foro de PHP en Foros del Web. Buena tarde para todos, de verdad llevo UNA semana intentando de resolver estre problema, pero no encuentro la ... solución. He leido en muchas partes ...
  #1 (permalink)  
Antiguo 24/02/2014, 16:02
Avatar de andres_15_  
Fecha de Ingreso: septiembre-2008
Ubicación: Cali
Mensajes: 232
Antigüedad: 15 años, 7 meses
Puntos: 7
Pregunta Warning: Cannot modify header information...

Buena tarde para todos, de verdad llevo UNA semana intentando de resolver estre problema, pero no encuentro la ... solución. He leido en muchas partes que quite los espacios en blanco de las etiquetas <?php y ?>, tambien lo de guardarlo en formato ANSI pero Tampoco, les agradeceria me ayudaran, este es el error completo:

Warning: Cannot modify header information - headers already sent by (output started at /home/vol10_7/260mb.net/n260m_14357856/htdocs/chessmoney/aplication/aplication/views/Utils/visMenu.php:39) in /home/vol10_7/260mb.net/n260m_14357856/htdocs/chessmoney/aplication/aplication/control/Usuarios/conCuentas.php on line 105

Y este es el archivo visMenu.php

Código PHP:
Ver original
  1. <?php
  2. if(!isset($_SESSION)){session_start();}
  3. require_once('utiVerificaInicioSession.php');?>
  4. <script>
  5.     $(document).ready(function(){
  6.         var icons={
  7.             header:"ui-icon-circle-arrow-e",
  8.             headerSelected:"ui-icon-circle-arrow-s"
  9.         };
  10.         $("#divMenu").accordion({icons: icons});
  11.        
  12.     });
  13. </script>
  14. <div id="divMenu">
  15.     <h3><a href="#">Mis datos</a></h3>
  16.     <div>
  17.             <ul>
  18.                 <li>
  19.                     <a href="index.php?module=Usuarios&action=HomeCuentas">
  20.                         Home
  21.                     </a>
  22.                 </li>
  23.                 <li>
  24.                     <a href="index.php?module=Usuarios&action=MisDatos">
  25.                         Mis datos
  26.                     </a>
  27.                 </li>
  28.             </ul>
  29.         </div>
  30.     <h3><a href="#">Partidas</a></h3>
  31.     <div>
  32.             <ul>
  33.                 <li>
  34.                     <a href="index.php?module=Partidas&action=NuevaPartida">
  35.                         Nueva
  36.                     </a>
  37.                 </li>
  38.             </ul>
  39. </div>

Y este es el de conCuentas.php

Código PHP:
Ver original
  1. <?php
  2. if(!isset($_SESSION)){
  3. }
  4. require_once($_SESSION['CONFIG_SITE']['PATH_APLICATION'].'/aplication/views/Utils/utiVerificaInicioSession.php');
  5. /**
  6.  * @author: John Jairo Cortes Garcia - [email protected]
  7.  * @version: 1.0.0
  8.  * Fecha - 24-03-2012
  9.  */
  10. require_once($_SESSION['CONFIG_SITE']['PATH_APLICATION'].'/aplication/utils/inputfilter-2005-05-09/class.inputfilter.php5');
  11. //se instancia la clase
  12. $obFilter = new InputFilter();
  13. //Variable Global $_POST libre de XSS e Inyecciones SQL
  14. $_POST = $obFilter->process($_POST);
  15. $_GET  = $obFilter->process($_GET);
  16.  
  17. $strPath='';
  18. if(isset($_GET['actionajax']) || isset($_POST['actionajax'])){
  19.     $strPath .=$_SESSION['CONFIG_SITE']['PATH_APLICATION'];
  20. }else{
  21.     $strPath .=$_SESSION['CONFIG_SITE']['PATH_APLICATION'];
  22. }
  23. /// include de los objetos necesarios
  24. require_once($_SESSION['CONFIG_SITE']['PATH_APLICATION'].'/aplication/model/cl_dao/dao_cuentas.php');
  25. require_once($_SESSION['CONFIG_SITE']['PATH_APLICATION'].'/aplication/model/cl_vo/vo_cuentas.php');
  26. require_once($_SESSION['CONFIG_SITE']['PATH_APLICATION'].'/aplication/model/cl_dao/dao_cuentas_ingreso.php');
  27. require_once($_SESSION['CONFIG_SITE']['PATH_APLICATION'].'/aplication/model/cl_vo/vo_cuentas_ingreso.php');
  28. require_once($_SESSION['CONFIG_SITE']['PATH_APLICATION'].'/aplication/model/cl_dao/dao_salas_ingresos.php');
  29. require_once($_SESSION['CONFIG_SITE']['PATH_APLICATION'].'/aplication/model/cl_vo/vo_salas_ingresos.php');
  30. require_once($_SESSION['CONFIG_SITE']['PATH_APLICATION'].'/aplication/utils/utiSetVarSession.php');
  31. require_once($_SESSION['CONFIG_SITE']['PATH_APLICATION'].'/aplication/model/cl_dao/dao_cuentas_puntos.php');
  32. require_once($_SESSION['CONFIG_SITE']['PATH_APLICATION'].'/aplication/model/cl_vo/vo_cuentas_puntos.php');
  33. //
  34. $actionBttn =(isset($_GET['actionBttn'])?$_GET['actionBttn']:(isset($_POST['actionBttn'])?$_POST['actionBttn']:""));
  35. //////
  36. if(isset($actionBttn)){
  37.     switch($actionBttn){
  38.         case 'buscardatoscuentas':
  39.             $objDaoCuentas = new dao_cuentas(); //se instancias los objetos de dao_cuentas y vo_cuentas
  40.             $objVoCuentas  = new vo_cuentas();
  41.            
  42.             $bolResultado = false; //inicia un booleano en falso
  43.            
  44.             $objVoCuentas->set_id($_SESSION['CONFIG_USER']['ID_CUENTA']);
  45.             //
  46.             $objVoCuentas = $objDaoCuentas->consulta_cuenta_by_codigo($objVoCuentas);
  47.             // buscamos los datos de los puntos
  48.             $objDaoCuentas_puntos = new dao_cuentas_puntos();
  49.             $objVoCuentas_puntos  = new vo_cuentas_puntos();
  50.            
  51.             $objVoCuentas_puntos->set_id_cuentas($_SESSION['CONFIG_USER']['ID_CUENTA']);
  52.            
  53.             $objVoCuentas_puntos = $objDaoCuentas_puntos->consulta_puntos_by_idcuentas($objVoCuentas_puntos);
  54.             //
  55.             echo json_encode(array(
  56.                 "codigo"=>$objVoCuentas->get_id(),
  57.                 "usuario"=>$objVoCuentas->get_usuario(),
  58.                 "passwd"=>$objVoCuentas->get_passw(),
  59.                 "prim_nombre"=>$objVoCuentas->get_primer_nombre(),
  60.                 "seg_nombre"=>$objVoCuentas->get_segundo_nombre(),
  61.                 "prim_app"=>$objVoCuentas->get_primer_apellido(),
  62.                 "seg_app"=>$objVoCuentas->get_segundo_apellido(),
  63.                 "email"=>$objVoCuentas->get_email(),
  64.                 "tel_casa"=>$objVoCuentas->get_telefono_casa(),
  65.                 "tel_movil"=>$objVoCuentas->get_telefono_movil(),
  66.                 "puntos"=>$objVoCuentas_puntos->get_puntos()
  67.             ));
  68.             break;
  69.         case 'guardar':
  70.             $objDaoCuentas = new dao_cuentas();
  71.             $objVoCuentas  = new vo_cuentas();
  72.            
  73.             $bolResultado = false;
  74.            
  75.             $objVoCuentas->set_id($_POST['hdncodigo']);
  76.            
  77.             /// consultamos los datos antes de actualizar
  78.             $objVoCuentas_cons  = new vo_cuentas();
  79.             $objVoCuentas_cons  = $objDaoCuentas->consulta_cuenta_by_codigo($objVoCuentas);
  80.             /// verificamos si hay que cambiar el password
  81.             if(isset($_POST['chkpass'])){
  82.                 $strPass = md5($objVoCuentas_cons->get_usuario()."_".$_POST['txtPass']);
  83.             }else{
  84.                 $strPass = $objVoCuentas_cons->get_passw();
  85.             }
  86.            
  87.             $objVoCuentas->set_passw($strPass);
  88.             $objVoCuentas->set_primer_nombre($_POST['txtPrimNombre']);
  89.             $objVoCuentas->set_segundo_nombre($_POST['txtSeguNombre']);
  90.             $objVoCuentas->set_primer_apellido($_POST['txtPrimApp']);
  91.             $objVoCuentas->set_segundo_apellido($_POST['txtSeguApp']);
  92.             $objVoCuentas->set_telefono_casa($_POST['txtTelefonoCasa']);
  93.             $objVoCuentas->set_telefono_movil($_POST['txtTelefonoMovil']);
  94.            
  95.             $objVoCuentas->set_modificado_por($_SESSION['CONFIG_USER']['ID_CUENTA']);
  96.  
  97.            
  98.             $bolResultado = $objDaoCuentas->guarda_cuentas($objVoCuentas);
  99.             if(!$bolResultado)
  100.             {header("location:".$_SESSION['CONFIG_SITE']['URL_SITE']."/index.php?module=Usuarios&action=MisDatos&r=er");
  101.             }
  102.  
  103.             else
  104.             {header("location:".$_SESSION['CONFIG_SITE']['URL_SITE']."/index.php?module=Usuarios&action=MisDatos&r=ok");
  105.             }
  106.                 break;
  107.         case 'buscarultcx':
  108.             $bolResultado = false;
  109.             /// buscamos las sesiones abiertas en salas y las cerramos
  110.             $objDaoSalasIngreso = new dao_salas_ingresos();
  111.             $objVoSalasIngreso = new vo_salas_ingresos();
  112.             $obj_set_var_ssn = new utisetVarSession();
  113.  
  114.             // consultamos el registro abierto
  115.             $objVoSalasIngreso->set_id_cuentas($obj_set_var_ssn->get_ssn_id_cuenta());
  116.            
  117.             $objVoSalasIngreso_activo = new vo_salas_ingresos();
  118.             $objVoSalasIngreso_activo = $objDaoSalasIngreso->consulta_salas_ingreso_x_idcuentas_activo($objVoSalasIngreso);
  119.             // verificamos si hay q actualizar
  120.             if($objVoSalasIngreso_activo!=null){
  121.                 // set valores
  122.                 $objVoSalasIngreso->set_estado("S");
  123.                 $objVoSalasIngreso->set_id($objVoSalasIngreso_activo->get_id());
  124.                 $bolResultado = $objDaoSalasIngreso->update_salas_ingreso_x_id($objVoSalasIngreso);
  125.                 if(!$bolResultado){
  126.                     echo json_encode(array(
  127.                         "bolresultado"=>"false"
  128.                     ));
  129.                 }
  130.             }
  131.             $objDaoCuentasIngreso = new dao_cuentas_ingreso();
  132.             $objVoCuentasIngreso = new vo_cuentas_ingreso();
  133.            
  134.            
  135.            
  136.             $objVoCuentasIngreso->set_id_cuentas($obj_set_var_ssn->get_ssn_id_cuenta());
  137.            
  138.             $arrDatos = $objDaoCuentasIngreso->consulta_cuenta_by_id_cuentas($objVoCuentasIngreso);
  139.            
  140.            
  141.             $objVoCuentasIngreso_ult = $arrDatos[(count($arrDatos)-1)];
  142.             $objVoCuentasIngreso_pen = isset($arrDatos[(count($arrDatos)-2)])?($arrDatos[(count($arrDatos)-2)]):null;
  143.            
  144.             echo json_encode(array(
  145.                 "fecha_ult_ingreso"=>$objVoCuentasIngreso_ult->get_fecha_ingreso(),
  146.                 "fecha_pen_ingreso"=>($objVoCuentasIngreso_pen!=null?$objVoCuentasIngreso_pen->get_fecha_ingreso():'null'),
  147.                 "fecha_pen_salida"=>($objVoCuentasIngreso_pen!=null?$objVoCuentasIngreso_pen->get_fecha_salida():'null')
  148.             ));
  149.             break;
  150.     }
  151. }
  152. ?>

la linea de codigo que arroja el error es esta:

Código PHP:
            if(!$bolResultado)
            {
header("location:".$_SESSION['CONFIG_SITE']['URL_SITE']."/index.php?module=Usuarios&action=MisDatos&r=er");
            }

            else
            {
header("location:".$_SESSION['CONFIG_SITE']['URL_SITE']."/index.php?module=Usuarios&action=MisDatos&r=ok");
            } 
  #2 (permalink)  
Antiguo 24/02/2014, 16:15
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: Warning: Cannot modify header information...

El error es un clásico, tanto que ya hay documentación al respecto: PHP:¿Por qué me sale "Warning: Cannot modify header information - headers already sent by (output started at 1:2) in 3 on line 4"?

Por favor, te invito a leer las normas del foro para que aprendas a usarlo antes de abrir un tema sin buscar antes.
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #3 (permalink)  
Antiguo 24/02/2014, 16:26
Avatar de andres_15_  
Fecha de Ingreso: septiembre-2008
Ubicación: Cali
Mensajes: 232
Antigüedad: 15 años, 7 meses
Puntos: 7
Respuesta: Warning: Cannot modify header information...

Cita:
Iniciado por pateketrueke Ver Mensaje
El error es un clásico, tanto que ya hay documentación al respecto: PHP:¿Por qué me sale "Warning: Cannot modify header information - headers already sent by (output started at 1:2) in 3 on line 4"?

Por favor, te invito a leer las normas del foro para que aprendas a usarlo antes de abrir un tema sin buscar antes.
Gracias de antemano, pero ya lo estuve leyendo, pero corrigiendo lo que me dice, tampoco se arregla este error
  #4 (permalink)  
Antiguo 24/02/2014, 16:58
 
Fecha de Ingreso: febrero-2014
Mensajes: 2
Antigüedad: 10 años, 2 meses
Puntos: 0
Respuesta: Warning: Cannot modify header information...

fijate que ami me paso igual que tu por mas que buscaba no encontraba la solucion debido a leer varias soluciones como los espacios y la codificacion ANSI sin embargo la parte del header("location: lo tenia despues del <html> un ejemplo sencillo es asi:

<html>
<?php
header("Location: ");
exit();
?>

alo cual lo que hice fue cambiar la parte del <?php y todo su contenido arriba del <html>

debes de fijarte de no enviar ningún texto con ninguna función de salida ( print, echo entre otros) ya que las cabeceras se mandan siempre primero, si hay texto enviado previamente te generará un error
espero te sirva esto.
  #5 (permalink)  
Antiguo 24/02/2014, 17:47
Avatar de arcanisgk122  
Fecha de Ingreso: junio-2010
Mensajes: 755
Antigüedad: 13 años, 11 meses
Puntos: 28
Respuesta: Warning: Cannot modify header information...

exacto no puedes usar header si tienes alguna salida de texto por pantalla en algun lenguaje arriba del header, para que te funciones tiene que ser 100% php sin echo: te dejo ejemplos:


primer ejemplo: ERROR
Código PHP:
Ver original
  1. echo "hello,world";
  2. header("Location: ");

segundo ejemplo: ERROR
Código PHP:
Ver original
  1. codigo HTML
  2. header("Location: ");

tercer Ejemplo: Correcto
Código PHP:
Ver original
  1. header("Location: ");
  2. Codigo otro lenguaje html php
__________________
Cooler Master Gladiator 600 - AMD PHENOM II X4 955 @ 3.5GHZ
GA-MA78GM-US2H - Super Talent 800 2GB x 2 Dual, (Unganged)
PSU Cooler Master eXtreme Power Plus 500W - Saphire R7-260OC-2GB
  #6 (permalink)  
Antiguo 24/02/2014, 22:46
 
Fecha de Ingreso: abril-2012
Mensajes: 88
Antigüedad: 12 años
Puntos: 1
Respuesta: Warning: Cannot modify header information...

El error se da por que ya has enviado una salida como cabecera y no puedes luego emitir otra como explica fabianessy pero existe una solución para eso que es muy molestoso y tambien se da en el caso del envio de cookies...


Código PHP:
ob_start();

//codigo que da la molestia!...

ob_end_clean(); 
  #7 (permalink)  
Antiguo 26/02/2014, 12:41
Avatar de andres_15_  
Fecha de Ingreso: septiembre-2008
Ubicación: Cali
Mensajes: 232
Antigüedad: 15 años, 7 meses
Puntos: 7
Respuesta: Warning: Cannot modify header information...

Cita:
Iniciado por manuel__7 Ver Mensaje
El error se da por que ya has enviado una salida como cabecera y no puedes luego emitir otra como explica fabianessy pero existe una solución para eso que es muy molestoso y tambien se da en el caso del envio de cookies...


Código PHP:
ob_start();

//codigo que da la molestia!...

ob_end_clean(); 
men, no se que escribiste pero coloque esas funciones entre mi codigo y de verdad desparecio el problema, lo habia intentado antes y no habia funcionado. ¡GRACIAS!
  #8 (permalink)  
Antiguo 26/02/2014, 15:59
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: Warning: Cannot modify header information...

Y es solución solo es un parche, que demuestra que no sabes programar, lo siento pero es la verdad.

Que ocultes el problema no quiere decir que lo hayas solucionado.
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #9 (permalink)  
Antiguo 27/02/2014, 11:33
 
Fecha de Ingreso: abril-2012
Mensajes: 88
Antigüedad: 12 años
Puntos: 1
Respuesta: Warning: Cannot modify header information...

Cita:
Iniciado por andres_15_ Ver Mensaje
men, no se que escribiste pero coloque esas funciones entre mi codigo y de verdad desparecio el problema, lo habia intentado antes y no habia funcionado. ¡GRACIAS!
Lee detenidamente lo que escribi y entenderás lo que quise decir. Y esta es una solución totalmente valida en código php, sino no estrían disponibles esas funciones.

Leer el manual:
http://www.php.net/manual/es/function.ob-end-clean.php

Esto también nos permite el envio de cookies luego de la emisión de cabeceras. Y dado que conoces la función demostrarias que eres un excelente programador o por lo menos más que los que la ignoran... jajaja

Saludos...
  #10 (permalink)  
Antiguo 27/02/2014, 11:48
Avatar de arcanisgk122  
Fecha de Ingreso: junio-2010
Mensajes: 755
Antigüedad: 13 años, 11 meses
Puntos: 28
Respuesta: Warning: Cannot modify header information...

la funcion ob-end-clean.php no va destinada a limpiar los errores de salida de texto inadecuados. esto es una mala practica como dice pateketrueke que pasaría si esta funcion queda obsoleta y despreciada en las próximas compilaciones...???

la idea de esta funcion es bloquear la salida de texto por pantalla del buffer de memoria y recogerla en la memoria alterna para mostrarla al finalizar el recorrido de toda la funcion.

http://pa1.php.net/ob_end_clean
__________________
Cooler Master Gladiator 600 - AMD PHENOM II X4 955 @ 3.5GHZ
GA-MA78GM-US2H - Super Talent 800 2GB x 2 Dual, (Unganged)
PSU Cooler Master eXtreme Power Plus 500W - Saphire R7-260OC-2GB
  #11 (permalink)  
Antiguo 27/02/2014, 11:50
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: Warning: Cannot modify header information...

Cita:
Iniciado por manuel__7 Ver Mensaje
Y esta es una solución totalmente valida en código php, sino no estrían disponibles esas funciones.
1. No es una "solución", es un hack, uno muy feo.

Y que sea válido no significa que sea correcto, te invito a reflexionarlo.

El uso de este hack sólo demuestra la ignorancia del programador acerca de cómo funciona HTTP, y sobre todo, cómo interactúa PHP con dicho protocolo.

Primero se deben enviar las cabeceras, siempre, y las cabeceras incluyen cookies desde luego.

Después se debe enviar todo el cuerpo de la respuesta, que ahí vendría el HTML, etc.

Si no comprendes eso no deberías dedicarte a la web.

Cita:
Iniciado por manuel__7 Ver Mensaje
Esto también nos permite el envio de cookies luego de la emisión de cabeceras. Y dado que conoces la función demostrarias que eres un excelente programador o por lo menos más que los que la ignoran... jajaja
2. Eso demuestra perfectamente el punto 1, no sabes de lo que hablas.

El uso de buffers tiene otro objetivo, que es almacenar toda salida de un script PHP para después procesarla, escribirla a un archivo, etc.

Un buen script de PHP no necesita de buffers para poder enviar cabeceras o cookies al navegador, todo está en el flujo, si tienes control sobre tu programa entonces sí eres un excelente programador.

Espero tu respuesta.
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.

Última edición por pateketrueke; 27/02/2014 a las 12:02 Razón: errata

Etiquetas: fecha, header, modify, registro, select, sql, usuarios, variable, warning
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 16:50.