【发布时间】:2011-12-11 23:26:10
【问题描述】:
我想知道一些事情,但我似乎找不到一个好的、明确的答案,甚至找不到这个问题的解决方案:
我的 PHP 网站结构如下:
root
functions
generators
helpers
scripts
style
index.php
这些都是文件夹和一个 php 文件。 Functions 包含一堆与数据库连接和各种其他数据库操作(如插入、删除、更新等)相关的 op php 文件。生成器包含自动生成网页的类,以使它们看起来都一样。助手是处理登录、注销、注册等的类。脚本是 javascript,样式是 CSS。
在我的 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>";
}
}
这段代码在每个页面上生成登录框,或者如果用户已经登录,则显示欢迎消息。如您所见,该操作引用“../helpers/login.php”,因为那是从这个生成器的角度来看 loginhelper 的相对位置。
现在,问题来了:如果我按下 index.php (http://example.com/ProjectName/index.php) 上的登录按钮,它会将我重定向到 http://example.com/helpers/login.php 并说找不到文件。
我知道问题出在哪里了,post 操作看到来自 index.php 的请求,然后上一个目录,然后查找 /helpers/login.php,这当然不存在。
解决方法可能是将操作更改为
action='/helpers/login.php'
但是,如果我需要从某个子目录中访问 generateLogin(),这会给我同样的问题... 如何解决这个特定问题,即:对 /helpers/login.php 的引用保持正确,无论我尝试从何处访问它。
【问题讨论】:
标签: php relative-path directory