Cuando programamos en PHP existe una serie de errores y warnings que son muy típicos y que para el programador más novel pueden suponer un problema. Aquí recopilamos algunos de los más típicos, pero ya que estamos, me gustaría que todos nos contarais errores y soluciones a los mismos que encontráis a menudo.
Warning: Cannot modify header information – headers already sent by
Que también podemos encontrar como “Warning: session_start(): Cannot send session cache limiter – headers already sent” o “Warning: session_start() [function.session-start]: Cannot send session cookie – headers already sent by“. Se produce cuando intentamos modificar las cabeceras del paquete HTTP, cuando ya hemos dejado de emitirlas y estamos emitiendo el cuerpo del paquete.
¿Por qué ocurre esto? Podéis verlo dentro del protocolo. Para solucionarlo deberemos ser muy cuidadosos en dos aspectos:
Fatal error: Cannot redeclare nombre_función
En PHP no existe la sobrecarga (aunque podéis imitarlas), por lo tanto las declaraciones de las funciones serán únicas en todo el código. Si estamos trabajando en un proyecto grande y queremos asegurarnos que la función se declara cuando no exista y no se declare cuando sí exista hacemos lo siguiente, usar function_exists de PHP, veamos un ejemplo.
if(!function_exists('mi_funcion')) { function mi_funcion() { /* */ } }
Notice: A session had already been started – ignoring session_start()
La situación es la siguiente, tenemos la sesión iniciada, con session_start() y debido a que cargamos otro componente de la página que no sabe si la sesión está iniciada, volvemos a hacer la llamada. No se trata de un error sino de una notice, pero aún así podemos evitarla:
if (!isset ($_COOKIE[ini_get('session.name')])){ session_start(); }
Notice: Constant MI_CONSTANTE already defined in
Cuando usamos constantes en PHP (para guardar por ejemplo los datos de conexión a la base de datos), es posible que redeclaremos en dos script diferentes la misma variable y salte un aviso. Para evitarlo haremos lo siguiente:
if (defined('PRUEBA')){ echo PRUEBA; }
Notice: Use of undefined constant MI_CONSTANTE – assumed ‘MI_CONSTANTE’
Si a la hora de definir constantes cometemos el error de no usar comillas (me da la sensación de que alguna vez ha estado permitido), PHP no devuelve un error, pero sí un aviso. Os enseño el error y cómo solucionarlo:
define(DB_HOST, "localhost"); // notice define("DB_HOST", "localhost"); // bien
Faltan muchos, ¿cuál quieres comentar?
https://www.youtube.com/embed/z-xGk9c_eOw Guionista y locutor: Manuel Ignacio López Quintero.Fecha de publicación: 31 de diciembre de 2024.
Ver comentarios
Deberías explicar el típico error de "headers already send" cuando se intenta enviar un header con "header" o con "session_start" una vez se ha enviado un carácter. Remarcar también que ese carácter puede ser un espacio o un salto de línea al inicio de un archivo antes de un <?php
Carlos
@Carlos: tienes razón, ya está incluido ese error... mira que nos ha pasado veces a todos los que empezamos con PHP.
Y en el mismo comentario de Carlos esta otro error tipico...
Cuando recien comienza el script segun la configuracion que tenga el php.ini
es permitido: <?
cuando no esta configurado te arroja error, por que naturalmente tiene que ser: <?php
Saludos!
Hola, tengo problema con el Warning, ya no se que estoy haciendo mal: el error me lo manda en: header("Location: $Target"); ya lei cambie cosas y no funciona no se que es
alguein puede ayudarme????
y el codigo es:
<?php $UsuName= strtoupper( trim($_POST[textname]));
$UsuPass= trim($_POST[textpsw]);
$UsuIp= getenv(REMOTE_ADDR);
$SerIp= getenv(LOCAL_ADDR);
$totalRows_usuexist= 0;
$UsuValid1= false;
$UsuValid2= false;
$UsuValid3= false;
if(!empty($UsuName) and !empty($UsuPass)) {;
$UsuValid1= true;
require_once('Connections/LacNet.php');
if (!function_exists("GetSQLValueString")) {
function GetSQLValueString($theValue, $theType, $theDefinedValue = "", $theNotDefinedValue = "")
{
$theValue = get_magic_quotes_gpc() ? stripslashes($theValue) : $theValue;
$theValue = function_exists("mysql_real_escape_string") ? mysql_real_escape_string($theValue) : mysql_escape_string($theValue);
switch ($theType) {
case "text":
$theValue = ($theValue != "") ? "'" . $theValue . "'" : "NULL";
break;
case "long":
case "int":
$theValue = ($theValue != "") ? intval($theValue) : "NULL";
break;
case "double":
$theValue = ($theValue != "") ? "'" . doubleval($theValue) . "'" : "NULL";
break;
case "date":
$theValue = ($theValue != "") ? "'" . $theValue . "'" : "NULL";
break;
case "defined":
$theValue = ($theValue != "") ? $theDefinedValue : $theNotDefinedValue;
break;
}
return $theValue;
}
}
mysql_select_db($database_almundo, $almundo);
$query_usuexist = "SELECT * FROM usuarios WHERE usu_login = '$UsuName'";
$usuexist = mysql_query($query_usuexist, $almundo) or die(mysql_error());
$row_usuexist = mysql_fetch_assoc($usuexist);
$totalRows_usuexist = mysql_num_rows($usuexist);
if ($totalRows_usuexist 0) {;
if ($UsuPass == $row_usuexist["usu_password"] and $row_usuexist["usu_status"] == 1) {;
$UsuValid2 = true;
}
}
}
?>
Muchas gracias! me fue muy útil este post! saludos