php include require

¿Qué es mejor de require(dirname(__ FILE__). ''/''. ''MyParent.php'') que solo requiere(''myParent.php'')?



include (4)

Muchos de los scripts PHP famosos, incluido WordPress, usan dirname(__FILE__).''/myParent.php'' lugar de ''myParent.php'' cuando se incluyen archivos en el mismo directorio que el script actualmente en ejecución.

¿No son lo mismo? ¿Por qué prefieres escribir más?

Gracias.


Además del aumento de rendimiento (que es probablemente una optimización previa en la mayoría de los casos *), también protege del escenario (muy extraño) donde la configuración de PHP del entorno no tiene el directorio actual ( . ) Como parte de la ruta de inclusión.

* El punto de referencia de include un camino que requiere la búsqueda include_path frente a un camino relativo que no lo hace. Probado más de 100000 iteraciones cada uno

Resultados

include("include.php"): 8.3664200305939s include("./include.php"): 8.3511519432068s (8.3664200305939 - 8.3511519432068) / 100000 = 0.000000152680874s

A menos que esté incluyendo cientos o miles de archivos, 0.0000001s es insignificante en el mejor de los casos.

Código de prueba

define("MAX", 100000); ob_start(); $i = MAX; $_t = microtime(true); do { include("include.php"); } while ( --$i ); $_t = microtime(true) - $_t; ob_end_clean(); echo "include(/"include.php/"): {$_t}s/n"; ob_start(); $i = MAX; $_t = microtime(true); do { include("./include.php"); } while ( --$i ); $_t = microtime(true) - $_t; ob_end_clean();

La prueba se realizó en un Macbook 10.5.8 a 2.16GHz con la versión 5.2.9 de PHP (www.entropy.ch, versión 7)


El uso de dirname + file name es ligeramente más rápido, ya que PHP no itera a través de include_path buscando el archivo. Si la velocidad importa, es probable que escriba más.


PHP necesita saber la ruta absoluta al archivo. dirname(__FILE__).''/myParent.php'' ya es la ruta absoluta, pero ''myParent.php'' requiere una búsqueda utilizando las rutas dadas en include_path para obtener una ruta absoluta y encontrar el archivo. Una mejor opción sería ''./myParent.php'' :

Sin embargo, es más eficiente usar explícitamente include ''./file'' que tener PHP siempre verifica el directorio actual para cada inclusión.


Una nota agregada sobre incluir (''./ file.php'').

Si solo importa la velocidad, entonces sí puede usar include (''./ file.php''), pero si desea resolver los problemas de dependencias y rutas relativas, es mejor que use dirname (__ FILE __), porque

include(''./file.php'')

todavía construirá rutas relativas al script de ejecución (el script incluido ), mientras que

include(dirname(__FILE__).''/file.php'');

resolverá las rutas relativas a la secuencia de comandos actual donde reside esta línea (la secuencia de comandos incluida ).

Por lo general, es mejor utilizar dirname (__ FILE __), ya que ''./'' solo proporciona un aumento de rendimiento insignificante, mientras que dirname (__ FILE __) le ofrece mucho más confiable.

/ EDITAR: También tenga en cuenta que el punto de referencia realizado anteriormente solo include(''./something.php'') preocupaciones include(''./something.php'') , que en realidad es más rápido que include(''something.php'') porque no tiene el include_path walking, pero cuando lo usa dirname(__FILE__) obtiene la sobrecarga de la función dirname() , lo que lo hace más lento que caminar por include_path (a menos que tenga muchas rutas en su include_path).