我的网页仅供内部使用。它将托管在主要运行其他进程的服务器上,这些进程在/ opt / appname / logs / dir中生成日志文件。我的任务是创建一个Web界面,允许将这些日志文件下载到我们网络上的任何计算机上。我在Debian上使用Apache。这就是我到目前为止所做的:
<details>
<summary><b>Download Log Files</b></summary>
<?php
foreach (glob("/opt/appname/logs/*.log") as $filename) {
$file_info = explode("/logs/", $filename);
?>
<a href="<?php echo $filename ?>" download><?php echo $file_info[1] ?></a>
<br>
<?php } ?>
</details>
当我尝试下载日志文件时,下载看起来就像它启动但后来给我发消息&#34; Failed No file&#34;。我发现很多在线帖子说你可以或不能做到这一点,但没有一个提供足够的例子。我意识到访问Web文件夹之外的任何内容都存在问题,但必须有一些方法可以做到这一点。我真的很茫然,所以任何建议都会很棒。最后我是自学成才,所以如果你发现任何我没有做过最佳实践的错误或事情,请告诉我。我一直在努力改进。
答案 0 :(得分:1)
这是一个与安全相关的事情,只有浏览器才能访问服务器上某些路径中的文件,因此不应该有一个“简单”的解决方案。
可以做什么:
或
在后一种情况下,您应该记住,通过参数提供路径对于所有想要阅读服务器上所有文件的人来说都是敞开的大门!
答案 1 :(得分:0)
您可以创建文件download.php
。此文件可能类似于:
<强>的download.php 强>
$fn = $_GET["filename"];
if (is_readable($fn)) {
header('Content-Description: File Transfer');
header('Content-Type: text/plain');
header('Content-Disposition: attachment; filename="'.$fn.'"');
readfile($fn);
} else {
//return a 404 error perhaps.
}
然后,您可以将原始商家信息代码修改为:
<details>
<summary><b>Download Log Files</b></summary>
<?php
foreach (glob("/opt/appname/logs/*.log") as $filename) {
$file_info = explode("/logs/", $filename);
?>
<a href="download.php?filename=<?php echo $filename ?>" download><?php echo $file_info[1] ?></a>
<br>
<?php } ?>
</details>
我个人喜欢这种方法,因为您还可以在“下载管理器”中添加额外的检查和例外。