在this tutorial创建安全登录系统之后,我遇到了这个问题。
在第7部分:创建HTML页面,第1部分创建登录表单(index.php),它使用:
<form action="includes/process_login.php" method="post" name="login_form">
虽然早先在教程中指出(第3部分,第8部分,第1部分,第1段):
在生产环境中,您可能希望找到此文件 以及Web服务器文档之外的所有其他包含文件 根。如果你这样做,我们强烈建议你这样做,你会的 需要时根据需要更改include或require语句 应用程序可以找到包含文件。
所以我的include文件夹不在/ var / www / html / mysite /或/ var / www / html /中,但在/ var / www /中,我的表格变成了:
<form action="../../includes/process_login.php" method="post" name="login_form">
(适用于php包括)。但是这个没有用,我得到了这个错误:
http://localhost/includes/process_login.php请求的网址 在此服务器上找不到/includes/process_login.php。
为什么我的包含在/ var / www / html /中? 我使用
检查了所有的/ var / www /文件夹grep -rnw . -e 'process_login.php'
并且这是该字符串的唯一出现(使用../../)。我错过了什么?
答案 0 :(得分:1)
我找到了一种解决方法,包括一个只包含另一个文件的文件,它是公用文件夹中的第一个,第二个是隐藏文件夹。
表格:
<form action="process_login.php" method="post" name="login_form">
第一个文件(public_folder / mysite / process_login.php):
<?php
include '../../includes/process_login.php';
第二个文件(../../ includes / process_login.php):
<?php
include_once 'db_connect.php';
include_once 'functions.php';
sec_session_start(); // Our custom secure way of starting a PHP session.
if (isset($_POST['email'], $_POST['p'])) {
$email = $_POST['email'];
$pwd = $_POST['p']; // The hashed password.
if (login($email, $pwd, $conn) == true) {
// Login success
header('Location: ../coisas/protected_page.php');
} else {
// Login failed
header('Location: ../coisas/index.php?error=1');
}
} else {
// The correct POST variables were not sent to this page.
echo 'Invalid Request';
}
无论如何,我仍然想知道为什么需要这样做。