martes, 10 de abril de 2012

Mensajes de "Warning" en PHP


 Como su nombre lo indica un "Warning" es una advertencia  del sistema indicándonos que "algo" estamos haciendo mal los programadores. 



Algunos Warnings en PHP son los siguientes:

  1. Warning: Cannot modify header information - headers already sent by (output started at ...
Causas:

  1. En el script PHP existen espacios o caracteres extraños antes o después del código PHP.
  2. La configuración de PHP en el servidor tiene activa (en On) la directiva display_errors
  3. session_start() debe ser ejecutado antes de cualquier salida HTML porque envía headers HTTP al navegador. 
  4. Cuando hay un include, require, antes de la función.
  5. Enviar "algo" antes del header. Ej: un espacio, una coma..." 
  6. Redireccionar con header luego de haber mostrado "algo" por pantalla.
  7. Falta el (./) y el (;) : header("Location: ./pagina.php");

Soluciones:

  1. Revisar que no existan espacios, saltos de línea o caracteres antes de:
<?php
    //Y que no existan también después de:
?>
     2. Al apagar (poner en Off) la directiva display_errors, el error puede desaparecer. Se puede modificar en el archivo .htaccess o php.ini. En .htaccess:

     php_value display_errors "Off"
     3.  Añadir los include, require en las primeras lineas del código.
     4. La función header en PHP debe enviarse en la cabecera de la respuesta http, por tanto debe ser lo primero que se envíe al navegador.El  header hay que colocarlo en la primera linea del archivo, antes que cualquier tipo de salida (ya sea html, texto o espacios en blanco.
     5. Colocar el siguiente código
      
        //al inicio
<?
   ob_start();
?>
        //al final 
<?
    ob_end_flush();
?>
La función ob_start() sirve para indicarle a PHP que se ha de iniciar el buffering de la salida, es decir, que debe empezar a guardar la salida en un buffer interno, en vez de enviarla al cliente.

La función ob_end_flush() sirve para indicar a PHP que se desea realizar el volcado de todo el bufer en la salida, con lo que se enviará al cliente que ha solicitado la página.

Nota 1: Es posible desactivar el PHP Notice y PHP Warning:

Con el parámetro de configuración error_reporting podemos definir que tipo de errores quedemos almacenar en el log.

En el caso que lo tengamos a E_ALL, veremos como se van guardando en el log "PHP Notice", que algunas veces conocemos pero que quizás no resultan de interés. Podemos desactivarlos de la siguiente manera:


error_reporting = E_ALL & ~E_NOTICE //restando a los E_ALL las E_NOTICE
De la misma manera podemos eliminar los "PHP Warning"

error_reporting = E_ALL & ~E_NOTICE & ~E_WARNING

No hay comentarios:

Publicar un comentario