doctor

doctor 把 PHP、扩展、项目文件、仓库访问和基础安全检查汇总到一份诊断报告中。

诊断版本 1.1.4稳定
lil-terminal

概览

如果同一个 lil-terminal 在两个主机账户上的表现不同,先运行 doctor,再缩小到 platform、extensions、files、repo 或 security。

先找到出问题的层面

doctor 不会自动修复服务器。它的作用是把平台限制、缺失扩展、文件系统问题、仓库连接和安全配置区分开,让下一步操作建立在实际证据上。

语法

lil-terminal
doctor [group] [-q|-j]

参考

doctor

检查全部项目

doctor platform

显示 PHP、SAPI、限制、会话和 OPcache 检查

doctor extensions

显示 PHP 扩展检查

doctor files

检查项目路径、权限和存储

doctor repo

检查 lil 仓库

doctor security

检查 HTTPS、授权和 Cookie

-q

仅显示警告和错误

-j

返回机器可读的 JSON

交互式 sandbox 预览

可直接在页面中运行预先准备的示例。结果已预先生成并在浏览器中显示;服务器不会执行任何终端命令。

检查项目文件并只显示问题

安装与管理

安装当前兼容版本。完整功能请选择 Base,精简包请选择 Minimum;已安装模块的更新请使用 upgrade。

Base 与 Minimum 是同一当前模块版本的两个包。

Base 包

安装包含本地参考和全部已发布模式的完整包。

install doctor
Minimum 包

安装精简包。该包不包含本地参考;help <cmd> -i 会打开当前服务器参考。

install doctor -m
精确公开版本

安装这个确切的已发布版本。

install doctor -v 1.1.4
检查或升级

让 upgrade 检查兼容性,仅在需要时替换已安装块。

upgrade doctor
删除模块

删除扩展块,不影响核心和其他模块。

install doctor -u

示例

示例可复制,但网站不会执行。请先检查路径、权限和破坏性选项。

检查项目文件并只显示问题
doctor
教学示例 — PHP 环境、服务器和仓库响应为模拟数据
PLATFORM          
+ php             8.4.24 cli
+ memory          -1
+ execution       0 s
+ upload          upload 2M, post 8M
+ session         /var/lib/php/sessions
! opcache         disabled or unavailable

EXTENSIONS        
+ session         loaded
+ json            loaded
+ tokenizer       loaded
+ filter          loaded
+ hash            loaded
+ pcre            loaded
! curl            optional
+ openssl         loaded
+ fileinfo        loaded
! mbstring        optional
! zip             optional
+ phar            loaded
! mysqli          optional
! imap            optional
+ exif            loaded
! imagick         optional
+ sodium          loaded
+ zlib            loaded
! bz2             optional

FILES             
+ lil             training-runtime/lil.php [w]
+ cwd             sandbox [w]
+ base            sandbox [w]
! extensions      training-runtime/sandbox_fixture/extensions.php [ro]
+ temp            /tmp [w]
+ disk            29.7 GB free of 31.5 GB
! asset-css       not installed
! asset-js        not installed

REPO              
+ endpoint        https://repo.lil.dog
! install-api     undefined
+ installer       latest v1.4.6

SECURITY          
! https           not detected
! authorization   disabled build
+ display-errors  0
+ url-include     
! expose-php      1
! cookie          HttpOnly off, Secure off
+ lil-mode        0644

OK                27
WARN              16
FAIL              0
显示 PHP、SAPI、限制、会话和 OPcache 检查
doctor platform
教学示例 — PHP 环境、服务器和仓库响应为模拟数据
+ php        8.4.24 cli
+ memory     -1
+ execution  0 s
+ upload     upload 2M, post 8M
+ session    /var/lib/php/sessions
! opcache    disabled or unavailable

OK           5
WARN         1
FAIL         0
显示 PHP 扩展检查
doctor extensions
教学示例 — PHP 环境、服务器和仓库响应为模拟数据
+ session    loaded
+ json       loaded
+ tokenizer  loaded
+ filter     loaded
+ hash       loaded
+ pcre       loaded
! curl       optional
+ openssl    loaded
+ fileinfo   loaded
! mbstring   optional
! zip        optional
+ phar       loaded
! mysqli     optional
! imap       optional
+ exif       loaded
! imagick    optional
+ sodium     loaded
+ zlib       loaded
! bz2        optional

OK           12
WARN         7
FAIL         0
检查项目路径、权限和存储
doctor files
教学示例 — PHP 环境、服务器和仓库响应为模拟数据
+ lil         training-runtime/lil.php [w]
+ cwd         sandbox [w]
+ base        sandbox [w]
! extensions  training-runtime/sandbox_fixture/extensions.php [ro]
+ temp        /tmp [w]
+ disk        29.7 GB free of 31.5 GB
! asset-css   not installed
! asset-js    not installed

OK            5
WARN          3
FAIL          0
检查 lil 仓库
doctor repo
教学示例 — PHP 环境、服务器和仓库响应为模拟数据
+ endpoint     https://repo.lil.dog
! install-api  undefined
+ installer    latest v1.4.6

OK             2
WARN           1
FAIL           0
检查 HTTPS、授权和 Cookie
doctor security
教学示例 — PHP 环境、服务器和仓库响应为模拟数据
! https           not detected
! authorization   disabled build
+ display-errors  0
+ url-include     
! expose-php      1
! cookie          HttpOnly off, Secure off
+ lil-mode        0644

OK                3
WARN              4
FAIL              0
仅显示警告和错误
doctor -q
教学示例 — PHP 环境、服务器和仓库响应为模拟数据
PLATFORM         
! opcache        disabled or unavailable

EXTENSIONS       
! curl           optional
! mbstring       optional
! zip            optional
! mysqli         optional
! imap           optional
! imagick        optional
! bz2            optional

FILES            
! extensions     training-runtime/sandbox_fixture/extensions.php [ro]
! asset-css      not installed
! asset-js       not installed

REPO             
! install-api    undefined

SECURITY         
! https          not detected
! authorization  disabled build
! expose-php     1
! cookie         HttpOnly off, Secure off

OK               27
WARN             16
FAIL             0
返回机器可读的 JSON
doctor -j
教学示例 — PHP 环境、服务器和仓库响应为模拟数据
{
    "summary": {
        "ok": 27,
        "warn": 16,
        "fail": 0
    },
    "checks": [
        {
            "group": "platform",
            "name": "php",
            "status": "ok",
            "detail": "8.4.24 cli"
        },
        {
            "group": "platform",
            "name": "memory",
            "status": "ok",
            "detail": "-1"
        },
        {
            "group": "platform",
            "name": "execution",
            "status": "ok",
            "detail": "0 s"
        },
        {
            "group": "platform",
            "name": "upload",
            "status": "ok",
            "detail": "upload 2M, post 8M"
        },
        {
            "group": "platform",
            "name": "session",
            "status": "ok",
            "detail": "/var/lib/php/sessions"
        },
        {
            "group": "platform",
            "name": "opcache",
            "status": "warn",
            "detail": "disabled or unavailable"
        },
        {
            "group": "extensions",
            "name": "session",
            "status": "ok",
            "detail": "loaded"
        },
        {
            "group": "extensions",
            "name": "json",
            "status": "ok",
            "detail": "loaded"
        },
        {
            "group": "extensions",
            "name": "tokenizer",
            "status": "ok",
            "detail": "loaded"
        },
        {
            "group": "extensions",
            "name": "filter",
            "status": "ok",
            "detail": "loaded"
        },
        {
            "group": "extensions",
            "name": "hash",
            "status": "ok",
            "detail": "loaded"
        },
        {
            "group": "extensions",
            "name": "pcre",
            "status": "ok",
            "detail": "loaded"
        },
        {
            "group": "extensions",
            "name": "curl",
            "status": "warn",
            "detail": "optional"
        },
        {
            "group": "extensions",
            "name": "openssl",
            "status": "ok",
            "detail": "loaded"
        },
        {
            "group": "extensions",
            "name": "fileinfo",
            "status": "ok",
            "detail": "loaded"
        },
        {
            "group": "extensions",
            "name": "mbstring",
            "status": "warn",
            "detail": "optional"
        },
        {
            "group": "extensions",
            "name": "zip",
            "status": "warn",
            "detail": "optional"
        },
        {
            "group": "extensions",
            "name": "phar",
            "status": "ok",
            "detail": "loaded"
        },
        {
            "group": "extensions",
            "name": "mysqli",
            "status": "warn",
            "detail": "optional"
        },
        {
            "group": "extensions",
            "name": "imap",
            "status": "warn",
            "detail": "optional"
        },
        {
            "group": "extensions",
            "name": "exif",
            "status": "ok",
            "detail": "loaded"
        },
        {
            "group": "extensions",
            "name": "imagick",
            "status": "warn",
            "detail": "optional"
        },
        {
            "group": "extensions",
            "name": "sodium",
            "status": "ok",
            "detail": "loaded"
        },
        {
            "group": "extensions",
            "name": "zlib",
            "status": "ok",
            "detail": "loaded"
        },
        {
            "group": "extensions",
            "name": "bz2",
            "status": "warn",
            "detail": "optional"
        },
        {
            "group": "files",
            "name": "lil",
            "status": "ok",
            "detail": "training-runtime/lil.php [w]"
        },
        {
            "group": "files",
            "name": "cwd",
            "status": "ok",
            "detail": "sandbox [w]"
        },
        {
            "group": "files",
            "name": "base",
            "status": "ok",
            "detail": "sandbox [w]"
        },
        {
            "group": "files",
            "name": "extensions",
            "status": "warn",
            "detail": "training-runtime/sandbox_fixture/extensions.php [ro]"
        },
        {
            "group": "files",
            "name": "temp",
            "status": "ok",
            "detail": "/tmp [w]"
        },
        {
            "group": "files",
            "name": "disk",
            "status": "ok",
            "detail": "29.7 GB free of 31.5 GB"
        },
        {
            "group": "files",
            "name": "asset-css",
            "status": "warn",
            "detail": "not installed"
        },
        {
            "group": "files",
            "name": "asset-js",
            "status": "warn",
            "detail": "not installed"
        },
        {
            "group": "repo",
            "name": "endpoint",
            "status": "ok",
            "detail": "https://repo.lil.dog"
        },
        {
            "group": "repo",
            "name": "install-api",
            "status": "warn",
            "detail": "undefined"
        },
        {
            "group": "repo",
            "name": "installer",
            "status": "ok",
            "detail": "latest v1.4.6"
        },
        {
            "group": "security",
            "name": "https",
            "status": "warn",
            "detail": "not detected"
        },
        {
            "group": "security",
            "name": "authorization",
            "status": "warn",
            "detail": "disabled build"
        },
        {
            "group": "security",
            "name": "display-errors",
            "status": "ok",
            "detail": "0"
        },
        {
            "group": "security",
            "name": "url-include",
            "status": "ok",
            "detail": ""
        },
        {
            "group": "security",
            "name": "expose-php",
            "status": "warn",
            "detail": "1"
        },
        {
            "group": "security",
            "name": "cookie",
            "status": "warn",
            "detail": "HttpOnly off, Secure off"
        },
        {
            "group": "security",
            "name": "lil-mode",
            "status": "ok",
            "detail": "0644"
        }
    ]
}
拒绝未知诊断组
doctor platform -q
教学示例 — PHP 环境、服务器和仓库响应为模拟数据
! opcache  disabled or unavailable

OK         5
WARN       1
FAIL       0
返回机器可读的 JSON
doctor extensions -j
教学示例 — PHP 环境、服务器和仓库响应为模拟数据
{
    "summary": {
        "ok": 12,
        "warn": 7,
        "fail": 0
    },
    "checks": [
        {
            "group": "extensions",
            "name": "session",
            "status": "ok",
            "detail": "loaded"
        },
        {
            "group": "extensions",
            "name": "json",
            "status": "ok",
            "detail": "loaded"
        },
        {
            "group": "extensions",
            "name": "tokenizer",
            "status": "ok",
            "detail": "loaded"
        },
        {
            "group": "extensions",
            "name": "filter",
            "status": "ok",
            "detail": "loaded"
        },
        {
            "group": "extensions",
            "name": "hash",
            "status": "ok",
            "detail": "loaded"
        },
        {
            "group": "extensions",
            "name": "pcre",
            "status": "ok",
            "detail": "loaded"
        },
        {
            "group": "extensions",
            "name": "curl",
            "status": "warn",
            "detail": "optional"
        },
        {
            "group": "extensions",
            "name": "openssl",
            "status": "ok",
            "detail": "loaded"
        },
        {
            "group": "extensions",
            "name": "fileinfo",
            "status": "ok",
            "detail": "loaded"
        },
        {
            "group": "extensions",
            "name": "mbstring",
            "status": "warn",
            "detail": "optional"
        },
        {
            "group": "extensions",
            "name": "zip",
            "status": "warn",
            "detail": "optional"
        },
        {
            "group": "extensions",
            "name": "phar",
            "status": "ok",
            "detail": "loaded"
        },
        {
            "group": "extensions",
            "name": "mysqli",
            "status": "warn",
            "detail": "optional"
        },
        {
            "group": "extensions",
            "name": "imap",
            "status": "warn",
            "detail": "optional"
        },
        {
            "group": "extensions",
            "name": "exif",
            "status": "ok",
            "detail": "loaded"
        },
        {
            "group": "extensions",
            "name": "imagick",
            "status": "warn",
            "detail": "optional"
        },
        {
            "group": "extensions",
            "name": "sodium",
            "status": "ok",
            "detail": "loaded"
        },
        {
            "group": "extensions",
            "name": "zlib",
            "status": "ok",
            "detail": "loaded"
        },
        {
            "group": "extensions",
            "name": "bz2",
            "status": "warn",
            "detail": "optional"
        }
    ]
}
仅显示警告和错误
doctor security -q
教学示例 — PHP 环境、服务器和仓库响应为模拟数据
! https          not detected
! authorization  disabled build
! expose-php     1
! cookie         HttpOnly off, Secure off

OK               3
WARN             4
FAIL             0
仅显示警告和错误
doctor -q -j
教学示例 — PHP 环境、服务器和仓库响应为模拟数据
{
    "summary": {
        "ok": 27,
        "warn": 16,
        "fail": 0
    },
    "checks": [
        {
            "group": "platform",
            "name": "opcache",
            "status": "warn",
            "detail": "disabled or unavailable"
        },
        {
            "group": "extensions",
            "name": "curl",
            "status": "warn",
            "detail": "optional"
        },
        {
            "group": "extensions",
            "name": "mbstring",
            "status": "warn",
            "detail": "optional"
        },
        {
            "group": "extensions",
            "name": "zip",
            "status": "warn",
            "detail": "optional"
        },
        {
            "group": "extensions",
            "name": "mysqli",
            "status": "warn",
            "detail": "optional"
        },
        {
            "group": "extensions",
            "name": "imap",
            "status": "warn",
            "detail": "optional"
        },
        {
            "group": "extensions",
            "name": "imagick",
            "status": "warn",
            "detail": "optional"
        },
        {
            "group": "extensions",
            "name": "bz2",
            "status": "warn",
            "detail": "optional"
        },
        {
            "group": "files",
            "name": "extensions",
            "status": "warn",
            "detail": "training-runtime/sandbox_fixture/extensions.php [ro]"
        },
        {
            "group": "files",
            "name": "asset-css",
            "status": "warn",
            "detail": "not installed"
        },
        {
            "group": "files",
            "name": "asset-js",
            "status": "warn",
            "detail": "not installed"
        },
        {
            "group": "repo",
            "name": "install-api",
            "status": "warn",
            "detail": "undefined"
        },
        {
            "group": "security",
            "name": "https",
            "status": "warn",
            "detail": "not detected"
        },
        {
            "group": "security",
            "name": "authorization",
            "status": "warn",
            "detail": "disabled build"
        },
        {
            "group": "security",
            "name": "expose-php",
            "status": "warn",
            "detail": "1"
        },
        {
            "group": "security",
            "name": "cookie",
            "status": "warn",
            "detail": "HttpOnly off, Secure off"
        }
    ]
}
返回机器可读的 JSON
doctor --json
教学示例 — PHP 环境、服务器和仓库响应为模拟数据
{
    "summary": {
        "ok": 27,
        "warn": 16,
        "fail": 0
    },
    "checks": [
        {
            "group": "platform",
            "name": "php",
            "status": "ok",
            "detail": "8.4.24 cli"
        },
        {
            "group": "platform",
            "name": "memory",
            "status": "ok",
            "detail": "-1"
        },
        {
            "group": "platform",
            "name": "execution",
            "status": "ok",
            "detail": "0 s"
        },
        {
            "group": "platform",
            "name": "upload",
            "status": "ok",
            "detail": "upload 2M, post 8M"
        },
        {
            "group": "platform",
            "name": "session",
            "status": "ok",
            "detail": "/var/lib/php/sessions"
        },
        {
            "group": "platform",
            "name": "opcache",
            "status": "warn",
            "detail": "disabled or unavailable"
        },
        {
            "group": "extensions",
            "name": "session",
            "status": "ok",
            "detail": "loaded"
        },
        {
            "group": "extensions",
            "name": "json",
            "status": "ok",
            "detail": "loaded"
        },
        {
            "group": "extensions",
            "name": "tokenizer",
            "status": "ok",
            "detail": "loaded"
        },
        {
            "group": "extensions",
            "name": "filter",
            "status": "ok",
            "detail": "loaded"
        },
        {
            "group": "extensions",
            "name": "hash",
            "status": "ok",
            "detail": "loaded"
        },
        {
            "group": "extensions",
            "name": "pcre",
            "status": "ok",
            "detail": "loaded"
        },
        {
            "group": "extensions",
            "name": "curl",
            "status": "warn",
            "detail": "optional"
        },
        {
            "group": "extensions",
            "name": "openssl",
            "status": "ok",
            "detail": "loaded"
        },
        {
            "group": "extensions",
            "name": "fileinfo",
            "status": "ok",
            "detail": "loaded"
        },
        {
            "group": "extensions",
            "name": "mbstring",
            "status": "warn",
            "detail": "optional"
        },
        {
            "group": "extensions",
            "name": "zip",
            "status": "warn",
            "detail": "optional"
        },
        {
            "group": "extensions",
            "name": "phar",
            "status": "ok",
            "detail": "loaded"
        },
        {
            "group": "extensions",
            "name": "mysqli",
            "status": "warn",
            "detail": "optional"
        },
        {
            "group": "extensions",
            "name": "imap",
            "status": "warn",
            "detail": "optional"
        },
        {
            "group": "extensions",
            "name": "exif",
            "status": "ok",
            "detail": "loaded"
        },
        {
            "group": "extensions",
            "name": "imagick",
            "status": "warn",
            "detail": "optional"
        },
        {
            "group": "extensions",
            "name": "sodium",
            "status": "ok",
            "detail": "loaded"
        },
        {
            "group": "extensions",
            "name": "zlib",
            "status": "ok",
            "detail": "loaded"
        },
        {
            "group": "extensions",
            "name": "bz2",
            "status": "warn",
            "detail": "optional"
        },
        {
            "group": "files",
            "name": "lil",
            "status": "ok",
            "detail": "training-runtime/lil.php [w]"
        },
        {
            "group": "files",
            "name": "cwd",
            "status": "ok",
            "detail": "sandbox [w]"
        },
        {
            "group": "files",
            "name": "base",
            "status": "ok",
            "detail": "sandbox [w]"
        },
        {
            "group": "files",
            "name": "extensions",
            "status": "warn",
            "detail": "training-runtime/sandbox_fixture/extensions.php [ro]"
        },
        {
            "group": "files",
            "name": "temp",
            "status": "ok",
            "detail": "/tmp [w]"
        },
        {
            "group": "files",
            "name": "disk",
            "status": "ok",
            "detail": "29.7 GB free of 31.5 GB"
        },
        {
            "group": "files",
            "name": "asset-css",
            "status": "warn",
            "detail": "not installed"
        },
        {
            "group": "files",
            "name": "asset-js",
            "status": "warn",
            "detail": "not installed"
        },
        {
            "group": "repo",
            "name": "endpoint",
            "status": "ok",
            "detail": "https://repo.lil.dog"
        },
        {
            "group": "repo",
            "name": "install-api",
            "status": "warn",
            "detail": "undefined"
        },
        {
            "group": "repo",
            "name": "installer",
            "status": "ok",
            "detail": "latest v1.4.6"
        },
        {
            "group": "security",
            "name": "https",
            "status": "warn",
            "detail": "not detected"
        },
        {
            "group": "security",
            "name": "authorization",
            "status": "warn",
            "detail": "disabled build"
        },
        {
            "group": "security",
            "name": "display-errors",
            "status": "ok",
            "detail": "0"
        },
        {
            "group": "security",
            "name": "url-include",
            "status": "ok",
            "detail": ""
        },
        {
            "group": "security",
            "name": "expose-php",
            "status": "warn",
            "detail": "1"
        },
        {
            "group": "security",
            "name": "cookie",
            "status": "warn",
            "detail": "HttpOnly off, Secure off"
        },
        {
            "group": "security",
            "name": "lil-mode",
            "status": "ok",
            "detail": "0644"
        }
    ]
}
返回机器可读的 JSON
doctor repo -j
教学示例 — PHP 环境、服务器和仓库响应为模拟数据
{
    "summary": {
        "ok": 2,
        "warn": 1,
        "fail": 0
    },
    "checks": [
        {
            "group": "repo",
            "name": "endpoint",
            "status": "ok",
            "detail": "https://repo.lil.dog"
        },
        {
            "group": "repo",
            "name": "install-api",
            "status": "warn",
            "detail": "undefined"
        },
        {
            "group": "repo",
            "name": "installer",
            "status": "ok",
            "detail": "latest v1.4.6"
        }
    ]
}
检查全部项目
doctor unknown
教学示例 — PHP 环境、服务器和仓库响应为模拟数据
?
检查全部项目
doctor -z
教学示例 — PHP 环境、服务器和仓库响应为模拟数据
?
检查全部项目
doctor platform extensions
教学示例 — PHP 环境、服务器和仓库响应为模拟数据
?
仅显示警告和错误
doctor files -q
教学示例 — PHP 环境、服务器和仓库响应为模拟数据
! extensions  training-runtime/sandbox_fixture/extensions.php [ro]
! asset-css   not installed
! asset-js    not installed

OK            5
WARN          3
FAIL          0

相关文档

当前公开版本

v1.1.42026-11-01

生产级完善

doctor 的当前稳定版本。doctor 把 PHP、扩展、项目文件、仓库访问和基础安全检查汇总到一份诊断报告中。