我创建了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对文件包含没有影响。