2009-12-24 13 views
7

¿Es esta la manera correcta de define incluir una ruta para both * nix y Windows?Forma correcta de establecer PHP incluye la ruta para * Nix y Windows

define('INCPATH', realpath(dirname(__FILE__)) . '/'); 

Tenga en cuenta el trailing forward-slash que he incluido anteriormente. ¿La barra diagonal para incluye/requiere lo mismo para ambos sistemas operativos, también?

EDITAR (ACTUALIZADO CON RESPUESTA):

De lo que he entendido, mi código de abajo es la forma correcta para definir universalmente una ruta de inclusión/requerir tanto para * nix y Windows OS. No dude en corregir cualquier cosa en los comentarios a continuación.

Lo que me confundió fueron los muchos ejemplos que vi mostrando el reemplazo de back-slashes (\) en forward-slashes(/). En función de algunas de las respuestas a continuación, esto es innecesario.

Así que el código correcto final (para los puristas) es:

define('INCPATH', realpath(dirname(__FILE__)) . DIRECTORY_SEPARATOR); 

Ese código produce los siguientes resultados:

*nix: /path/to/the/file/

Windows: C:\Path To\the\file\

Una breve explicación, nuestro trabajo camino desde el interior (__FILE__) fuera (realpath()):

FILE La ruta completa y el nombre del archivo. Siempre contiene una ruta absoluta con enlaces simbólicos resueltos.

dirname() La cadena devuelta es ruta con cualquier trailing/componente eliminado. Responsable de eliminar el nombre del archivo.

realpath() Devuelve la ruta de acceso absoluta canonicalizada (normalizada/estandarizada) al éxito. La ruta resultante no tendrá un enlace simbólico, componentes '/./' o '/../'. Supongo que esto se incluye por minuciosidad porque __FILE__ ya resuelve enlaces simbólicos. ¿O tal vez está incluido para resolver rutas relativas? De cualquier manera, parece solidificar nuestro objetivo.

Respuesta

7

Las barras hacia adelante funcionarán para ambos sistemas operativos, y es el camino a seguir.

No pude encontrar una referencia absoluta a esto, pero está indicado en varios lugares en el manual de PHP, como here y . Y, funciona para mí, un usuario de Windows & Linux.

Por último, puede terminar especificando rutas mixtas en Windows, como c:\\apache\\htdocs\\myapp/index.php, y todo funciona bien.

+0

@Derek, buena información, gracias. Asumiré que mi definición anterior funciona en ambos sistemas operativos. – Jeff

+1

A menudo me pregunto por qué se siguen utilizando las barras invertidas, ya que causa dolores de cabeza de escape y la barra diagonal funcionaría igual de bien. – Ether

2

Para sorpresa de muchas personas, / funciona bien en Windows y MSDOS. Dentro de las rutas, funciona incluso en OpenVMS.

Sin embargo, si está haciendo algo dentro de PHP para las rutas, una matriz sería una estructura más conveniente que una cadena.

$MYPATH = array ('.', '/usr/lib/', '/usr/share/lib'); 
Cuestiones relacionadas