require_once - Ruta absoluta de PHP a la raíz
require_once php ejemplo (7)
Cree una constante con la ruta absoluta a la raíz utilizando la función define
en ShowInfo.php
:
define(''ROOTPATH'', __DIR__);
O PHP <= 5.3
define(''ROOTPATH'', dirname(__FILE__));
Ahora úsalo:
if (file_exists(ROOTPATH.''/Texts/MyInfo.txt'') {
// ...
}
O use el DOCUMENT_ROOT
definido en $_SERVER
:
if (file_exists($_SERVER[''DOCUMENT_ROOT''].''/Texts/MyInfo.txt'') {
// ...
}
No puedo creer que PHP no tenga una solución fácil para este simple asunto. ASP.NET tiene un signo ~ que se preocupa de este problema y comienza todo desde el nivel raíz. Aquí está mi problema:
localhost/MySite
-->Admin
-- Edit.php
-->Class
-- class.EditInfo.php
-->Texts
-- MyInfo.txt
--ShowInfo.php
Inside class.EditInfo.php Estoy accediendo a MyInfo.txt, así que definí una ruta relativa "../Texts/MyInfo.txt". Luego creé un objeto de EditInfo en Admin / Edit.php y accedí a Texts / MyInfo.txt funcionó bien.
Pero ahora tengo que crear un objeto de EditInfo en ShowInfo.php y acceder a Texts / MyInfo.txt y aquí está el problema. Como estoy usando una ruta relativa en mi clase cada vez que estoy creando un objEditInfo y tratando de acceder a MyInfo.txt obtengo el error "El archivo no existe".
Ahora estoy buscando algo que sea equivalente a "~ / Texts / MyInfo.txt" de ASP.NET. ¿Hay algo similar a eso por ahí? ¿O tengo que establecer la ruta con alguna condición if / else?
ACTUALIZAR:
Usé $ _SERVER [''DOCUMENT_ROOT'']. Estaba usando una subcarpeta donde estaba mi sitio web real. Así que tuve que usar $ _SERVER [''DOCUMENT_ROOT'']. "/ MySite" y luego agregar el resto de la dirección ("/Texts/MyInfo.php") a ella.
En PHP hay una variable global que contiene varios detalles relacionados con el servidor. Se llama $ _SERVER. Contiene también la raíz:
$_SERVER[''DOCUMENT_ROOT'']
El único problema es que las entradas en esta variable son proporcionadas por el servidor web y no hay garantía de que todos los servidores web las ofrezcan.
La mejor manera de Usar dirname (). Porque SERVER [''DOCUMENT_ROOT''] no está trabajando en todos los servidores, y también devuelve la ruta de ejecución del servidor.
$root = dirname( __FILE__ );
$root = __DIR__;
$filePath = realpath(dirname(__FILE__));
$rootPath = realpath($_SERVER[''DOCUMENT_ROOT'']);
$htmlPath = str_replace($root, '''', $filePath);
La mejor manera de hacerlo, dada su configuración, es definir una constante que describa la ruta raíz de su sitio. Puede crear un archivo config.php
en la raíz de su aplicación:
<?php
define(''SITE_ROOT'', dirname(__FILE__));
$file_path = SITE_ROOT . ''/Texts/MyInfo.txt'';
?>
Luego incluya config.php
en cada script de punto de entrada y SITE_ROOT
referencia a SITE_ROOT
en su código en lugar de dar una ruta relativa.
Puede acceder a la variable $_SERVER[''DOCUMENT_ROOT''] :
<?php
$path = $_SERVER[''DOCUMENT_ROOT''];
$path .= "/subdir1/yourdocument.txt";
?>
Siempre es mejor comenzar cualquier proyecto personalizado de PHP con un archivo bootstrap donde se definen las rutas más comúnmente usadas como constantes, en base a los valores extraídos de $_SERVER
. Debería hacer que la migración de sus proyectos o partes de su proyecto a otro servidor o a otro directorio en el servidor sea mucho más fácil.
Así es como defino mis rutas de acceso a la raíz:
define("LOCAL_PATH_ROOT", $_SERVER["DOCUMENT_ROOT"]);
define("HTTP_PATH_ROOT", isset($_SERVER["HTTP_HOST"]) ? $_SERVER["HTTP_HOST"] : (isset($_SERVER["SERVER_NAME"]) ? $_SERVER["SERVER_NAME"] : ''_UNKNOWN_''));
La ruta LOCAL_PATH_ROOT
es la raíz del documento. La ruta HTTP_PATH_ROOT
es el equivalente cuando se accede a la misma ruta a través de HTTP.
En ese punto, la conversión de cualquier ruta local a una ruta HTTP se puede hacer con el siguiente código:
str_replace(LOCAL_PATH_ROOT, RELATIVE_PATH_ROOT, $my_path)
Si desea garantizar la compatibilidad con servidores basados en Windows, deberá reemplazar el separador de directorio con un separador de URL también:
str_replace(LOCAL_PATH_ROOT, RELATIVE_PATH_ROOT, str_replace(DIRECTORY_SEPARATOR, ''/'', $my_path))
Aquí está el código de arranque completo que estoy usando para el texto repetitivo de PHP PowerTools :
defined(''LOCAL_PATH_BOOTSTRAP'') || define("LOCAL_PATH_BOOTSTRAP", __DIR__);
// -----------------------------------------------------------------------
// DEFINE SEPERATOR ALIASES
// -----------------------------------------------------------------------
define("URL_SEPARATOR", ''/'');
define("DS", DIRECTORY_SEPARATOR);
define("PS", PATH_SEPARATOR);
define("US", URL_SEPARATOR);
// -----------------------------------------------------------------------
// DEFINE ROOT PATHS
// -----------------------------------------------------------------------
define("RELATIVE_PATH_ROOT", '''');
define("LOCAL_PATH_ROOT", $_SERVER["DOCUMENT_ROOT"]);
define("HTTP_PATH_ROOT",
isset($_SERVER["HTTP_HOST"]) ?
$_SERVER["HTTP_HOST"] : (
isset($_SERVER["SERVER_NAME"]) ?
$_SERVER["SERVER_NAME"] : ''_UNKNOWN_''));
// -----------------------------------------------------------------------
// DEFINE RELATIVE PATHS
// -----------------------------------------------------------------------
define("RELATIVE_PATH_BASE",
str_replace(LOCAL_PATH_ROOT, RELATIVE_PATH_ROOT, getcwd()));
define("RELATIVE_PATH_APP", dirname(RELATIVE_PATH_BASE));
define("RELATIVE_PATH_LIBRARY", RELATIVE_PATH_APP . DS . ''vendor'');
define("RELATIVE_PATH_HELPERS", RELATIVE_PATH_BASE);
define("RELATIVE_PATH_TEMPLATE", RELATIVE_PATH_BASE . DS . ''templates'');
define("RELATIVE_PATH_CONFIG", RELATIVE_PATH_BASE . DS . ''config'');
define("RELATIVE_PATH_PAGES", RELATIVE_PATH_BASE . DS . ''pages'');
define("RELATIVE_PATH_ASSET", RELATIVE_PATH_BASE . DS . ''assets'');
define("RELATIVE_PATH_ASSET_IMG", RELATIVE_PATH_ASSET . DS . ''img'');
define("RELATIVE_PATH_ASSET_CSS", RELATIVE_PATH_ASSET . DS . ''css'');
define("RELATIVE_PATH_ASSET_JS", RELATIVE_PATH_ASSET . DS . ''js'');
// -----------------------------------------------------------------------
// DEFINE LOCAL PATHS
// -----------------------------------------------------------------------
define("LOCAL_PATH_BASE", LOCAL_PATH_ROOT . RELATIVE_PATH_BASE);
define("LOCAL_PATH_APP", LOCAL_PATH_ROOT . RELATIVE_PATH_APP);
define("LOCAL_PATH_LIBRARY", LOCAL_PATH_ROOT . RELATIVE_PATH_LIBRARY);
define("LOCAL_PATH_HELPERS", LOCAL_PATH_ROOT . RELATIVE_PATH_HELPERS);
define("LOCAL_PATH_TEMPLATE", LOCAL_PATH_ROOT . RELATIVE_PATH_TEMPLATE);
define("LOCAL_PATH_CONFIG", LOCAL_PATH_ROOT . RELATIVE_PATH_CONFIG);
define("LOCAL_PATH_PAGES", LOCAL_PATH_ROOT . RELATIVE_PATH_PAGES);
define("LOCAL_PATH_ASSET", LOCAL_PATH_ROOT . RELATIVE_PATH_ASSET);
define("LOCAL_PATH_ASSET_IMG", LOCAL_PATH_ROOT . RELATIVE_PATH_ASSET_IMG);
define("LOCAL_PATH_ASSET_CSS", LOCAL_PATH_ROOT . RELATIVE_PATH_ASSET_CSS);
define("LOCAL_PATH_ASSET_JS", LOCAL_PATH_ROOT . RELATIVE_PATH_ASSET_JS);
// -----------------------------------------------------------------------
// DEFINE URL PATHS
// -----------------------------------------------------------------------
if (US === DS) { // needed for compatibility with windows
define("HTTP_PATH_BASE", HTTP_PATH_ROOT . RELATIVE_PATH_BASE);
define("HTTP_PATH_APP", HTTP_PATH_ROOT . RELATIVE_PATH_APP);
define("HTTP_PATH_LIBRARY", false);
define("HTTP_PATH_HELPERS", false);
define("HTTP_PATH_TEMPLATE", false);
define("HTTP_PATH_CONFIG", false);
define("HTTP_PATH_PAGES", false);
define("HTTP_PATH_ASSET", HTTP_PATH_ROOT . RELATIVE_PATH_ASSET);
define("HTTP_PATH_ASSET_IMG", HTTP_PATH_ROOT . RELATIVE_PATH_ASSET_IMG);
define("HTTP_PATH_ASSET_CSS", HTTP_PATH_ROOT . RELATIVE_PATH_ASSET_CSS);
define("HTTP_PATH_ASSET_JS", HTTP_PATH_ROOT . RELATIVE_PATH_ASSET_JS);
} else {
define("HTTP_PATH_BASE", HTTP_PATH_ROOT .
str_replace(DS, US, RELATIVE_PATH_BASE));
define("HTTP_PATH_APP", HTTP_PATH_ROOT .
str_replace(DS, US, RELATIVE_PATH_APP));
define("HTTP_PATH_LIBRARY", false);
define("HTTP_PATH_HELPERS", false);
define("HTTP_PATH_TEMPLATE", false);
define("HTTP_PATH_CONFIG", false);
define("HTTP_PATH_PAGES", false);
define("HTTP_PATH_ASSET", HTTP_PATH_ROOT .
str_replace(DS, US, RELATIVE_PATH_ASSET));
define("HTTP_PATH_ASSET_IMG", HTTP_PATH_ROOT .
str_replace(DS, US, RELATIVE_PATH_ASSET_IMG));
define("HTTP_PATH_ASSET_CSS", HTTP_PATH_ROOT .
str_replace(DS, US, RELATIVE_PATH_ASSET_CSS));
define("HTTP_PATH_ASSET_JS", HTTP_PATH_ROOT .
str_replace(DS, US, RELATIVE_PATH_ASSET_JS));
}
// -----------------------------------------------------------------------
// DEFINE REQUEST PARAMETERS
// -----------------------------------------------------------------------
define("REQUEST_QUERY",
isset($_SERVER["QUERY_STRING"]) && $_SERVER["QUERY_STRING"] != '''' ?
$_SERVER["QUERY_STRING"] : false);
define("REQUEST_METHOD",
isset($_SERVER["REQUEST_METHOD"]) ?
strtoupper($_SERVER["REQUEST_METHOD"]) : false);
define("REQUEST_STATUS",
isset($_SERVER["REDIRECT_STATUS"]) ?
$_SERVER["REDIRECT_STATUS"] : false);
define("REQUEST_PROTOCOL",
isset($_SERVER["HTTP_ORIGIN"]) ?
substr($_SERVER["HTTP_ORIGIN"], 0,
strpos($_SERVER["HTTP_ORIGIN"], ''://'') + 3) : ''http://'');
define("REQUEST_PATH",
isset($_SERVER["REQUEST_URI"]) ?
str_replace(RELATIVE_PATH_BASE, '''',
$_SERVER["REQUEST_URI"]) : ''_UNKNOWN_'');
define("REQUEST_PATH_STRIP_QUERY",
REQUEST_QUERY ?
str_replace(''?'' . REQUEST_QUERY, '''', REQUEST_PATH) : REQUEST_PATH);
// -----------------------------------------------------------------------
// DEFINE SITE PARAMETERS
// -----------------------------------------------------------------------
define("PRODUCTION", false);
define("PAGE_PATH_DEFAULT", US . ''index'');
define("PAGE_PATH",
(REQUEST_PATH_STRIP_QUERY === US) ?
PAGE_PATH_DEFAULT : REQUEST_PATH_STRIP_QUERY);
Si agrega el código anterior a su propio proyecto, la salida de todas las constantes de usuario en este punto (que puede hacer con get_defined_constants(true)
debería dar un resultado similar al siguiente:
array (
''LOCAL_PATH_BOOTSTRAP'' => ''/var/www/libraries/backend/Data/examples'',
''URL_SEPARATOR'' => ''/'',
''DS'' => ''/'',
''PS'' => '':'',
''US'' => ''/'',
''RELATIVE_PATH_ROOT'' => '''',
''LOCAL_PATH_ROOT'' => ''/var/www'',
''HTTP_PATH_ROOT'' => ''localhost:8888'',
''RELATIVE_PATH_BASE'' => ''/libraries/backend/Data/examples'',
''RELATIVE_PATH_APP'' => ''/libraries/backend/Data'',
''RELATIVE_PATH_LIBRARY'' => ''/libraries/backend/Data/vendor'',
''RELATIVE_PATH_HELPERS'' => ''/libraries/backend/Data/examples'',
''RELATIVE_PATH_TEMPLATE'' => ''/libraries/backend/Data/examples/templates'',
''RELATIVE_PATH_CONFIG'' => ''/libraries/backend/Data/examples/config'',
''RELATIVE_PATH_PAGES'' => ''/libraries/backend/Data/examples/pages'',
''RELATIVE_PATH_ASSET'' => ''/libraries/backend/Data/examples/assets'',
''RELATIVE_PATH_ASSET_IMG'' => ''/libraries/backend/Data/examples/assets/img'',
''RELATIVE_PATH_ASSET_CSS'' => ''/libraries/backend/Data/examples/assets/css'',
''RELATIVE_PATH_ASSET_JS'' => ''/libraries/backend/Data/examples/assets/js'',
''LOCAL_PATH_BASE'' => ''/var/www/libraries/backend/Data/examples'',
''LOCAL_PATH_APP'' => ''/var/www/libraries/backend/Data'',
''LOCAL_PATH_LIBRARY'' => ''/var/www/libraries/backend/Data/vendor'',
''LOCAL_PATH_HELPERS'' => ''/var/www/libraries/backend/Data/examples'',
''LOCAL_PATH_TEMPLATE'' => ''/var/www/libraries/backend/Data/examples/templates'',
''LOCAL_PATH_CONFIG'' => ''/var/www/libraries/backend/Data/examples/config'',
''LOCAL_PATH_PAGES'' => ''/var/www/libraries/backend/Data/examples/pages'',
''LOCAL_PATH_ASSET'' => ''/var/www/libraries/backend/Data/examples/assets'',
''LOCAL_PATH_ASSET_IMG'' => ''/var/www/libraries/backend/Data/examples/assets/img'',
''LOCAL_PATH_ASSET_CSS'' => ''/var/www/libraries/backend/Data/examples/assets/css'',
''LOCAL_PATH_ASSET_JS'' => ''/var/www/libraries/backend/Data/examples/assets/js'',
''HTTP_PATH_BASE'' => ''localhost:8888/libraries/backend/Data/examples'',
''HTTP_PATH_APP'' => ''localhost:8888/libraries/backend/Data'',
''HTTP_PATH_LIBRARY'' => false,
''HTTP_PATH_HELPERS'' => false,
''HTTP_PATH_TEMPLATE'' => false,
''HTTP_PATH_CONFIG'' => false,
''HTTP_PATH_PAGES'' => false,
''HTTP_PATH_ASSET'' => ''localhost:8888/libraries/backend/Data/examples/assets'',
''HTTP_PATH_ASSET_IMG'' => ''localhost:8888/libraries/backend/Data/examples/assets/img'',
''HTTP_PATH_ASSET_CSS'' => ''localhost:8888/libraries/backend/Data/examples/assets/css'',
''HTTP_PATH_ASSET_JS'' => ''localhost:8888/libraries/backend/Data/examples/assets/js'',
''REQUEST_QUERY'' => false,
''REQUEST_METHOD'' => ''GET'',
''REQUEST_STATUS'' => false,
''REQUEST_PROTOCOL'' => ''http://'',
''REQUEST_PATH'' => ''/'',
''REQUEST_PATH_STRIP_QUERY'' => ''/'',
''PRODUCTION'' => false,
''PAGE_PATH_DEFAULT'' => ''/index'',
''PAGE_PATH'' => ''/index'',
)
use dirname(__FILE__)
en un archivo de configuración global.