PHP-TUT-24 Configuración de PHP. Directivas y extensiones.

Facebooktwittergoogle_pluslinkedinmailFacebooktwittergoogle_pluslinkedinmail

En este artículo vamos a tratar de exponer aquello que podemos necesitar saber sobre la configuración del intérprete de PHP.  El comportamiento, o las posibilidades del intérprete vienen determinadas por las extensiones que tiene disponibles y las directivas de inicio.

LAS EXTENSIONES

Las extensiones son unos archivos que implementan funcionalidades concretas para ampliar o extender (de ahí el nombre) la capacidad original de PHP. Tienes un ejemplo muy claro de lo que es una extensión en los artículos relativos a imágenes en PHP (aquí, aquí y aquí), dónde se habla de la librería GD2, que es una extensión del lenguaje. Sin esta librería, PHP no podría manejar imágenes.

Si has instalado Xampp en Windows las extensiones que tienes a tu disposición están en archivos de tipo .dll, en la ruta C:/xampp/php/ext/ (si aceptaste la ruta por defecto durante la instalación).

Sin embargo, eso no es todo lo que necesitas para usar las extensiones. En la ruta C:/xampp/php/ existe un archivo llamado php.ini. En este archivo tienen que estar referenciadas las extensiones que quieras usar. Así pues, para disponer de una extensión de PHP, necesitas dos cosas:

  • Tener el archivo de la extensión en su directorio
  • Tener la extensión activada en php.ini

Veamos cómo hacer esto último. Para ello vamos a tomar cómo ejemplo la extensión de la librería GD2, que ya nos es familiar.

Vemos que en la ruta de las extensiones hay un archivo llamado php_gd2. Si estás en Windows y tienes visibles las extensiones de nombres de archivos, lo estarás viendo cómo php_gd2.dll. Abre tu archivo php.ini con cualquier editor de texto plano (por ejemplo, Notepad ++), y busca la siguiente línea:

extension=php_gd2.dll

Si no existe, añadela. Si está precedida por un ; quitaselo, porque PHP entiende entonces que esta línea es un comentario y no una instrucción operativa. La línea te titene que quedar, exactamente, cómo hemos puesto aquí.

Con esto ya está referenciada la extensión en PHP, y ya puede usarse. Si has tenido que añadir la línea, reinicia el servidor Apache para que PHP coja la nueva configuración.

Esto mismo es válido para cualquier extensión del lenguaje. Aquí no vamos a detallarlas todas, porque son una gran cantidad las que existen, con diversas finalidades, y múltiples opciones y comandos. Si necesitan detalles operativos de alguna en concreto, te sugiero que consultes la documentación oficial de PHP.

LAS DIRECTIVAS

Las directivas son formas mucho más simples de configurar algunos aspectos del comportamiento de PHP. Sólo tenemos que buscarlas y/o editarlas en php.ini y, con esto, me refiero a que no hay archivos externos, como en el caso de las extensiones.

Para empezar a aclarar las cosas, una directiva es, por ejemplo, lo que marca el límite de peso de los archivos que pueden ser subidos, desde un formulario, a un script PHP. En concreto, esta directiva se llama upload_max_filesize y su valor inicial es 2M, lo que quiere decir dos megas. Búscala en tu archivo php.ini y la verás.

A partir de ahí, es fácil comprender que cambiando los valores de determinadas directivas podemos conseguir un mayor aprovechamiento de recursos, o un mejor comportamiento en determinados casos. Por ejemplo. Algunas veces nos encontramos con scripts que consumen mucha memoria, bien sea porque estén mal diseñados o porque, por su propia naturaleza, necesiten más memoria de la que tenemos establecida cómo límite. Buscaremos la directiva memory_limit y ampliaremos el límite de memoria al que puede acceder PHP durante su trabajo. Por supuesto, la memoria que le indiquemos debe existir físicamente. De nada sirve establecer el límite en 2G, por ejemplo, si nuestro equipo sólo cuenta con 500M. Es más. Puede ser hasta contraproducente, ya que PHP intentará usar más memoria de la que dispone, privando, incluso, a otras aplicaciones de ella, pudiendo desencadenar conflictos o colapsar el sistema (sólo lo he visto una vez, pero no tiene gracia).

Las directivas más relevantes para el uso diario aparecen referenciadas en la siguiente tabla:

default_charsetUTF-8El juego de cartacteres por defecto.

DIRECTIVA VALOR USO
allow_url_fopen On Permitir que se abran ficheros en otros servidores.
allow_url_include Off Permitir la inclusión de scripts en servidores externos.
default_mimetype text/html El tipo MIME de los scripts.
disable_classes no value Clases que deben ser deshabilitadas.
disable_functions no value Funciones que deben ser desshabilitadas.
display_errors On Mostrar los errores durante la ejecución.
extension_dir C:\xampp\php\ext El directorio dónde están las extensiones.
file_uploads On Permitir la subida de ficheros.
max_execution_time 30 Tiempo máximo, en segundos, que puede consumir un script para su ejecución. Si lo supera, se aborta.
max_file_uploads 20 Máximo de ficheros que permite subir un mismo script en una ejecución.
memory_limit 128M Límite de memoria que puede usar un script PHP.
post_max_size 8M Límite de tamaño de datos que se pueden enviar por POST.
session.use_trans_sid 1 Si el id de sessión pasa automáticamente de una página a otra.
upload_max_filesize 2M Tamaño máximo de un fichero para subir.

Estas directivas pueden ser cambiadas manualmente en el archivo php.ini. Algunas de ellas pueden ser cambiadas dinámicamente en tiempo de ejecución, mediante la instrucción ini_set(). Imagina que tu límite de memoria de 128 Mb es más que suficiente para todos los scripts de tu sitio, excepto para uno, que necesita, digamos, 256 Mb. Lo que harías sería incluir, cómo primera línea de ese script “conflictivo”, lo siguiente:

ini_set("memory_limit", "256M");

Eso hará que cuando se ejecute el script el intérprerte de PHP pueda usar hasta 256 Mb de memoria y, al terminar y pasar a otro, seguirá estando activo el límite original de 128 Mb.

No todas las directivas pueden cambiarse en tiempo de ejecución. Por ejemplo allow_url_fopenallow_url_include no lo admiten, por razones de seguridad.

Si tienes alguna duda sobre cómo modificar una directiva en concreto, o quieres conocer la lista completa de directivas de PHP, te remito a la documentación oficial, ya que aquí, por razones de espacio y paracticidad, no podemos detallarlas todas.

     

Deja un comentario

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