安装体检:把 fileinfo 列为推荐扩展
新装一套 PHP(尤其宝塔里的 8.5)时 fileinfo 常常默认没开,此时 上传的类型校验只能按「扩展名 + 浏览器声明的 MIME」核对。代码本身 有回落链、不会报错,但用户无从得知这层弱化,因此在安装体检里显式 列出,并说明开启后的收益。 - install.php:可选扩展支持 [说明, 缺失文案, 补救提示] 三元组 - README:扩展清单补 fileinfo,并提示换 PHP 版本后要复查一次
This commit is contained in:
@@ -56,6 +56,9 @@ feedback/
|
|||||||
2. 确认该站点使用的 PHP 版本 **≥ 7.4**(推荐 8.1~8.5;**8.5 已逐项实测,无弃用告警**),并已启用扩展:
|
2. 确认该站点使用的 PHP 版本 **≥ 7.4**(推荐 8.1~8.5;**8.5 已逐项实测,无弃用告警**),并已启用扩展:
|
||||||
**pdo_sqlite、sqlite3、openssl、mbstring**(宝塔默认均已有;在「软件商店 → PHP → 安装扩展」可查看)。
|
**pdo_sqlite、sqlite3、openssl、mbstring**(宝塔默认均已有;在「软件商店 → PHP → 安装扩展」可查看)。
|
||||||
**curl 为可选**:有则优先用它和 OSS 通信,没有会自动退回 PHP 内置的流式请求,功能不受影响。
|
**curl 为可选**:有则优先用它和 OSS 通信,没有会自动退回 PHP 内置的流式请求,功能不受影响。
|
||||||
|
**fileinfo 为推荐**:开启后上传时按文件**真实内容**判断类型(`finfo`);
|
||||||
|
没有也能正常用,但类型校验会退化为「扩展名 + 浏览器声明的 MIME」。
|
||||||
|
⚠️ 新装一套 PHP(尤其宝塔里的 8.5)时 `fileinfo` 常常**默认没开**,从旧版本切过来要顺手检查一次。
|
||||||
3. 给数据库目录写权限(宝塔一般已允许):
|
3. 给数据库目录写权限(宝塔一般已允许):
|
||||||
```bash
|
```bash
|
||||||
chown -R www:www /www/wwwroot/你的域名/feedback
|
chown -R www:www /www/wwwroot/你的域名/feedback
|
||||||
|
|||||||
+18
-2
@@ -33,7 +33,16 @@ $already = fb_installed();
|
|||||||
* ================================================================== */
|
* ================================================================== */
|
||||||
function fb_install_checks() {
|
function fb_install_checks() {
|
||||||
$need = ['pdo_sqlite' => 'SQLite 数据库(PDO)', 'openssl' => 'SMTP / OSS 加密通信'];
|
$need = ['pdo_sqlite' => 'SQLite 数据库(PDO)', 'openssl' => 'SMTP / OSS 加密通信'];
|
||||||
$opt = ['curl' => '访问 OSS(可选,没有会退回 PHP 流式请求)', 'mbstring' => '中文字数统计(可选)'];
|
// 可选扩展:值是说明字符串;也可写成 [说明, 缺失时的状态文案, 缺失时的补救提示]
|
||||||
|
$opt = [
|
||||||
|
'curl' => '访问 OSS(可选,没有会退回 PHP 流式请求)',
|
||||||
|
'mbstring' => '中文字数统计(可选)',
|
||||||
|
'fileinfo' => [
|
||||||
|
'上传文件的真实类型识别(推荐开启)',
|
||||||
|
'未启用(仍可用,但上传类型只按扩展名核对)',
|
||||||
|
'建议在 PHP 设置里开启 fileinfo,上传校验会更严格',
|
||||||
|
],
|
||||||
|
];
|
||||||
|
|
||||||
$dirs = [
|
$dirs = [
|
||||||
FB_ROOT => '站点根目录(要写入 config.php)',
|
FB_ROOT => '站点根目录(要写入 config.php)',
|
||||||
@@ -54,8 +63,15 @@ function fb_install_checks() {
|
|||||||
$rows[] = ['PHP 扩展:' . $ext, $has ? '已启用' : '未启用', $has, $why, $has ? '' : ('请在 PHP 设置里开启 ' . $ext . ' 扩展')];
|
$rows[] = ['PHP 扩展:' . $ext, $has ? '已启用' : '未启用', $has, $why, $has ? '' : ('请在 PHP 设置里开启 ' . $ext . ' 扩展')];
|
||||||
}
|
}
|
||||||
foreach ($opt as $ext => $why) {
|
foreach ($opt as $ext => $why) {
|
||||||
|
$note = '未启用(不影响安装)';
|
||||||
|
$hint = '';
|
||||||
|
if (is_array($why)) {
|
||||||
|
$note = isset($why[1]) ? $why[1] : $note;
|
||||||
|
$hint = isset($why[2]) ? $why[2] : '';
|
||||||
|
$why = isset($why[0]) ? $why[0] : '';
|
||||||
|
}
|
||||||
$has = extension_loaded($ext);
|
$has = extension_loaded($ext);
|
||||||
$rows[] = ['PHP 扩展:' . $ext, $has ? '已启用' : '未启用(不影响安装)', true, $why, ''];
|
$rows[] = ['PHP 扩展:' . $ext, $has ? '已启用' : $note, true, $why, $has ? '' : $hint];
|
||||||
}
|
}
|
||||||
|
|
||||||
foreach ($dirs as $d => $why) {
|
foreach ($dirs as $d => $why) {
|
||||||
|
|||||||
Reference in New Issue
Block a user