8 Errores comunes al programar en PHP: Ejemplo y solución
8 Errores comunes al programar en PHP. En este artículo veremos 8 errores que cometemos a menudo cuando programamos en el lenguaje PHP. En especial, si recién estas empezando a aprender este famoso lenguaje.
Si bien PHP, en un lenguaje muy dinámico y la mayor parte de internet lo usan, por ejemplo: Facebook, etc. Algunos programadores suelen cometer errores muy cotidianos al momento de programar.
8 Errores comunes al programar en PHP
A continuación, veremos algunos errores con su descripción y solución.
1.- La función header(): Re direccionar.
Este error es bien conocido entre los programadores de PHP y el mensaje que devuelve es el siguiente:
“warning: Cannot add header information – headers already sent ”
Ahora, esto se debe que el navegador solicita una página en el servidor y este envía la respuesta en 2 partes, el header, que está conformado por “datos invisibles” para el usuario como las cookies por ejemplo; y el contenido que es lo que el usuario ve en el navegador, estructuras HTML, imágenes, textos,etc.
¿En qué parte de nuestro código ocurre este error?
<!DOCTYPE html> <?php // Aquí ya no puedes modificar las cabeceras
También en este ejemplo
<?php // ERROR: ¡Si hay 1 espacio en blanco delante de la etiqueta de inicio del PHP!
¿Cómo solucionar este error?
a) Primera forma. Si tenemos acceso al servidor debemos de configurar nuestro fichero «php.ini» contiene una opción que permite habilitar y deshabilitar este mensaje de error:
output_buffering = on / off.
Seamos sinceros, quien de nosotros tiene acceso al fichero PHP.INI, a menos que tengamos un servidor dedicado. Sin embargo, la mayoría de nosotros tenemos servidores compartidos, entonces hay que dar otras alternativas. Veamos.
b) Segunda Forma. Esta opción es muy funcional, probaremos añadiendo estas funciones al inicio de la etiqueta del PHP y al término del mismo.
// Colocar antes de cualquier código: <?php ob_start();?> <html>
Al final de todo el código PHP y/o HTML
// al terminio del fichero </html> <?php ob_end_flush(); ?>
Esta segunda opción es muy eficaz a la hora de resolver este inconveniente, pruébenlo y verán su eficacia.
2.- Problemas al comparar:
El lenguaje PHP es dinámico. Por lo tanto, se puede realizar condicional, ciclos, etc. Recordemos que PHP posee operadores de comparación y es común ver el siguiente error de código.
<?php // Código incorrecto if ($variable = 'algo'){ //imprime algo } ?>
Ahora mostramos el código correcto que debe de tener doble «==»
<?php //Código correcto por el uso "==" if ($variable == 'algo'){ // Imprime algo } ?>
Explicando el código debemos de recordar que:
a) El operador de comparación de igual es «==»
b) El símbolo «=» es el indicador de asignación de variable.
3.- Olvidar break en el switch: Ejemplo
La sentencia switch es muy parecido a una serie de sentencias IF ELSE. Sin embargo, cuando usamos la sentencia de control switch, se suele olvidar usar break al final de cada opción, dentro de la condicional lo que genera un error. Veamos un ejemplo:
<?php $prueba= 2; switch($prueba){ case 1: echo 'algo'; case 2: echo 'algo mas'; case 3: echo 'mucho mas'; case 4: echo 'bastante'; } ?>
Explicación del código
En el código anterior la opción verdadera es el 2, pero al no tener un break ejecutará todos los «echo» siguientes hasta encontrar un break o hasta terminar el switch, lo que ocasionara un error fatal.
Al igual que las condicionales IF ELSE es recomendable usar la opción default que vendría a ser el valor por defecto, si ninguna de las alternativas es la correcta.
El código correcto seria
<?php $prueba= 2; switch($prueba){ case 1: echo 'algo'; break; case 2: echo 'algo mas'; break; case 3: echo 'mucho mas'; break; case 4: echo 'bastante'; break; default: echo 'opcion por defecto si ninguno de las opciones se cumple'; } ?>
4.- Error de caracteres especiales PHP MySQL
Son errores muy especiales y a veces traen dolor de cabeza a muchos programadores. Por lo tanto, en algunos casos es difícil de detectar.
Si bien, para controlar las tildes, Ñ, comillas, entre otros caracteres lo podemos controlar incluyendo una meta dentro de la etiqueta HEAD de nuestro fichero PHP y/o HTML.
<html> <head> <!-- Agregamos esta etiqueta para controlar tildes y eñes --> <meta charset="utf-8"> </head> <body> </body> </html>
Esto sería una solución genial, pero para la información extraída de una base de datos con PHP. Esta alternativa no tiene efecto y se mostraran los caracteres especiales.
En los textos devueltos por MySQL mostrara extraños símbolos como en la imagen anterior, y letras con acentos que no habías visto ni en el diccionario árabe.
Ahora temo decirles que enfrentas a un error de codificación en tu base de datos. Este error, puede ser debido a múltiples motivos los cuales se pueden relacionar entre sí. Veamos.
a) Una mala codificación del fichero PHP.
b) Mala asignación de cotejamiento en la base de datos.
¿Cuál sería la solución para este error?
Primero. Asignar el charset UTF-8 en nuestros documentos PHP
Segundo. Asignar el cotejamiento de nuestra base de datos al «utf8_general_ci
»
Tercero. Configurar nuestra conexión con la base de datos
Este código de conexión MySQLi genera error de caracteres especiales.
$servidor= "localhost"; $usuario= "root"; $password = ""; $nombreBD= "php_buscador"; $db = new mysqli($servidor, $usuario, $password, $nombreBD); if ($db->connect_error) { die("la conexión ha fallado: " . $db->connect_error); } ?>
La solución de estos caracteres especiales es agregando el charset UTF8
<?php $servidor= "localhost"; $usuario= "root"; $password = ""; $nombreBD= "php_buscador"; $db = new mysqli($servidor, $usuario, $password, $nombreBD); if ($db->connect_error) { die("la conexión ha fallado: " . $db->connect_error); } // AGREGANDO CHARSET UTF8 if (!$db->set_charset("utf8")) { printf("Error al cargar el conjunto de caracteres utf8: %s\n", $db->error); exit(); } else { printf("Conjunto de caracteres actual: %s\n", $db->character_set_name()); } ?>
5.- Fatal error: en PHP
Los errores tipo Fatal error de PHP, son errores que pueden comprometer seriamente el funcionamiento del programa y por ello, para prevenir estos inconvenientes, se detiene la ejecución y el programa deja de funcionar al 100%. Es el nivel de error más alto en este famoso lenguaje.
En ejemplos de este tipo de error es ejecutar una función que no ha sido declarada «Fatal error undefined function» y/o intentar inicializar un objeto de una clase que no existe «Fatal error class not found
«. Veamos ejemplos:
<?php function unaFuncion() { return true; } //La siguiente funcion no existe y se genera un error Fatal otraFuncion(); ?>
Por defecto, cualquier instalación de PHP viene activado el reporte de errores y dada su importancia. Por lo tanto, se recomienda tenerlos activados incluso en servidores en producción, es decir servidor en internet.
6.- Warning: Error de advertencias
Estos errores tipo Warnings (Advertencia) son errores con nivel menor a los errores fatales y su presencia no interrumpe el funcionamiento del programa. Por lo tanto, esto no quiere decir que puedan ser errores graves. El programa sigue funcionando pero eso no garantiza que trabaje de manera correcta. Sin embargo, tenemos que darle solución rápidamente para que no produzcan errores a futuro.
¿Cómo se genera este tipo de error?
Por ejemplo, intentar anexar un archivo mediante include()
con una ruta que no existe en el servidor:
<?php //Genera un error tipo Warning include('/archivo/inexistente.php'); ?>
Otro ejemplo. Si se utiliza require()
en lugar de include()
, el error generado es tipo Fatal y el programa se detiene.
<?php //Genera un error tipo Fatal error require('archivo/inexistente.php'); ?>
7.- Notice
Los errores tipo Notice (Aviso) son los errores de menor nivel de gravedad. Señalan la presencia de un posible error pero que podrían ocurrir también de forma normal en la ejecución del programa. La aparición de errores Notice no supone la terminación del programa y, aunque no suelen ser fuente de problemas serios, pueden hacer que el programa no funcione exactamente como deseamos.
¿Qué causa un error tipo NOTICE?
Un ejemplo puede ser la referencia a variables no definidas con anterioridad e imprimirlas:
<?php $name = "Carlos"; //$nombre es una variable echo 'Tu nombre es: ' . $nombre; ?>
Sin embargo. Su relativa baja gravedad, en servidores de producción estos viene desactivados por defecto porque no genera errores que ponen en peligro al sistema.
8. Parse
Los erres tipo Parse (Analizar) son errores del analizador del núcleo de PHP y suponen la terminación del programa.
Los errores del analizador más comunes son errores de sintaxis. Por ejemplo:
<?php //Falta el ")" en la definición de la función, generará un Parse syntax error function myFunction( { $name = "Carlos"; return $name; } ?>
Como pueden observar, este error es muy común entre los programadores y la solución seria completar el paréntesis en el nombre de la función.
<?php // Funcion correcta function myFunction() { $name = "Manolo"; return $name; } ?>
CONCLUSIÓN
El conocimiento de estos errores hace que a un futuro realicemos sistemas más rápidamente y con menos errores. Solo me queda agradecer a todos ustedes por leerme y no olviden en comentar ante cualquier inquietud.
Fantástico artículo.
Mil gracias!!!