我创建了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,问题就解决了。
答案 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时,在公共文件中定义所有目录是一种很好的方法。您必须在项目的每个文件中包含此公共文件。用户友好的网址对文件包含没有影响。