h5ai:目录列表程序

modern HTTP web server index

h5ai 是一个实现文件目录列表功能(file indexer)的 php 程序,支持浏览器在线预览文本文件(包括 MarkDown 渲染和各类源代码的语法高亮)、图片、音视频和打包下载等功能(部分功能需要安装或开启额外的程序/功能)。可以用作服务器文件目录的查看和展示。官方 demo 看这里

安装好 PHP 服务器后,下载程序文件,解压后把 _h5ai 文件夹放到网站目录。接着,用浏览器访问 http://your_domain/_h5ai/public/index.php (文件夹就放在网站根目录的话),提示输入密码,默认为空,直接点击就可以进入 h5ai info 界面,看到一些功能的状态。

看到有红字的话,说明一些功能需要根据提示进行额外的配置。比如 publicprivate 两个文件夹的缓存权限,需要给它们各自的 cache 文件夹 777 权限;视频文件的预览,则需要手动 apt install 一下 ffmpeg

一开始做到这一步之后,我半天也没找到应该怎么进入文件列表主界面……后来才发现,我误解了 h5ai 的工作原理。

其他许多使用 PHP 实现的文件管理器,是把程序放进某个目录后,访问之就可以查看相应目录下的文件。但 h5ai 并不是这样。简单地说,它的本体程序文件可以被放到任意的目录,但却可以实现访问网站下的其他任何目录都能通过调用 h5ai 程序来展示文件

要做到这一点,需要对网页服务器的 index 默认位置做一个简单的配置。以 Nginx 为例,在 nginx.conf(AWS 的 nginx 镜像默认配置文件位于 /opt/bitnami/nginx/conf/bitnami/bitnami.conf) 中,修改 server { 下的 location 字段为:

1
2
3
location / {
        index index.php index.html index.htm /_h5ai/public/index.php;
}

也即在最后添加 /_h5ai/public/index.php。注意,放在最后的优先级是为了保证访问有 index 文件的目录时,仍然直接解析 index。

以上操作之后,h5ai 的部署就全部完成啦。现在,直接通过域名和目录地址访问网站服务器中任何一个不带 index 的目录都可以调用 h5ai 显示文件列表啦。

最后值得说明的是,在 h5ai info 界面会提示去 _h5ai/private/conf/options.json 里设置密码(需要直接填写密码的 SHA512 hash),但这个密码只是 info 页面的访问密码,进入文件列表主界面是无法设置密码的。

好在我们可以直接通过修改 php 代码来增加访问密码功能。编辑 _h5ai/public/index.php,在 <?php 的后一行增加:

1
auth();

在文件最后增加:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
function auth ()
{
        $valid_passwords = array ("username" => "password");
        $valid_users = array_keys($valid_passwords);

        $user = $_SERVER['PHP_AUTH_USER'];
        $pass = $_SERVER['PHP_AUTH_PW'];

        $validated = (in_array($user, $valid_users)) && ($pass == $valid_passwords[$user]);

        if (!$validated) {
          header('WWW-Authenticate: Basic realm="My Realm"');
          header('HTTP/1.0 401 Unauthorized');
          die ("Not authorized");
        }
}

自定义上面的 usernamepassword 字符串就可以啦。

参考链接

-------------本文结束    感谢您的阅读-------------
0%