problemas con el header

Iniciado por kosis157, 8 Enero 2009, 17:30 PM

0 Miembros y 1 Visitante están viendo este tema.

kosis157

Hola a ver si me pueden solucionar, el tema es que tengo un script parecido a eso:
Código (php) [Seleccionar]

include("conexionBD.php");
.
.
.
header("index.php");
exit;


y el error
Warning: Cannot modify header information ....

Pues como me daba error, cree una clase BD:
Código (php) [Seleccionar]

class BaseDatos{
var $hostname,$user,$password,$dtb;
   
    function BaseDatos(){
if($_SERVER['REMOTE_ADDR']=="127.0.0.1"){
$hostname="localhost";
$user="root";
$password="";
$dtb="colegio";
}else{
$hostname="localhost";
$user="***";
$password="**";
$dtb="colegio";
}
        $this->hostname = $hostname;
$this->user = $user;
$this->password = $password;
$this->dtb=$dtb;
    }
   
    function conect(){
$isOk=true;
$conexion = mysql_connect($this->hostname,$this->user,$this->password);
if(!$conexion){
$isOk=false;
}else{
$c=mysql_select_db($this->dtb, $conexion);
if(!$c) $isOk=false;
}
return $isOk;
    }
}



dentro del archivo pongo:
Código (php) [Seleccionar]

require("includes/classes/BaseDatos.php");
$bd=new BaseDatos();
$bd->conect();
.
.
.
header("index.php");


y me sigue dando el mismo error y no hay ningun echo, también cambie el require por include pero el error sigue


PD: Me gustaría tener un archivo donde haya el usuario, contraseña, bd de la Base de datos por si tengo que cambiar no tenga que ir archivo por archivo.



gracias

Hadess_inf

Yo uso al inicio

al inicio : ob_start();
al final : ob_flush();

kosis157

Cita de: Hadess_inf en  8 Enero 2009, 18:48 PM
Yo uso al inicio

al inicio : ob_start();
al final : ob_flush();
ok funciona una cosa el ob_flush lo pones al final de la página o antes de que haga el header?

Hadess_inf


Freeze.

Me podrian explicar mas o menos como es esto del ob_start y ob_flush.

Ya lei la info de PHP pero no entendí.

WHK

#5
Lo que sucede es que un header significa "cabezera", cuando tu servidor envía una información a tu explorador este se compone en cabezera y cuerpo, en este caso no puedes poner parte de la cabezera después del cuerpo:


+----------------+
|    CABEZERA    |
+----------------+
|     CUERPO     |
+----------------+
|     TERMINO    |
+----------------+


En este caso algunos servidores utilizan un buffer de termino pero no le prestes atención a eso, solo necesitas saber que no puedes insertar un header después de haber iniciado con las funciones y la página en si ya que el header se envía una sola ves y después solo te irá mostrando errores.

Que quieres hacer escribiendo header('index.php'); ?, solo harás que se incluya en la cabezera pero no hará nada más.

Si te da error al enviar la cabezera es porque lo estás enviando después de escribir algo en el explorador.

CitarMe podrian explicar mas o menos como es esto del ob_start y ob_flush.
Significa que no enviará nada al explorador hasta cuando declares ob_end_flush y ahi recién se enviará todo, es para evitar mostrar este tipo de errores cuando algo falla antes de que las cabezeras sean enviadas pero no es la idea hacerlo, es algo así como tapar un oyo con paja.

Erik#

Tambien, si lo que intentas es una redirección:

Código (php) [Seleccionar]
header("Location: index.php");

SaXo

Si y no a todo lo dicho.

Es parcialmente correcto.

cuando hacemos un header, lo que estamos haciendo es modificar la cabecera que se ha enviado al cliente. El error se produce cuando se impreso algo por pantalla, como un echo, printf, un error, etc... ya que después de enviar la información al cliente no se puede modificar la cabecera produciendo un error del tipo que comentan más arriba.

ob es el buffer de salida php. Cuando usamos un ob_start lo que estamos haciendo es el uso del buffer salida de php para que el código que se esta ejecutando realize la ejecución en el buffer y una vez terminada obtener la ejecución del buffer y liberarlo. De esta forma, como aún no se enviado información al cliente se puede modificar la cabecera sin problemas después de un echo o un printf.

Un saludo,

SaXo