最近整理了以前下载的一些软件安装包,想起来在 QNAP NAS 上做个 Web 端下载目录站,就类似 everything 那种一个简单的目录列出的吧。看中了最简单的 Directory Lister [1], 下载源码到 Web 目录即可使用。
功能简介
- 安装简单 一分钟即可上手。
- 亮色/暗色主题 根据个人需求定制。
- 自定义排序 自由展示文件/文件夹的排列顺序。
- 搜索功能 快速便捷定位文件位置。
- 哈希校验 提供 MD5, SHA1, SHA256 三种哈希值校验。
- Readme 文件渲染 支持直接渲染 README 文件内容展示。
- 压缩下载 一键压缩下载整个文件夹。
- 多语言支持 支持 14 种语言切换。
环境需求
- 启用 Web 服务器
- 控制台 → 应用服务 → Web 服务器,启用 Web 服务器,根据需求修改端口和是否启用 HTTPS
- PHP 版本 >= 7.2
- 开启压缩下载功能,需要启用 Zip 扩展
- 开启 Readme 文件渲染功能,需要启用 DOM 和 Fileinfo 扩展
目前我使用的 QTS 4.4.2 系统默认安装的 PHP 版本是 7.3.7, 默认开启了以上所需的三个扩展。
SSH 登录后使用下面的命令分别可以查看当前 QTS 系统的 PHP 版本和安装的扩展:
1
|
/usr/local/apache/bin/php -version
|
1
|
/usr/local/apache/bin/php -m
|
或者创建一个 test.php 扔到 Web 根目录下,然后浏览器访问 ip:port/test.php 查看:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
<?php
echo PHP_VERSION;
echo "<br>";
if (extension_loaded('zip'))
{
echo "zip 扩展已安装<br>";
}
if (extension_loaded('dom'))
{
echo "dom 扩展已安装<br>";
}
if (extension_loaded('fileinfo'))
{
echo "fileinfo 扩展已安装";
}
?>
|
安装配置
- 从官网下载压缩包
- 解压到 NAS 的 Web 目录
配置文件
- 复制
.env.example
文件为 .env
- 编辑
.env
文件修改配置变量
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
|
; 是否开启 debug 模式,便于出错时查看错误信息定位问题
APP_DEBUG=false
; 设置显示语言,语言文件位于 app/translations 目录下
APP_LANGUAGE=en
; 是否开启暗色主题
DARK_MODE=false
; 是否直接渲染 Readme 文件
DISPLAY_READMES=true
; Readme 文件渲染时是否在页面顶部
READMES_FIRST=false
; 是否开启压缩下载
ZIP_DOWNLOADS=true
; 是否启用 GA 分析,接受字符串形式 ID
GOOGLE_ANALYTICS_ID=false
; 是否启用 MA 分析,接受字符串形式 URL
MATOMO_ANALYTICS_URL=false
; 是否启用 MA 分析,接受字符串形式 ID
MATOMO_ANALYTICS_ID=false
; 自定义文件/文件夹排序
; 默认值 type, 其他可选 natural, name, accessed, changed, modified, 自定义函数
; 自定义函数 \DI\value() 接受两个参数 \SplFileInfo 对象
; 例如:
; 'sort_order' => \DI\value(
; function (SplFileInfo $file1, SplFileInfo $file2) {
; return strcmp($file1->getRealPath(), $file2->getRealPath());
; })
; );
SORT_ORDER=type
; 是否反转排序
REVERSE_SORT=false
; 是否隐藏特殊文件/文件夹,比如 index.php 和 app 文件夹
HIDE_APP_FILES=true
; 是否隐藏版本控制相关文件/文件夹,比如 Git 和 Mercurial
HIDE_VCS_FILES=true
; 设置时间格式
; 完整格式化变量参考:https://www.php.net/manual/en/function.date.php#refsect1-function.date-parameters
DATE_FORMAT="Y-m-d H:i:s"
; 设置时区
; 完整 PHP 时区列表:https://www.w3school.com.cn/php/php_ref_timezones.asp
TIMEZONE="UTC"
; 设置可被 HASH 文件大小的上限(字节,byte),防止访问大文件超时错误
; 接受 0 - 9223372036854775807 的整数
MAX_HASH_SIZE=1000000000
|
app.php
该配置文件位于 app/config/app.php
,目测 .env
配置的优先级高于 app.php
。两者配置选项基本相同,只是后者可以指定隐藏哪些文件。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
|
; 指定首页标题
'home_text' => Helpers::env('HOME_TEXT', "Home"),
; 通过文件定义隐藏文件列表,可选值为文件路径
; 默认值 .hidden, 即在根目录创建 .hidden 文件来列出那些文件需要被隐藏
'hidden_files_list' => Helpers::env('HIDDEN_FILES_LIST', '.hidden')
; 需要隐藏文件的列表,支持通配符
'hidden_files' => [
; 完全匹配根目录下 somefile.txt 文件
'somefile.txt',
; 匹配根目录下名为 README 的任意文件
'README.*',
; 匹配 foo 目录下的所有文件
'foo/*',
; 匹配根目录下 schema.yml 或者 schema.yaml 两个文件
'schema.{ya?ml}',
; 匹配任意目录下的任意 jpg 图片文件
'**/*.jpg',
]
|
缓存配置
该配置文件位于 app/config/cache.php
,用于控制缓存的类型和过期时间等。
讲两个主要的配置,其他可根据需求来改:
1
2
3
4
5
|
; 设置缓存类型,默认值 file, 设置为 array 禁用缓存
'cache_driver' => Helpers::env('CACHE_DRIVER', 'file')
; 设置缓存过期时间,默认值 0 为永不过期,需要强制刷新页面才会更新新增内容
; 可以自定义一个合适的时间,单位为秒,比如 7200 (2小时)
'cache_lifetime' => Helpers::env('CACHE_LIFETIME', 0)
|
图标配置
该配置文件位于 app/config/icon.php
,用于配置指定文件类型的显示图标。默认图标由 Font Awesome 5 提供。
默认的配置有些是不正确的,比如 图标 fas fa-window
应为 fab fa-windows
,可以根据实际情况调整。当然也可以使用其他图标库,比如阿里巴巴的 iconfront [2]。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
return [
// 图片
'jpg' => 'fas fa-image',
'png' => 'fas fa-image',
// 数据
'json' => 'fas fa-file-alt',
'yaml' => 'fas fa-file-alt',
// 代码
'css' => 'fab fab fa-css3',
'html' => 'fab fa-html5',
'php' => 'fab fa-php',
// etc...
|
存在问题
目前无法新标签页打开链接,想要打开 README 说明文件里的链接很蛋疼,需要使用 ctrl + 单击 或者鼠标中键等方式。根据 issue [3],项目组好像也没打算改进这个功能。
参考资料:https://github.com/DirectoryLister/DirectoryLister/wiki