php 7.4 环境下部署 tinyfilemanager.php 完全可行,但必须启用 mbstring、zip 和 fileinfo 扩展,否则上传、解压及多语言支持将失效;验证命令为 php -m | grep -e "mbstring|zip|fileinfo",缺失时需安装 php7.4-mbstring php7.4-zip php7.4-fileinfo 并重启 web 服务。

直接说结论:PHP 7.4 环境下部署 tinyfilemanager.php 完全可行,但必须确认 mbstring 和 zip 扩展已启用,否则上传、解压、多语言支持会直接失效。
PHP 7.4 必装扩展与验证命令
很多用户上传后点“上传”没反应、解压报错 Class 'ZipArchive' not found,根本原因就是扩展缺失。PHP 7.4 默认不启用这些模块:
-
mbstring:负责中文路径、UTF-8 文件名、多语言翻译解析,缺它会导致文件列表乱码或空目录 -
zip:解压/压缩 ZIP 文件必需,tar功能依赖phar(通常已启用) -
fileinfo:识别文件类型(如判断是否为图片、PDF),影响预览和图标显示
验证方式(终端执行):php -m | grep -E "mbstring|zip|fileinfo"
若无输出,需手动启用:
sudo apt install php7.4-mbstring php7.4-zip php7.4-fileinfo sudo systemctl restart apache2 # 或 nginx + php-fpm
nginx 下 403 错误的常见配置陷阱
Apache 用户基本无感,但 nginx 用户常卡在 403 Forbidden —— 这不是权限问题,而是 nginx 没把 .php 请求交给 PHP-FPM 处理。
典型错误配置:
- 没写
location ~ \.php$块,或正则写成location ~ \.php$却漏了fastcgi_pass - root 路径指向错误,比如写成
/var/www/html/,但实际tinyfilemanager.php放在/var/www/html/data/子目录 - 没加
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;,导致 PHP 找不到入口文件
最小可用 nginx 配置段(放在 server 块内):
location / {
try_files $uri $uri/ /tinyfilemanager.php?$query_string;
}
location ~ \.php$ {
include fastcgi_params;
fastcgi_pass unix:/run/php/php7.4-fpm.sock;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
}
$directories_users 目录隔离失效的三个原因
设好了 $directories_users,但用户登录后仍能看到全部目录?大概率是以下任一情况:
-
$root_path是绝对路径(如/var/www/html/data),但$directories_users['user']写成了相对路径(如data/user1)——必须同为绝对路径 - 用户 home 目录权限不对:
/var/www/html/data/user1所属用户不是 webserver 进程用户(通常是www-data或nginx),PHP 无法scandir() - 没关掉
$use_auth = false后又没删掉$auth_users,导致认证逻辑跳过目录映射
调试建议:临时在 tinyfilemanager.php 开头加一行 error_log("user: " . $_SESSION['logged_in_user'] . ", dir: " . $directories_users[$_SESSION['logged_in_user']] ?? 'none');,看日志里是否取到预期路径。
Docker 部署时 translation.json 不生效的根源
国内用户拉取官方镜像后发现设置里只有英文,点语言切换没反应——这不是 bug,是镜像没打包 translation.json 文件。
官方镜像(prasathmani/tinyfilemanager:master)只含 tinyfilemanager.php 和基础 HTML,所有翻译资源都靠前端异步加载 translation.json,而该文件默认不在镜像中。
解决方法只有两个:
- 自己构建镜像:COPY
translation.json到容器内/var/www/html/目录(注意路径要和 JS 加载路径一致) - 挂载外部文件:启动容器时用
-v /host/path/translation.json:/var/www/html/translation.json:ro
顺带一提:index.php 里默认引用的是 Google CDN 的 jQuery,国内访问超时会导致设置面板空白,这个得进容器手动改源地址,或者用自建镜像覆盖。
真正麻烦的从来不是部署动作本身,而是 PHP 扩展状态、Web 服务器路由规则、路径权限这三者的隐式耦合 —— 少一个环节对不上,界面就卡在某个看似无关的功能上。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











