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_fopen
y allow_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.