如何使用用户友好的URL获取php中的项目根目录

时间:2012-09-05 06:19:20

标签: php include directory-structure include-path server-side-includes

我创建了initialize.php来定义项目的根目录。

defined('DS') ? null : define('DS', DIRECTORY_SEPARATOR);
defined('SITE_ROOT') ? null : define('SITE_ROOT', DS.'works'.DS.'myproject');

我在任何目录中都包含了类似的东西。

require_once("../includes/initialize.php");

我更容易包含其他文件。我要将文件上传到服务器,然后我应该只更改initialize.php文件。

有效。但是,当我使用用户友好的URL,并从中调用ajax文件时,我不知道我的目录层次结构包含initialize.php。

我不想这样做:

require_once("/works/myproject/includes/initialize.php");

为每个文件。因为每次上传时它都会改变。

我不想为每个用户使用会话或cookie。

应该有一个技巧,但我找不到。有没有办法在使用用户友好的URL和ajax调用时从任何地方获取项目根目录?


我修好了。

当我用ajax调用它时,没关系。但是我在某些情况下也将它作为php包含在内。

由于当前和ajax文件位于不同的文件夹中,因此崩溃了。

所以,当我用ajax调用它时只需要initialize.php,问题就解决了。

3 个答案:

答案 0 :(得分:1)

如果您正在使用Apache,则可以尝试将include目录添加到include_path指令。

通过执行phpinfo()查找当前值并查找 include_path ,然后尝试在顶级Web目录中重新声明它并添加包含目录的绝对路径。

因此,如果默认值为:

include_path = ".:/usr/bin/php:/some/other/directory"

只需在.htaccess文件中复制粘贴相同内容,但最后添加include目录,用冒号分隔。

include_path = ".:/usr/bin/php:/some/other/directory:/works/myproject/includes"

这样你就不必每次都引用绝对路径。

这完全取决于您的网站托管服务商为您提供的权限。还有其他(更简单)方法可以做到这一点,但我发现大多数方法通常都受托管服务提供商的限制,通过.htaccess手动设置它通常是完成此任务的最可靠方法。

以下是一个列出几种不同方式的页面:Five ways to create include path for PHP

答案 1 :(得分:0)

只需这样做:

require_once("../includes/initialize.php");

就足够了,因为PHP没有查看您的友好网址。它包括你给他的任何相对于你的脚本的内容。

还有$_SERVER['DOCUMENT_ROOT']将从您的根目录提供绝对路径。

答案 2 :(得分:0)

在添加initialize.php时,在公共文件中定义所有目录是一种很好的方法。您必须在项目的每个文件中包含此公共文件。用户友好的网址对文件包含没有影响。