2011-07-21 18 views
9

He estado escribiendo:PHP, Cómo establecer ruta de inclusión

include('a.php') 
include('b.php') 

etc., en mi guión para incluir el uso de funciones a() y b(). Se pone bastante tedioso. ¿Hay alguna manera de establecer una ruta de un directorio y tener múltiples archivos a los que pueda acceder un script?

  1. He intentado esto en mi guión:

    set_include_path('.;C:\xampp\htdocs\myfunctionfolder'); 
    
  2. Y establecer una trayectoria variable ambiental a tener esta edad en allí.

  3. también en php.ini modificados para incluir

    include_path = ".;\xampp\php\PEAR;\xampp\htdocs\myfunctionfolder" 
    

Si tengo muchos archivos en allí, ¿cómo puedo acceder a estos archivos sin tener que incluir cada uno individualmente? Establecer la variable del entorno definitivamente funciona en el símbolo del sistema.

¿Tengo que hacer algo más para que los archivos .php sean accesibles colectivamente bajo un directorio?

Respuesta

11

La práctica común es tener un archivo "common.php" o "includes.php" que incluya las llamadas include/include_once (en aras de la simplicidad). p.ej.

  • raíz
  • [lib]
    • a.php
    • b.php
    • includes.php
  • index.php

Entonces incluye .php contiene:

<?php 
    include_once('a.php'); 
    include_once('b.php'); 
?> 

Luego, en cualquier secuencia de comandos que es una cuestión de incluir el archivo includes.php.

Sin embargo,, para responder a su pregunta original, solo puede incluir un archivo a la vez, por llamada. Puede usar algo como opendir y readdir para iterar sobre todos los archivos en un directorio específico e incluirlos como encontrados (por así decirlo, automatizados) o escribir cada uno, inclúyalo en función de los archivos que está creando.

Además, todas las configuraciones de la ruta include incluyen un directorio para buscar cuando se realiza una llamada include. No es un directorio donde los archivos deberían cargarse automáticamente (que es la impresión que obtengo de su publicación).

+0

Hmph !! todo está claro para mí ahora. Gracias por mostrarme el camino común. Todavía estoy tratando de descubrir qué es "convencional" en PHP. – musicliftsme

+1

Si este es su proyecto personal, "convencional" es lo que sea que funcione para usted. En el momento en que tenga que comenzar a utilizar la (s) función (es) de búsqueda o escribir nombres de archivo con notas, perderá de vista lo "convencional". ;-) –

+0

si incluyo "include.php" que carga un montón de archivos .php (digamos veinte ~ 50 funciones de línea) que puedo o no necesitar, ¿esto impone algún tipo de carga innecesaria al ejecutar el script? que incluyen estos? Me pregunto si debería personalizar mi include.php o simplemente hacer 1 que incluya todas mis funciones. – musicliftsme

2

El analizador de PHP es bastante eficiente: perderá mucho más tiempo cargando una tonelada de archivos individuales en lugar de uno (o algunos) archivos más monolíticos.Sin embargo, si insiste en mantener las cosas segregadas de esa manera, PUEDE crear archivos metaincluidos para cargar conjuntos de archivos individuales, por lo que solo incluiría un único archivo metaincluido y hará el resto por usted:

meta.php:

include('a.php'); 
include('p.php'); 
... 
include('z.php'); 

y a continuación, sólo tiene que hacer:

<?php 

include('meta.php'); 

en las secuencias de comandos y tienes todos los individuales cargados para usted.

+0

Nadie consideró el hecho de que en ciertos casos, incluye DEBE estar cargado en diferentes secciones ... por ejemplo, si incluye el encabezado, la barra lateral y el pie de página de un diseño de página, simplemente no puede incluirlos consecutivamente. – andreszs

2

que tienen una función como esta en la mayoría de mis proyectos:

function appendToIncludePath($path) 
{ 
    ini_set('include_path', ini_get('include_path') . PATH_SEPARATOR . BASE_DIR . $path . DIRECTORY_SEPARATOR); 
} 
5

Ajuste del include_path no incluirá todos los archivos en ese directorio, sólo añade ese directorio a la lista PHP buscará cuando se incluye un archivo .

Especifica una lista de directorios donde las funciones require(), include(), fopen(), file(), readfile() y file_get_contents() buscan archivos.

Source

Esto simplificaría incluyendo los archivos de una estructura profunda o en una parte completamente diferente del sistema de archivos.

include('/var/somewhere/else/foo.php'); 

Con /var/somewhere/else/ añade a la include_path php.ini podría convertirse en

include('foo.php'); 

Además, como otros señalaron, hay prácticas comunes pero se puede mirar en OOPHP y autoloading classes. Esto no funcionará para funciones que yo sepa.

Muchos desarrolladores que escriben aplicaciones orientadas a objetos crean un archivo de origen PHP por definición de clase. Una de las mayores molestias es tener que escribir una larga lista de necesidades al comienzo de cada guión (una para cada clase).

En PHP 5, esto ya no es necesario. Puede definir una función __autoload que se invoque automáticamente en caso de que intente utilizar una clase/interfaz que aún no se haya definido. Al invocar esta función, el motor de scripting tiene la última oportunidad de cargar la clase antes de que PHP falle con un error.

2

ver esta pregunta:

How to include() all PHP files from a directory?

Asimismo, en términos de mejores prácticas, puede incluir múltiples funciones en el mismo archivo si están en absoluto relacionados, y me gustaría también sugieren tener más nombres descriptivos de sus funciones y archivos. Por ejemplo, si sus funciones a() y b() están relacionadas con la validación, por ejemplo, nombre su archivo validation.php y coloque ambas funciones allí e intente cambiarles el nombre a algo que esté relacionado con lo que hacen. Esto le permitirá recordar lo que hacen cuando comienza a acumular una gran lista de funciones;)

Cuestiones relacionadas