0

我创建了 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 时,问题就解决了。

4

3 回答 3

1

如果您使用的是 Apache,您可以尝试将您的包含目录添加到您的 include_path 指令中。

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

因此,如果默认值为:

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

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

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

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

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

这是一个列出几种不同方法的页面:为 PHP 创建包含路径的五种方法

于 2012-09-05T06:30:06.590 回答
0

只需这样做:

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

就足够了,因为PHP不查看您的友好 URL。它包括你给他的任何东西,包括相对于你的脚本。

还有$_SERVER['DOCUMENT_ROOT']一个会为您提供根目录的绝对路径。

于 2012-09-05T06:27:32.717 回答
0

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

于 2012-09-05T06:33:57.263 回答