Poner modo producción en CodeIgniter 3

Publicado por parzibyte en

Cambiar modo desde index

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.

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í:

Vista previa del archivo index.php

Vista previa del archivo index.php

¿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í:

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í:

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:

Error en modo desarrollo

Error en modo desarrollo

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:

Error en modo producción

Error en 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:

  1. Documentación de CodeIgniter
  2. Documentación de SetEnv

parzibyte

He trabajado por más de 4 años en el desarrollo de software con experiencia en Java, PHP, JavaScript, HTML, Node.JS, Python, Android y Go. También he trabajado con bases de datos SQL como MySQL y SQLite, así como con bases de datos NoSQL usando MongoDB.Soy bueno utilizando algunos frameworks y herramientas como Firebase, jQuery, AngularJS, VueJS, CodeIgniter, Laravel, BulmaCSS, Bootstrap y Electron.Otros términos que conozco son: Arduino, GraphQL, API's, REST, AJAX, PouchDB, CouchDB, Experiencia de usuario, buenas prácticas de programación, Webpack, NPM, Administración de servidores y programación de scriptsLa plataforma en la que tengo más experiencia es la web, pero en mis ratos libres realizo unos pequeños ejercicios en C# y C.Estoy aquí para ayudarte a resolver tus problemas de programación y depuración :-)

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

This site uses Akismet to reduce spam. Learn how your comment data is processed.

A %d blogueros les gusta esto: