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



我创建了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.hp.

我不想这样做:

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

对于每个文件。因为当我每次上传时,它都会改变。

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

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


我修好了。

当我用ajax调用它时,它是可以的。但出于某些条件,我也将它作为php包含在内。

由于current和ajax文件在不同的文件夹中,所以它崩溃了。

所以,当我将其更改为在使用ajax调用时只需要initialize.php时,问题就解决了。

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

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

因此,如果默认值为:

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

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

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

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

这一切都取决于你的网络主机给你的权限。还有其他(更简单)的方法可以做到这一点,但我发现大多数方法通常都受到主机提供商的限制,通过.htaccess手动设置通常是最可靠的方法。

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

只需执行以下操作:

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

足够了,因为PHP不会查看您友好的URL。它包括你给他的与你的剧本相关的内容。

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

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

相关内容

  • 没有找到相关文章

最新更新