Introducción
Manual de PHP para documentar cosas difíciles de encontrar o mal documentadas en documentación original (valga la doble redundancia), dar soluciones a problemas comunes y establecer convenciones para uso propio. También agregar cosas que valga la pena leer como ser información de librerías que vienen con la plataforma, librerías externas, comandos interesantes del lenguaje, etc.
Inclusión de archivos
Para incluir (importar) archivos se utilizan las directivas include y require con la siguiente sintaxis:
include "path/to/File.php"
include importa archivos si es posible y muestra un warning en caso contrario pero permite continuar la ejecución de la página o script. Por otro lado, require se utiliza para para importar archivos siendo obligatoria su existencia (si un archivo no existe, se produce una excepción y el programa revienta en un despliegue de pirotecnia).
Es posible utilizar también las directivas include_once y require_once para incluir archivos. La diferencia es que estas últimas directivas hace el include una única vez para evitar conflictos. Ver documentación detalles. Para seguir la filosofía "crash early" de The Pragmatic Programmer utilizaremos, siempre que sea posible, la directiva require_once.
Problemas con los paths
Las URLs de los archivos a incluir pueden ser absolutas o relativas. Las URLs relativas acarrean muchos problemas: si se mueve un archivo es necesario hacer el refactor de todas sus dependencias (cosa que eclipse no soporta), por lo tanto, y como convención, utilizaremos siempre paths absolutos. Para referenciar un archivo de forma absoluta se utiliza un path con una forma similar a "hijoDelRoot/archivo.php", "archivoHijoDelRoot.php" o "hijoDelRoot/nietoDelRoot/archivo.php"; pero el uso de direcciones absolutas no es tan sencillo. Cuando se está sobre un archivo que está a más de un nivel por debajo del root, al usar direcciones del tipo "hijo/archivo.php", php buscará al hijo dentro del directorio actual para luego buscar en el include_path y fallar si finalmemte no se encuentra. El comportamiento deseado es que siempre se tome la ruta como absoluta (desde el root) por lo que se deberá agragr a la entrada include_path del php.ini la ruta al proyecto (utilizando como separador el caractér ";").
Importante: nótese que primero se busca en los directorios debajo del actual, por lo que en el siguiente sistema de archivos
root +---> hijo1 +---> archivo.php
|
+---> archivo.phpuna referencia a "archivo.php" estando parado en "hijo1" apuntaría al "archivo.php" que se encuentra dentro de "hijo1" (quedando "root/archivo.php" inaccesible desde "hijo1") y pudiendo generar conflictos muy impredecibles. Serán estos casos entonces inválidos. Como convención renombraremos el archivo de más adentro en el árbol.
Incluyendo librerías
Si se quisiera incluir una librería como la de Zend, se debe seguir el siguiente procedimiento:
- Incluir la librería en el archivo php.ini.
- Bucar la entrada include_path y agregar el path a la librería utilizando el caracter ";" como separador y reiniciar el servidor (desde los servicios de Windows). Para saber más acerca del archivo php.ini, hacer click acá. //TODO: agregar link.
- En caso de usar eclipse, incluír una "linked folder" en apuntando a la carpeta de la librería (para que funcione el code assist):
- Desde el Package Explorer, New -> Folder.
- Click en Advanced>> y luego en "Link to folder in the file system".
- Elegir el archivo.
El archivo php.ini
El archivo php.ini es un archivo de configuración. Muchas veces, se puede confundir cuál archivo php.ini se está utilizando. Entonces, antes de hacer cualquier tipo de modificación al archivo conviene correr el siguiente script
echo phpInfo();
que muestra todo tipo de información sobre la instancia de php que se está ejecutando, entra la que siempre se encuentra la ruta al archivo php.ini. El archivo se carga al iniciar el servidor por lo que todo cambio implica un reinicio al servidor. En caso de utilizar ZendServer como serivicio se debe ir a Inicio -> Panel de control -> Herramientas administrativas -> Servicios y detener el servicio nombrado Apache2.2-Zend para luego volver a iniciarlo.