php相对路径和目录
我想知道一些事情,但我似乎找不到一个好的、明确的答案,甚至找不到解决这个问题的办法: 我的PHP网站具有以下结构:php相对路径和目录,php,relative-path,directory,Php,Relative Path,Directory,我想知道一些事情,但我似乎找不到一个好的、明确的答案,甚至找不到解决这个问题的办法: 我的PHP网站具有以下结构: root functions generators helpers scripts style index.php 这些都是文件夹和一个php文件。函数包含与数据库连接和各种其他数据库操作(如插入、删除、更新等)相关的一组php文件,。。。生成器包含自动生成网页的类,使网页看起来完全相同。助手是处理登录、注销、注册等的类。脚本是javascri
root
functions
generators
helpers
scripts
style
index.php
这些都是文件夹和一个php文件。函数包含与数据库连接和各种其他数据库操作(如插入、删除、更新等)相关的一组php文件,。。。生成器包含自动生成网页的类,使网页看起来完全相同。助手是处理登录、注销、注册等的类。脚本是javascript,样式是CSS
在my generators文件夹中,有一个文件mainGenerator.php,它生成网站的各个部分:
private function generateLogin()
{
if (!isLoggedIn()) {
echo "
<h2>Login</h2>
<form method='post' action='../helpers/login.php' id='loginForm'>
<p>
Username:<br/>
<input class='search' type='text' name='username'/>
Password:<br/>
<input class='search' type='password' name='password'/>
<input name='login' type='image' style='border: 0; margin: 0 0 -9px 5px;' src='style/login.png' alt='Login' title='Login'/><br/>
No account yet? <a href='../register.php'>Register</a>
</p></form>";
} else {
echo "
<h2>Welome, <a href='user.php' style='color: #1293EE;'>" .
$_SESSION['user_name'] .
"</a></h2>
<a href='logout.php'>Log off</a>";
}
}
但如果我需要从某个子目录中访问generateLogin(),这也会给我带来同样的问题。。。
如何解决这个特殊的问题,即:对/helpers/login.php的引用保持正确,无论我从何处尝试访问它。如果您有一个以斜杠开头的链接,它总是附加到根目录,而不是当前目录 因此,如果您的页面是
www.example.com/mySite/foo.html
,并且您有这样一个链接:Bar/
,用户将被重定向到www.example.com/Bar.html
您应该让表单操作指向
helpers/login.php
action='/ProjectName/helpers/login.php'
假设你的根是,那么上面的链接应该总是决定它是从还是从中调用的
如果不想将“ProjectName”硬编码到许多不同的脚本中,可以使用全局变量并在配置文件中定义它:
helpers/ConfigOptions.php:
<?php
$ProjectName = "ProjectName";
?>
include $_SERVER['DOCUMENT_ROOT'] . '/helpers/ConfigOptions.php';
...
echo "
<form action='/$ProjectName/helpers/login.php'>
....
";
或者使用相对路径。我会投后者的票,因为你不需要硬编码“ProjectName”
因此,include()和require()将采用以下两种方法之一:
那么什么时候需要使用DOCUMENT_ROOT呢?通常在模板中,像
。/helpers/file.php
这样的相对路径可以解析为不同的绝对路径,具体取决于包含文件的内容。在上面的示例中,index.php包含ConfigOptions.php,您可能不需要使用DOCUMENT_ROOT,因为index.php不是模板。我用它是为了安全,但也许我在这里打开了一整罐虫子。我希望我没有让你更加困惑。helpers/login.php
将只在顶级目录下工作。感谢您提供有关斜杠的信息。投票赞成!如果我错了,请纠正我的错误,但这对需求不起作用,对吗?像这样:包括$服务器['DOCUMENT\u ROOT']/MyProject/helpers/ConfigOptions.php';require_once($ProjectName.'/functions/account_fns.php')这不重要,因为include()和require()都是文件的相对或绝对路径。我用有关文档根的更多信息更新了我的答案。
include $_SERVER['DOCUMENT_ROOT'] . '/helpers/ConfigOptions.php';
...
echo "
<form action='/$ProjectName/helpers/login.php'>
....
";
include $_SERVER['DOCUMENT_ROOT'] . '/ProjectName/helpers/ConfigOptions.php';