3

我正在使用全局常量,如下所示:

/project
    /application
        bootstrap.php
    /public
        index.php

索引.php

  • 定义 PUBLIC_PATH 和 APPLICATION_PATH
  • 调用 APPLICATION_PATH 。引导程序.php

引导程序.php

  • 定义 LIBRARY_PATH, MODULES_PATH, TEMP_PATH, CONFIG_PATH, ...
  • 做真正的工作

另外我想问一下是否有更好的方法来做到这一点?

4

3 回答 3

1

根据您的目录树:

这是我用来加载 PHP 脚本的那个,基本上你可以把它放在 index.php 或 bootstrap.php

define("PROJECT_DISK_PATH", str_replace('\\', '/', dirname(dirname(__FILE__))) . '/');
/*
Server variables $_SERVER['PHP_SELF'] and $_SERVER['SCRIPT_FILE_NAME'] are both USELESS to 
accomplish this task because they both return the currently executed script and not this included file path.
*/

然后在您的 PHP 脚本中执行以下操作:

include(PROJECT_DISK_PATH . 'path/to/your/script/somescript.php')

这些是我用来在页面中加载 JS/CSS 脚本的那些:

define("PROJECT_DOCROOT_PATH", '/' . substr(PROJECT_DISK_PATH, strlen($_SERVER['DOCUMENT_ROOT'] . '/')));
define("PROJECT_HTTP_PATH", "http://" . $_SERVER['HTTP_HOST'] . JPL_DOCROOT_PATH);

因此,在您的页面中,您可以执行以下操作:

   <script type="text/javascript" src="<?php echo PROJECT_DOCROOT_PATH; ?>path/to/your/script/somescript.js"></script>
于 2010-05-20T12:12:25.280 回答
1

你的意思是你的申请不公开?无论如何,通常我只是ROOT在我的前端控制器(通常index.php)中定义一个常量,如下所示:

define('ROOT', str_replace('\\', '/', __DIR__));

或者在旧版本的 PHP 上__DIR__不可用:

define('ROOT', str_replace('\\', '/', dirname(__FILE__)));

由于内部结构永远不会改变,我只做类似的事情:

include(ROOT . '/application/libraries/Email.php');

代替:

define('LIBRARY_PATH', ROOT . '/application/libraries');
include(LIBRARY_PATH . '/Email.php');

更少的污染。=)

于 2010-05-20T11:45:01.143 回答
-1

如果可能,我会使用绝对路径,$_SERVER['DOCUMENT_ROOT']
如果不可能,我会使用相对路径,就像 Alix 一样。

于 2010-05-20T11:53:51.230 回答