Foros del Web » Programando para Internet » PHP »

Como eleminar un error warning del php?

Estas en el tema de Como eleminar un error warning del php? en el foro de PHP en Foros del Web. Resulta que mi web funciona perfectamente pero en unas de mis paguinas sale el siguiente error: Warning: Cannot modify header information - headers already sent ...
  #1 (permalink)  
Antiguo 04/05/2006, 11:02
 
Fecha de Ingreso: febrero-2003
Mensajes: 763
Antigüedad: 21 años, 9 meses
Puntos: 2
Como eleminar un error warning del php?

Resulta que mi web funciona perfectamente pero en unas de mis paguinas sale el siguiente error:

Warning: Cannot modify header information - headers already sent by (output started at /home/medi/public_html/foros/admin/functions.php:11) in /home/medi/public_html/foros/admin/functions.php on line 1627

Es un foro el cual le puesto un codigo un menu de mi web y desde que le puse ese menu me sale ese error pero el foro funciona perfectamente y me gustaria elimitar ese error, como decirle a php que se lo salte y lo ignore ¿se puede?

saludos
  #2 (permalink)  
Antiguo 04/05/2006, 11:12
Avatar de carlosfocus  
Fecha de Ingreso: enero-2006
Ubicación: Venezuela
Mensajes: 823
Antigüedad: 18 años, 10 meses
Puntos: 0
Puedes colocar el codigo?
__________________
Carlos Herrera
Web Developer
www.carlos.com.ve
Para descargar archivos propios a su Teléfono Mobil? www.carlosfocus.com
  #3 (permalink)  
Antiguo 04/05/2006, 11:14
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 10 meses
Puntos: 129
El error te está indicando el problema; concretamente en la línea "11" de "functions.php" tienes un espacio o un salto de línea despues de ?> .. o tienes algo de HTML ahí (realmente sin ver ese códdo es complicado darte más indicaciones.

El caso es que NO puede existir nada de "salida" (entiendase a "salida" todo lo que antes mencioné) antes de una llamada a una función tipo header() o session_start() .. o equivalente que "envie" cabeceras HTTP al cliente (como esas funciones lo hacen).

www.php.net/header

Cita:
como decirle a php que se lo salte y lo ignore ¿se puede?
No se trata de "ignorar" los problemas .. sino solventarlos. Tu estás haciendo algo "mal" y PHP te está avisando. A veces "aparentemente" todo podría seguir funcionan "casi igual" .. en otros casos tendrás problemas de seguridad si no haces caso a esos "avisos".

Si dices usar cierto "foro" .. indica Cual usas .. tal vez el procedimiento para "insertar" ese código que tu pusistes no sea el correcto o por donde lo hicistes.

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #4 (permalink)  
Antiguo 04/05/2006, 12:17
 
Fecha de Ingreso: abril-2006
Mensajes: 4
Antigüedad: 18 años, 7 meses
Puntos: 0
Ese error sale cuando trabajas con la funcion header(), lo que pasa es que seguramente por algun lugar de tu script haces una llamada a la funcion echo o print, o muestras algun tipo de salida...

Recuerda que header() debe enviarse antes de cualquier salida, por eso las recmendacines anteriores de que no tengas algun espacio despues de ?> o antes de <?php

Si deseas conservar ese comportamiento, sin que header() fastidie, entonces, puedes utilizar la funcion ob_start() al comienzo de tu script, y al finalizarlo, llamas a ob_end_flush()

Si no entiendes ni J de lo que te recomendamos.... entonces ve al php.ini y cambia display_errors = Off y asi olvidate de todos los mensajes de errores, pero ten cuidado con esto, deberias hacerlo cuando tu proyecto esta listo y depurado al 100%
  #5 (permalink)  
Antiguo 04/05/2006, 14:19
 
Fecha de Ingreso: febrero-2003
Mensajes: 763
Antigüedad: 21 años, 9 meses
Puntos: 2
aqui os pego la cabezera de functions.php:

Código PHP:
<?php
echo <<< HTML
<body bgcolor="#FFFFFF">
<div align="center">
<center>
<table border="0" cellpadding="0" cellspacing="0" style="border-collapse: collapse" bordercolor="#111111" width="780" id="AutoNumber1">
<tr>
<td colspan="2" width="800">
HTML;
include(
"../arriba.php");
echo <<< HTML
</td>
</tr>
<tr>
<td width="180">
<img border="0" src="../images/men.gif" width="180" height="1"></td>
<td width="600">
<img border="0" src="../images/pri.gif" width="600" height="1"></td>
</tr>
<tr>
<td width="180" valign="top">
HTML;
include(
"../menu.php");
echo <<< HTML
</td>
<td width="680" valign="top">
HTML;
//fin de menu
error_reporting(7);
...
...
...
Y este el error, que solo sale en una de las paguinas del foro las demas van bien:

Warning: Cannot modify header information - headers already sent by (output started at /home/medi/public_html/foros/admin/functions.php:10) in /home/medi/public_html/foros/admin/functions.php on line 1621


el foro aparentemente funciona bien, es el vbulletin 3.0.0 y claro podria hacerlo mediante las plantillas que tiene en el panel de control, pero solo acepta html y mi menu tiene php (includes() basicamente)

Gracias, no se cual puede ser el problema:
  #6 (permalink)  
Antiguo 04/05/2006, 15:50
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 10 meses
Puntos: 129
el foro aparentemente funciona bien, es el vbulletin 3.0.0 y claro podria hacerlo mediante las plantillas que tiene en el panel de control, pero solo acepta html y mi menu tiene php (includes() basicamente)

Esto deberías concretarlo en el foro de "Aplicaciones pre-fabricadas" .. vBulletin debe tener métodos para eso más avanzados.

------------

Por otro lado .. ya te comenté que el mensaje de error te dice donde está el error.

Pon el código -completo- de:
/home/medi/public_html/foros/admin/functions.php

Por qué ahí te avisa que en la línea: 1621 que aparentemente en:
/home/medi/public_html/foros/admin/functions.php

hace en esa línea algún header() o session_Start() o algo así ..

en su línea 10 de este (se llama a si mismo?) tienes el problema .. Cuales son esas líneas?

Y por favor .. lee los comentarios de la función header() (www.php.net/header) ahí se explica lo que antes comenté: no puedes enviar NADA de HTML antes de esas funciones, tendrás que ordenar tu código para que esa situación -no suceda- .. (Por eso te decía que no es buna práctica en una aplicación estilo foros vBulletin (que además te dan soporte) que tengas que hacer eso que estás haciendo así.

Un saludo,



Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #7 (permalink)  
Antiguo 04/05/2006, 16:48
 
Fecha de Ingreso: febrero-2003
Mensajes: 763
Antigüedad: 21 años, 9 meses
Puntos: 2
Código PHP:
<?php
echo <<< HTML
<body bgcolor="#FFFFFF">

<div align="center">
  <center>
  <table border="0" cellpadding="0" cellspacing="0" style="border-collapse: collapse" bordercolor="#111111" width="780" id="AutoNumber1">
    <tr>
      <td colspan="2" width="800">
HTML;
// linea 11
include("../arriba.php");

echo <<< HTML
 </td>
    </tr>
    <tr>
      <td width="180">
      <img border="0" src="../images/men.gif" width="180" height="1"></td>
      <td width="600">
      <img border="0" src="../images/pri.gif" width="600" height="1"></td>
    </tr>
    <tr>
      <td width="180" valign="top">
HTML;

include(
"../menu.php");

echo <<< HTML

</td>
      <td width="680" valign="top">

HTML;
// fin de mi codigo
//comienzo del codigo php del foro
error_reporting(7);

// start prep shutdown function
$noshutdownfunc 0// #CHANGE ME IF YOU CAN'T USE register_shutdown_function

.....
.....
.....

// ###################### Start vbsetcookie #######################
function vbsetcookie($name,$value="",$permanent=1) {
  global 
$cookiepath,$cookiedomain$SERVER_PORT;

  if (
$permanent) {
    
$expire=time() + 60*60*24*365;
  } else {
    
$expire 0;
  }

  if (
$SERVER_PORT == "443") {
    
// we're using SSL
    
$secure 1;
  } else {
    
$secure 0;
  }

  if (
defined('USE_COOKIE_WORKAROUND')) {
    
// It's been reported that there's a bug in PHP 4.2.0/4.2.1 with Apache 2 causing setcookie() to not work correctly.
    // This is the workaround. If you need to use this code, please add:
    //      define('USE_COOKIE_WORKAROUND', 1);
    // to your config.php.

    
if (!$value) {
      
// need to do this so IE deletes the cookie correctly
      
$expire time() - 31536001;
      
$value 'deleted';
    }
    
$cookieheader "Set-Cookie: $name=".urlencode($value);
    if (
$expire) {
        
$cookieheader .= '; expires='.gmdate('D, d-M-Y H:i:s'$expire).' GMT';
    }
    if (
$cookiepath) {
      
$cookieheader .= "; path=$cookiepath";
    }
    if (
$cookiedomain) {
      
$cookieheader .= "; domain=$cookiedomain";
    }
    if (
$secure) {
      
$cookieheader .= '; secure';
    }
    
header($cookieheaderfalse); // force multiple headers of same type
  
} else {
    
setcookie($name$value$expire$cookiepath$cookiedomain$secure); // linea 1629
  
}

}

.....
.....
.....

?>
Warning: Cannot modify header information - headers already sent by (output started at /home/medi/public_html/foros/admin/functions.php:11) in /home/medi/public_html/foros/admin/functions.php on line 1629

Este seria el codigo php entero, respecto al panel de control efectivamente tiene una opcion para insertar una cabezera en php pero dice que no puedo utilizar ni echos ni printf por pobar lo puse y funciona bien pero en esa pagina en concreto me vuelve a salir un error parecido al que puso porque lo que estoy en las mismas, el vbulletin me avisa el mismo:

PHP parsed code:

(Don't print/echo out directly!)


Probe a preguntarlo en hermientas prefrabricadas y el foro de vbulletinhispano pero nadie sabe nada o no responde, por eso pense hacerlo directamente en algun archivo .php del foro importante que utilize en todas sus paguinas ese es funcion.php pero sale ese error y no acabo de comprender los de header mi codigo son las 34 primeras lineas que posteado y no se donde puede estar el problema. Las lineas 11 y 1629 las he señalado comentadas

gracias
  #8 (permalink)  
Antiguo 05/05/2006, 05:02
 
Fecha de Ingreso: febrero-2003
Mensajes: 763
Antigüedad: 21 años, 9 meses
Puntos: 2
me hechais un cable?
  #9 (permalink)  
Antiguo 05/05/2006, 06:06
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 10 meses
Puntos: 129
Te comento como bien sabras que vBulletin es una aplicación demasiado extensa ..

NO se trata de colocarlo en un archivo que veas que se llama en todas las páginas. Se trata de ver -donde- se llama a ese código.

Por ejemplo en "functions.php" como veras ahí se definen funciones .. NO salida directamente. En otros scritps/páginas de vBulletin no sé donde lo llamará .. pero lo que es cierto que lo hace despues de haber enviado otras cabeceras: cookies, redireccionamientos (por header()) .. o definiciones de sesiones.

Lo que deberías estudiar es como funciona su sistema de plantillas (no sé si usa algo standard como "Smarty?" o su própio motor). Será ahí y con algo más de código donde podrás hacerlo.

El problema como veras no es de "saber" o no PHP .. sino de -conocer- esa aplicación y como trabaja ..sobre todo como maneja sus "themes" o "plantillas" o sus sistemas de "plug-in" o similares. Yo por lo menos -lo desconzco- (pese que pueda saber todo el "PHP" que tu quieras). Eso lo -debe- conocer mejor que nadie los desarrolladores de vBulletin o quien lo use (no como "usuario" o administrador sino como desarrollador de plug-in o similar).

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #10 (permalink)  
Antiguo 05/05/2006, 06:31
 
Fecha de Ingreso: febrero-2003
Mensajes: 763
Antigüedad: 21 años, 9 meses
Puntos: 2
segun vbulletin no puedo utilizar ni echo ni printf (Don't print/echo out directly!) es una opcion que tiene en las plantillas para inserttar codigo php, pero si no puedo utilizar esos comandos... bueno a ver lo que puedo hacer

saludos
  #11 (permalink)  
Antiguo 05/05/2006, 09:21
 
Fecha de Ingreso: noviembre-2005
Mensajes: 37
Antigüedad: 19 años
Puntos: 0
pon una @... y no falla
  #12 (permalink)  
Antiguo 05/05/2006, 09:57
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 10 meses
Puntos: 129
Cita:
Iniciado por Redg
pon una @... y no falla
Podrías ser un poco más "extenso" en tu respuesta?

Un "@" en PHP en general "omite" los mensaje de error .. es decir, no los presenta (que no quiere decir que el -error- siga existiendo).

Pero ya que hablamos de una aplicación -compleja- con su própio motor de gestión de plantillas .. sus sistemas de administración para hacer ese tipo de cosas .. no sé ya si esa "@" será un "comando" própio de ese motor de gestión de plantillas que vBulletin use para indicar algo en especial.

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
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 14:10.