Introducción
Veremos cómo poner el modo producción en CodeIgniter. Este modo deberíamos activarlo siempre que publiquemos nuestro proyecto a internet para tener más seguridad.
Recuerda que también puedes ver cómo habilitar el log de errores en CodeIgniter.
¿Qué es el modo producción y desarrollo?
En el modo producción (llamado production), nuestra app ya está siendo usada. Ya está lista, probada, y asegurada. Los errores, si ocurren, ya no se le muestran al usuario, sino que se escriben en un log la mayoría de veces.
En el modo de desarrollo (conocido como development) los errores se muestran directamente, porque se supone que estamos probando y desarrollando, y eso sirve para no tener que estar viendo el log a cada rato.
Si dejamos el modo desarrollo y ocurre un error, se mostrará al usuario y la mayoría de veces el error incluye información sensible como consultas SQL que hacemos, o cosas de esas.
Por defecto, CodeIgniter pone el modo desarrollo.
Poner modo producción en CodeIgniter
Para cambiar el entorno de nuestra app podemos usar diferentes maneras. Depende de nuestro servidor, pero si no queremos hacerlo a nivel de servidor, lo hacemos a nivel de PHP. Veamos algunas opciones.
Con Apache
Estoy seguro de que la mayoría de usuarios usamos Apache con PHP en un entorno LAMPP. Bueno, si tienes un servidor apache debes crear (o modificar) un archivo llamado .htaccess.
Si ya existe, agregas el código que pongo aquí abajo. Si no, entonces creas uno nuevo y pones el código que dejo abajo igualmente.
SetEnv CI_ENV production
Así de simple. Estamos usando a SetEnv, que es algo como establecer una variable en el entorno del servidor Apache. La variable se llama CI_ENV y la estamos poniendo en production. Recuerda que puedes ponerla en:
- production
- development
- testing
Sólo eso. No es necesario reiniciar el servidor, pero si no funciona la primera vez entonces tendrás que hacerlo.
Con PHP
Si usas Nginx u otros servidores, te recomiendo hacerlo a nivel de PHP modificando el archivo index.php. Incluso si usas Apache y no quieres modificar el archivo que menciono, puedes modificar a index.php.
Abrimos el archivo, omitimos los comentarios y veremos algo así:
¿Veas la línea que comienza con define
? Esa línea vamos a cambiarla.
Si quieres poner tu app en modo desarrollo, deja todo como está. Ya que si no encuentra la variable del servidor pondrá el modo desarrollo.
En caso de que desees poner el modo de producción, cambia la línea de manera que quede así:
<?php
#...
define('ENVIRONMENT', isset($_SERVER['CI_ENV']) ? $_SERVER['CI_ENV'] : 'production');
Lo único que hicimos fue cambiar a development por production. De hecho podría quedar más corto, aunque no lo recomiendo; pero si sabes lo que haces puede quedar así:
define('ENVIRONMENT', 'production');
En ese caso no tomamos en cuenta la variable del servidor, lo establecemos a mano.
Ejemplo de entornos de producción
Ahora veamos un ejemplo. Tengo una tabla llamada productos, pero en mi consulta la escribiré mal y le pondré productoss (con doble s). Si estoy en modo desarrollo, se muestra esto:
Eso es muy útil, pues como programador veo qué cosa está fallando. Veo la consulta que se está haciendo y mucha información que un atacante podría usar (pensando en apps de la vida real).
Si ahora pongo el modo producción:
Se manda el código HTTP 500, y sólo eso. Sí, se da a conocer que hubo un error pero no te dice cuál. Si habilitamos el log, el error quedará registrado en el mismo.
Mi recomendación
Si tienes apache y tu proveedor de hosting (o si es un VPS) te lo permite, cambia directamente usando .htaccess; así puedes tener un archivo en diferentes lugares, sin modificar el código.
En caso de que sea estrictamente necesario, cambia el archivo php.
Conclusión
Es importante saber cómo funciona un framework antes de programar en él, por eso es que recomiendo primero comenzar con PHP simple. En fin, espero que haya servido.
Aquí dejo algunas referencias: