Soporte para PHP en Apache

PHP (PHP Hypertext Pre-processor, php.net, paquete php5) es un lenguaje de programación usado frecuentemente en la creación de sitios web. Es un lenguaje embebido en el HTML, interpretado, que se ejecuta en el lado del servidor, que permite crear páginas dinámicas, usar cookies, sesiones, acceder a bases de datos, etc. Hay que destacar que el código PHP no lo podrá ver el usuario aunque intente descargar el .php, ya que el servidor envía sólo código HTML.

Equivalencias en Windows: ASP.

Para configurar PHP editaremos el archivo /etc/php5/apache2/php.ini. Veamos algunas de las principales directivas:

  • la directiva register_globals controla la creación de variables globales. Debe estar Off, ya que en nuestros scripts no debemos usar variables globales (en PHP6 desaparece esta directiva y register_globals queda establecida a Off, por lo que si en nuestros scripts usamos variables globales tendremos que reescribirlos):
    register_globals = Off

    En PHP una variable var puede venir de diferentes fuentes: GET (si forma parte de la URL), POST (formulario con method=post)… Si tenemos register_globals = On en todos los casos se creará una variable global $var sin controlar de dónde y hacia dónde va cada variable, suponiendo esto un grave riesgo de seguridad.

    Poniendo register_globals = Off evitaremos que PHP cree automáticamente variables globales $var y accederemos a las variables mediante arrays superglobales ($_GET['var'], $_POST['var']…), según el método de envío. De esta manera conseguimos dos cosas:

    • aislamos las variables internas de los scripts de las externas.
    • filtramos las variables externas según el método de envío.

    Así impedimos que una variable GET pasada en la URL suplante a una de nuestras variables internas o a una de nuestras variables POST.

  • la directiva doc_root indica el directorio de nuestra web:
    doc_root = /var/www
  • para poder incluir ficheros con include ubicados en directorios distintos del especificado en doc_root, pondremos:
    allow_url_fopen = On

    Los directorios donde PHP buscará los ficheros a incluir se especifican en la directiva include_path (separados por ":"):

    include_path = ".:/var/www:/var/www/php"
  • para trabajar con sesiones descomentaremos la línea:
    session.save_path = /var/lib/php5
  • en servidores en producción desactivaremos los mensajes de error en el browser:
    display_errors = Off

    y los mandaremos a syslog:

    log_errors = On
    error_log = syslog

Guardamos los cambios en /etc/php5/apache2/php.ini e informamos a Apache de que tenemos PHP:

  • comprobaremos que existe el archivo /etc/apache2/mods-enabled/php5.conf, cuyo contenido es:

    <IfModule mod_php5.c>
      AddType application/x-httpd-php .php .phtml .php3
      AddType application/x-httpd-php-source .phps
    </IfModule>

    La primera línea le dice a Apache que los archivos con extensión .php debe interpretarlos como PHP.

    La segunda línea sirve para que al abrir una página .phps Apache muestre el código PHP resaltando la sintaxis en color, útil por ejemplo para mostrar el código fuente de una página.

  • comprobaremos que existe el archivo /etc/apache2/mod-enabled/php5.load para que Apache cargue el módulo de PHP, cuyo contenido debe ser:

    LoadModule php5_module /usr/lib/apache2/modules/libphp5.so
  • editamos /etc/apache2/mods-enabled/dir.conf y le decimos a Apache que como página por defecto también sirve index.php:
    DirectoryIndex index.html index.htm index.cgi index.php

Guardamos los cambios y reiniciamos Apache:

# /etc/init.d/apache restart

Ejemplo para comprobar PHP en Apache

Comprobaremos si hemos instalado PHP correctamente poniendo en el directorio de la web (/var/www) la página en PHP más sencilla, Hola mundo. El archivo hello.php contiene lo siguiente:

<?php
echo "<html>n";
echo "<head>n";
echo "<title>Hola mundo</title>n";
echo "</head>n";
echo "<body>n";
echo "<h1>Hola, mundo.</h1>n";
echo "</body>n";
echo "</html>n";
?>

Si todo está correcto, al abrir http://127.0.0.1/hello.php en el navegador veremos lo siguiente:

Hola mundo PHP

Si miramos el código fuente de la página comprobaremos que no se ve el código PHP, sino sólo HTML.

Hola mundo PHP fuente

Otro ejemplo para comprobar PHP en Apache

Veamos otro ejemplo para comprobar si PHP está bien instalado. Para ello crearemos el archivo:

/var/www/info.php

cuyo contenido es:

<?php
phpinfo();
?>

y entraremos en la URL 127.0.0.1/info.php en el navegador. Si todo está correcto aparecerá la página Info de PHP.

Pagina Info de PHP

Artículos en la categoría "Servidores (software)"

  1. Monitorizar servidores con Nagios
  2. Monitorizar routers SNMP con MRTG
  3. Administración de máquinas Linux con Webmin
  4. Shell remoto con Telnet
  5. Servidor DNS Bind
  6. Servidor de IPs dinámicas DHCP
  7. Servidor de hora NTP
  8. Servidor proxy Squid
  9. Servidor de correo electrónico
  10. Servidor de terminales LTSP
  11. Servidor web Apache
  12. Soporte para PHP en Apache
  13. Soporte para CGI en Apache
  14. Analizador de logs de Apache
  15. Servidor de base de datos MySQL
  16. Servidor web Lighttpd
  17. Whois: Quién es el propietario de un dominio
  18. Servidor de archivos FTP
  19. Compartir archivos en Linux: NFS
  20. Compartir archivos en Windows: Samba
  21. Control de versiones: CVS y Subversion
  22. Servidor de streaming por Internet
  23. Servidor de streaming en red local

2 Comments:

  1. Hola muy buenas, lo que pasa es que estoy haciendo un sistema en php que lo que hace es dar altas, bajas y consultas de catalogo de equipos en windows y lo quiero pasar a linux, la pregunta que les quiero hacer es que si no habria problema a la hora ejecutarlo en linux, porfavor respondan, muchas gracias…

  2. victor hernandez

    excelente tutorial, pero lo segui al pie de la linea, y no logro ejecutar los archivos .php en el navegador, tan solo me ofrece la opcion de guardarlos pero no los ejecuta. tengo php5 instalado, los modulos tambien estan en sus directorios pero en /etc/apache2/apache2.conf no aparece ninguna informacion relacionada a php.
    estoy trabajando con ubuntu 8.04