(我知道这可能是一个简单的问题要回答,但我不知道该怎么做。对不起,如果以前曾经问过这个问题。)
我想要什么。我想要一个位于服务器上的filse链接列表。文件是文件(pdf文件)。我理解如何使用PHP来限制对链接列表的访问,但是可以只输入浏览器中文件的直接链接并下载文件。所以我希望保护PHP文件密码(链接列表)并让人们只输入一次密码。
我有什么。到目前为止,我有documents.php(在互联网上找到):
<?php
$username = "name";
$password = "5f4dcc3b5aa765d61d8327deb882cf99";
if ($_POST['txtUsername'] != $username || md5($_POST['txtPassword']) != $password) {
?>
<h1>Login</h1>
<form name="form" method="post" action="<?php echo $_SERVER['PHP_SELF']; ?>">
<p><label for="txtUsername">Username:</label>
<br /><input type="text" title="Enter your Username" name="txtUsername" /></p>
<p><label for="txtpassword">Password:</label>
<br /><input type="password" title="Enter your password" name="txtPassword" /></p>
<p><input type="submit" name="Submit" value="Login" /></p>
</form>
<?php
}
else {
?>
<p>Link to documents</p>
<p><a href="http://example.com/folder/file.pdf">file.pdf</a></p>
<?php
}
?>
但有了这个,一个人就可以通过直接链接从浏览器访问该文件:http://example.com/folder/file.pdf。
如何防止这种情况?
(我对PHP和javascript以及基本HTML感到满意) 谢谢, 托马斯
答案 0 :(得分:3)
通过php中介访问文件
将文档放在webroot之外,并在php文件中保留一个命名的路径数组。当客户端按名称请求文件时(在对它们进行身份验证之后),在数组中查看文件的路径,然后从文件系统中读取文件,然后将其内容输出回它们。
这是readfile的目的。
答案 1 :(得分:3)
与quasistoic的答案类似 - 除了使用您的Web服务器(例如Apache或nginx)为PDF文件提供受保护/内部URL(因此不仅仅是您的webroot中的静态URL),然后使用X-Sendfile (或者如果在nginx上使用X-Accel-Redirect)标头来发送文件而不必通过PHP流式传输文件。