informaticaPC

Tutorial de PHP

Configurar PHP

El archivo de configuración de PHP

PHP posee un archivo de configuración cuyo nombre es php.ini y que podrás encontrar en el directorio de instalación de PHP, o bien en la carpeta de tu sistema operativo Windows.

Si usas una distribución basada en Linux su ubicación varía dependiendo de la que uses. Una forma de localizarlo es usando el siguiente comando:

find / -name "*php.ini*"

Para evitar posibles confusiones y quebraderos de cabeza a causa de editar un archivo php.ini que no es el que está siendo realmente usado, lo mejor es crear un archivo llamado por ejemplo info.php (por ejemplo) con el siguiente código PHP:

<?php
    phpinfo();
?>

Tras copiarlo a la carpeta htdocs del servidor web Apache y ejecutarlo introduciendo la URL http://127.0.0.1/info.php navegador web, deberías ver algo como:

PHP Información

En Loaded Configuration File podrás ver la ruta en la que se encuentra el archivo de configuración que está siendo actualmente usado.

Sin embargo, existe una forma de configurar la ruta del archivo php.ini que deseemos usar, añadiendo al final del archivo de configuración del servidor web Apache (llamado httpd.conf y que se encuentra en la subcarpeta conf dentro del directorio de instalación del mismo) la siguiente línea, reiniciándolo posteriormente:

PHPIniDir "c:/php5"

NOTA: también podemos indicar la ruta usando doble barra inversa \\.

Añade también a las variables de entorno de tu sistema operativo el directorio en el que tengas instalado PHP, y también el subdirectorio ext (en el que se encuentran las extensiones).

En los siguientes apartados te mostraremos algunas opciones de configuración útiles.

Información

Recuerda que tras hacer algún cambio en el archivo de configuración de PHP deberás reiniciar el servidor web Apache, para que surtan efecto los cambios.

Modificar configuración en tiempo de ejecución

Con la función ini_set() podremos modificar los valores de las opciones de configuración de PHP definidas en el archivo php.ini, aunque los cambios no serán permanentes sino que afectarán sólo al script o página .php en que se encuentre:

También disponemos de ini_get() para obtener el valor de una opción de configuración.

<?php
    echo ini_get("include_path");
    ini_set("smtp_port", 25);
?>

Descargar ejemplo

Más información

Vea también: [ ini_set() ] - [ ini_get() ] - [ setlocale() ] - [ extension_loaded() ]

Comprobar extensiones cargadas

Con la función extension_loaded() podemos comprobar en tiempo de ejecución si una determinada extensión de PHP ha sido cargada, y con get_loaded_extensions() obtendremos un array asociativo con los nombres de todas las que han sido cargadas.

<?php
    print_r( get_loaded_extensions() );

    if( extension_loaded("mysql") == true )
        echo "<p>La extensión 'mysql' ha sido cargada</p>";
    else
        echo "<p>La extensión 'mysql' NO ha sido cargada</p>";
?>

Descargar ejemplo

Extensiones en PHP

Cargar un archivo de configuración personalizado

En ocasiones puede resultarnos útil crear un archivo de configuración personalizado con el mismo formato que el archivo de configuración de PHP php.ini, y obtener los valores con la función parse_ini_file(). A continuación te mostramos un ejemplo.

mi_archivo_ini.ini:

    mi_opcion_1 = "valor de la opcion 1"
    mi_opcion_2 = 2;
    mi_opcion_3 = "valor de la opcion 2"

02_parse_ini_file.php:

<?php
    $arrayConfig = parse_ini_file("mi_archivo_ini.ini");
    print_r( $arrayConfig );
?>

Descargar ejemplo

Archivo de configuración personalizado

También disponemos de la función parse_ini_string(), con la que podremos analizar una cadena de configuración.

Más información

Vea también: [ parse_ini_file() ] - [ parse_ini_string() ]

Mostrar y ocultar mensajes de error

Cuando estamos desarrollando una página o aplicación web es recomendable configurar PHP para que muestre los mensajes de aviso o error, mientras que al pasar el proyecto a producción deberemos desactivarlos.

Para mostrar u ocultar los mensajes debemos tener descomentada la opción de configuración display_errors() en el archivo php.ini, asignándole los valores 'On' (para mostrarlos) u 'Off' (para ocultarlos):

Configurar mensajes de error

Otra opción de la que disponemos es usar la función de PHP ini_set() para modificar temporalmente el valor de la opción de configuración (durante el script PHP actual) sin tener que modificar el archivo de configuración:

Otra opción de configuración que podemos usar en el archivo php.ini es error_reporting, con la que podremos definir qué tipos de mensajes deberían ser mostrados. Puede tomar como valor alguna de las constantes predefinidas que se indican en el enlace facilitado al final de la presenta sección (su descripción también se encuentra en el archivo php.ini).

Configurar mensajes de error

También podemos configurar esta opción en tiempo de ejecución usando la función de PHP error_reporting().

<?php
    error_reporting(E_ALL | E_STRICT);
    ini_set('display_errors', "On");
    ...
?>
Información

Recuerda que tras hacer las modificaciones en el archivo php.ini deberás reiniciar el servidor web Apache.

Configuración regional

Para configurar la zona horaria del servidor web, en el archivo php.ini disponemos de la opción de configuración date.timezone, que podrá tener como valor uno de los timezones soportados especificados en el enlace al final de la presente sección.

También podemos usar la función de PHP setlocale(), en la que especificaremos como primer parámetro la salida de determinadas categorías de funciones en tiempo de ejecución, pudiendo éstas ser:

  • LC_COLLATE: para la comparación de cadenas de texto, ver strcoll().
  • LC_CTYPE: para la clasificación y conversión de caracteres, por ejemplo con strtoupper().
  • LC_MONETARY: para localeconv().
  • LC_NUMERIC: configura el carácter utilizado como separador decimal (ver también localeconv()).
  • LC_TIME: configura el formato de fecha y hora con strftime().
  • LC_MESSAGES: para los mensajes devueltos por el sistema (disponible si PHP fue compilado con libintl).
  • LC_ALL: para configurar todas las anteriores.

Si el segundo parámetro es cero se devuelve la configuración actual.

<?php
    $var1 = 50.80;

    echo "'LC_NUMERIC' actual: ".setlocale(LC_NUMERIC, 0)."<br />";
    echo "Importe: [".$var1."]<p />";

    setlocale(LC_NUMERIC, 'Spanish_Spain.28605');

    echo "Ahora 'LC_NUMERIC' es: ".setlocale(LC_NUMERIC, 0)."<br />";
    echo "Importe: [".$var1."]<p />";

    echo "'LC_TIME' actual: ".setlocale(LC_TIME, 0)."<br />";
    echo "Fecha: [".strftime("%A, %d de %B del %Y")."]<p />";

    setlocale(LC_TIME, 'spanish');

    echo "Ahora el 'LC_TIME' es: ".setlocale(LC_TIME, 0)."<br />";
    echo "Fecha: [".strftime("%A, %d de %B del %Y")."]<p />";
?>

Descargar ejemplo

Configuración regional

Asimismo, con date_default_timezone_set() y date_default_timezone_get() es posible establecer y obtener la zona horaria usada por todas las funciones de fecha/hora en un determinado script de PHP:

<?php
    echo "'date_default_timezone_set()' devuelve: ".date_default_timezone_get()."<br />";
    echo "'LC_TIME' devuelve: ".setlocale(LC_TIME, 0)."<p />";

    date_default_timezone_set('Europe/Madrid');

    echo "Ahora 'date_default_timezone_set()' es: ".date_default_timezone_get()."<br />";
    echo "Fecha (Zona horaria UTC+1): ".strftime("%A, %d de %B del %Y - %H:%M:%S")."<p />";

    date_default_timezone_set('Europe/London');

    echo "Ahora 'date_default_timezone_set()' es: ".date_default_timezone_get()."<br />";
    echo "Fecha (Zona horaria UTC+0): ".strftime("%A, %d de %B del %Y - %H:%M:%S")."<p />";

    setlocale(LC_TIME, 'spanish');
    echo "<p>Cambiado 'LC_TIME' a 'spanish'</p>";

    date_default_timezone_set('Europe/Madrid');

    echo "Ahora 'date_default_timezone_set()' es: ".date_default_timezone_get()."<br />";
    echo "Fecha (Zona horaria UTC+1): ".strftime("%A, %d de %B del %Y - %H:%M:%S")."<p />";

    date_default_timezone_set('Europe/London');

    echo "Ahora 'date_default_timezone_set()' es: ".date_default_timezone_get()."<br />";
    echo "Fecha (Zona horaria UTC+0): ".strftime("%A, %d de %B del %Y - %H:%M:%S");
?>

Descargar ejemplo

Configuración regional

Más información

Vea también: [ setlocale() ] - [ strcoll() ] - [ strcoll() ] - [ strtoupper() ] - [ localeconv() ] - [ strftime() ]

Más información

Vea también: [ Obtener fecha y hora en PHP ]

Configurar sesiones en PHP

Las sesiones en PHP pueden configurarse para ser propagadas de dos modos: utilizando Cookies o bien a través de la URL, siendo más seguro el primero de ellos (aunque el inconveniente de usar Cookies es que el usuario las tenga desactivadas en su navegador web).

* Para que una sesión sea propagada a través de la URL editaremos el archivo de configuración php.ini del siguiente modo (recuerda que estos valores pueden ser también configurados en tiempo de ejecución, tal y como hemos visto anteriormente):

session.use_cookies = 0     // Desactiva el uso de Cookies de sesión
session.use_trans_sid = 1   // Activa la propagación por URL

Cuando usamos este método, al navegar entre las páginas del sitio web veremos algo parecido a lo siguiente en la barra de direcciones del navegador web, donde PHPSESSID es el identificador de la sesión:

http://www.tudominio.com/sesion2.php?PHPSESSID=f8k2ql3hhcbj83aq4jktfmkus6

Deberemos pasar manualmente dicho identificador a todas las páginas que vayan a ser cargadas en el navegador web, resultando útil usar la constante SID:

echo "<a href='http://www.tudominio.com/tupagina2.php?".SID."'>Ir a tupagina2.php</a>";

IMPORTANTE: si usamos este método, la sesión se perderá en caso de cargar un archivo de página web que no contenga session_start() al principio.

* Para que la sesión sea propagada utilizando Cookies definiríamos las opciones de configuración del siguiente modo:

session.use_cookies = 1     // Activa el uso de Cookies de sesión
session.use_trans_sid = 0   // Desactiva la propagación por URL

Otras opciones de configuración útiles para el manejo de sesiones:

  • session.auto_start: Si su valor es 1 especifica que la sesión se propagará automáticamente, sin tener que poner session_start() al principio de cada página. Su valor por defecto es cero (deshabilitado). Ejemplo:

    session.auto_start = 0

  • session.use_only_cookies: Si su valor es 1 se usarán sólamente Cookies para propagar el identificador de la sesión, como medida de seguridad. Desde la versión PHP 5.3.0 su valor por defecto es 1 (habilitado). Ejemplo:

    session.use_only_cookies = 1

  • session.gc_maxlifetime: especifica la duración de la sesión (en segundos). Ejemplo:

    session.gc_maxlifetime = 1440

  • session.cookie_lifetime: especifica el tiempo de vida en segundos de la Cookie de sesión enviada al navegador web. Si es cero durará hasta que el navegador se cierre (es el valor por defecto):

    session.cookie_lifetime = 0

  • session.save_path: indica la ruta en la que se guardarán los archivos temporales de la sesión. Ejemplo (observa la doble barra inversa, como configuración para Windows:

    session.save_path = "c:\\Temp\\Sesiones"

  • session.cookie_path: indica la ruta en la que se guardarán las cookies de sesión. Ejemplo (observa la doble barra inversa, como configuración para Windows):

    session.cookie_path = "c:\\Temp\\Cookies"

Información

Recuerda que tras hacer las modificaciones en el archivo de configuración deberás reiniciar el servidor web Apache.

Configurar PHP para subir archivos (upload)

En el archivo de configuración de PHP php.ini, dentro de la sección File uploads disponemos de varias opciones de configuración que afectan a la subida de archivos al servidor web.

  • file_uploads: permitir o denegar la posibilidad de hacer upload de archivos.
  • upload_tmp_dir: especifica el directorio temporal para la subida de archivos.
  • upload_max_filesize: tamaño máximo de los archivos que se pueden subir.
  • max_file_uploads: número máximo de archivos que se pueden subir a la vez.
Más información

Vea también: [ Subir archivos al servidor web ]

Configurar envío de E-Mail en PHP

Si al intentar enviar un EMail desde PHP obtienes el siguiente mensaje, necesitarás modificar su archivo de configuración:

sendmail_from" not set in php.ini or custom "From:" header missing in...

Para solucionarlo, abre el archivo de configuración de PHP php.ini y localiza las siguientes líneas:

Configurar Email en PHP

Asegúrate de que queden descomentadas las líneas SMTP, smtp_port y sendmail_from (quitando el punto y coma) y con los valores mostrados en la imagen anterior, guarda los cambios en el archivo y después reinicia el servidor web.

Si no tienes acceso a dicho archivo de configuración o no deseas realizar cambios en él, puedes usar la función de PHP ini_set() para realizar dicha configuración en tiempo de ejecución del siguiente modo (los cambios se aplicarán sólo hasta finalizar el script en PHP):

<?php
    ini_set("SMTP", "localhost");
    ini_set("smtp_port", 25);
    ini_set("sendmail_from", "postmaster@localhost.com");

    ...
?>

Si al volverlo a intentar aparece el siguiente mensaje, será porque no tienes instalado un servidor de correo electrónico, o no se encuentra bien configurado:

Failed to connect to mailserver at "localhost" port 25, verify your "SMTP" and "smtp_port" setting in php.ini or use ini_set() in...

Si lo que deseas es enviar un Email desde tu ordenador y usas XAMPP en Windows, consulta el enlace al final de este apartado para aprender a configurar el servidor de correo Mercury Mail que trae incorporado.

Normalmente los servicios de alojamiento web ya disponen de un servidor de correo instalado y configurado, con lo que si tras realizar los cambios explicados anteriormente subes los archivos a tu cuenta de hosting y cargas la página web desde allí, deberías poder enviar correos electrónicos sin mayor problema.

Información

Si ves que el envío se realizó correctamente pero transcurridos unos minutos no te ha llegado el correo electrónico, comprueba si está en tu carpeta de Correo no deseado o SPAM. Si tampoco lo ves allí comprueba la configuración de tu cortafuegos o firewall

Información

Recuerda que tras hacer las modificaciones en el archivo php.ini deberás reiniciar el servidor web Apache.

Acceso a bases de datos desde PHP

En primer lugar, si no lo has hecho ya, agrega a la variable de entorno PATH de tu sistema operativo el directorio en el que tengas instalado PHP, y también el subdirectorio ext (en el que se encuentran las extensiones). Para ello, dependiendo del sistema operativo Windows usado iremos a:

  • Windows 7: Inicio, Panel de Control, Sistema y seguridad, Sistema, Configuración avanzada del sistema, y en el cuadro de diálogo que se mostrará haremos clic en el botón Variables de entorno.
  • Windows Vista: Inicio, Panel de Control, Sistema y Mantenimiento, Sistema, Configuración avanzada del sistema, y en el cuadro de diálogo que se mostrará haremos clic en el botón Variables de entorno.
  • Windows XP: Inicio, Panel de Control, Sistema y en el cuadro de diálogo que aparecerá seleccionaremos la pestaña Opciones avanzadas y después haremos clic en el botón Variables de entorno.

Aparecerá la siguiente ventana, en la que editaremos y crearemos las variables de sistema mencionadas:

Directorio de extensiones

En el directorio de instalación de PHP localiza el archivo php.ini y busca en él la opcion de configuracion extension_dir: indica en ella la ruta al directorio ext que se encuentra dentro de la carpeta de instalacion de PHP, por ejemplo:

Directorio de extensiones

A continuación sigue los pasos indicados para el sistema gestor de bases de datos (SGBD) deseado:

  • MySQL:

    En el archivo php.ini descomenta la siguiente línea (quitando el punto y coma):

    Configurar PHP MySQL

    Si estás intentando acceder desde un ordenador diferente al que tiene instalado el servidor de bases de datos MySQL y recibes el mensaje:

    Warning: mysql_connect() [function.mysql-connect]: Host 'TU-HOST' is not allowed to connect to this MySQL server in...

    ... debes crear un usuario indicando la direccion IP desde la cual podrá acceder (también se le podría dar acceso desde cualquier IP), y asignarle los permisos deseados del siguiente modo (para ello deberás acceder como usuario root):

    Configurar acceso remoto en MySQL

  • PostgreSQL:

    En el archivo php.ini descomenta la siguiente línea:

    Configurar PostgreSQL en PHP

    Si al intentar conectar te continúa apareciendo el siguiente mensaje...

    Fatal error: Call to undefined function pg_connect() in...

    ... añade la siguiente línea al archivo de configuración httpd.conf del servidor web Apache (cambia la ruta por aquella en que se encuentre el archivo libpq.dll en tu ordenador):

    Configurar PostgreSQL en PHP

    Si estás intentando conectar desde un ordenador diferente al que tiene instalado al servidor de bases de datos PostgreSQL y te aparece el mensaje...

    Unable to connect to PostgreSQL server: could not connect to server: Connection refused

    ... edita el archivo de configuración de PostgreSQL pg_hba.conf añadiendo la dirección IP desde la que deseas acceder, por ejemplo (cambia la dirección IP que se muestra por la de tu ordenador):

    Configurar PostgreSQL en PHP

    Deberás editar otro archivo de configuración de PostgreSQL llamado postgresql.conf, añadiendo la siguiente línea:

    Configurar PostgreSQL en PHP

  • Oracle:

    En el archivo php.ini descomenta sólo la línea correspondiente a la versión de Oracle que utilices (las últimas versiones de PHP incluyen soporte para Oracle 11g):

    Configurar Oracle en PHP

    Si vas a acceder a Oracle de forma remota (no lo tienes instalado en el ordenador desde el que vas a acceder a dicha base de datos) descarga e instala Instant Client desde este enlace:

    Configurar Oracle en PHP

    Marca la opcion Accept License Agreement y selecciona Instant Client Package - Basic: antes de comenzar con la descarga deberás introducir los datos de acceso de tu cuenta de Oracle, o crear una si no tienes.

    Configurar Oracle en PHP

    Una vez descargado Instant Client, descomprímelo en un directorio y luego añádelo a la variable de entorno PATH de tu sistema operativo. Después reinicia el servidor web Apache.

    En este punto, tras haber realizado los pasos anteriores deberíamos poder realizar la conexión con Oracle.

    Aún nos resta un paso más: para configurar el juego de caracteres de modo que aparezcan las letras con tilde así como las 'ñ' y otros caracteres especiales como el símbolo del euro, en el mismo cuadro de diálogo crea una variable de entorno llamada NLS-LANG y asígnale el valor SPANISH_SPAIN.WE8MSWIN1252 (consulta el enlace al final de este apartado para ver otros valores admitidos).

    Si sólo tenemos instalado Instant Client no es necesario definir las variables de entorno ORACLE_HOME ni ORACLE_SID.

    Instant Client 11g funciona con Oracle 9.2, Oracle 10.x y Oracle 11.x.

Si continúas teniendo problemas después de seguir los pasos indicados anteriormente, comprueba también la configuración de tu cortafuegos o firewall.

Información

Recuerda que tras hacer las modificaciones en el archivo de configuración de PHP deberás reiniciar el servidor web Apache.

Definir ruta para localizar archivos

Con la opción de configuración include_path podremos definir los directorios en los que se buscarán los archivos a los que se intente acceder, de no hallarse en el directorio actual y si no se ha especificado la ruta absoluta o relativa en la que se encuentran.

Si deseamos configurarla en tiempo de ejecución usaremos las funciones de PHP set_include_path() y get_include_path().

A continuación te mostramos un ejemplo en el que configuramos dicha opción en tiempo de ejecución:

<?php
    // Mostramos la ruta en la que se buscarán los archivos:
    echo "->".get_include_path()."<br />";

    // Redefinimos la ruta:
    ini_set("include_path", get_include_path().";./includes/");

    // Mostramos la ruta actual:
    echo "->".get_include_path()."<br />";

    // Incluimos el archivo, sin indicar que se encuentra en el subdirectorio
    include("include.php");

    echo "Estamos en '01_ruta_include.php'";
?>

Descargar ejemplo

Más información

Vea también: [ set_include_path() ] - [ get_include_path() ]

Primera página Anterior
Usamos cookies para ofrecerte una experiencia mejorada, el continuar navegando supone que aceptas su uso