入门

第 9

主机是一个系统:先确认事实,再修改任何东西

主机问题很容易看起来像“脚本坏了”,但真正原因可能是 PHP 版本、缺少扩展、文件系统已满、权限、网络路径或邮件传输。先描述你实际拥有的机器,终端工作会平静很多。

同一个项目在不同主机上可能表现不同

文件可以完全相同,运行环境却不同。PHP 版本、已加载扩展、文件系统限制、所有者、权限、时间、网络访问和服务器策略都会影响应用实际能做什么。

所以第一个有用的问题不是“我要改什么?”,而是“它现在运行在什么环境里?”。终端擅长把模糊的“环境”变成可以检查的事实。

先用一屏信息建立基准

core 会显示当前 lil Core、PHP、界面层、扩展文件、更新、活动文件和目录。doctor -q 提供紧凑的健康视图;sys hostsys uptime 描述主机以及系统已运行多久。

健康摘要并不能证明每个应用都健康。它是一条基线:在深入排查之前,快速发现机器、Core 或运行环境是否和你以为的一样。

core
doctor -q
sys host
sys uptime

PHP 能力只有在当前运行环境真正提供时才存在

php versionphp modulesdoctor extensions 直接回答能力问题。IMAP、SQLite、GD 或某个加密能力可能在一个主机套餐中存在,在另一个套餐中没有。

缺少能力和命令写错不是一回事。与其随机寻找替代方案,不如接受清晰的能力错误:先确认扩展,再决定启用它、换工具,或者把任务放到别的环境。

php version
php modules
php info memory -c
doctor extensions

剩余空间、目录占用和权限是三个不同问题

disk . 显示文件系统容量;disk . -r 会明确遍历当前目录树来计算占用。stat 告诉你一个路径实际是什么。权限又是另一层:文件存在、空间也足够,PHP 仍可能没有读写权。

不要用“让所有东西都可写”来修权限。先检查所有者和权限模式,只改变真正需要改变的最小目标,再次验证。权限是本地访问边界,不是身份验证或加密的替代品。

disk .
disk . -r
stat .

删除、重启或猜测之前,先读日志

log -l 会寻找可能的日志。确认相关文件后,只读取必要的开头或结尾范围并使用文字过滤,就能查看最新证据,而不必把巨大的日志完整载入浏览器。

有用的日志行包含上下文:时间、组件、请求或操作,以及真实错误。任何“清理”之前先保留这些上下文。很多棘手故障一旦能准确回答“故障从什么时候开始、附近发生了什么变化”,就会变成普通问题。

log -l

环境值和邮件是独立子系统,值得单独测试

env 以可读方式展示环境、服务器和请求值,并对敏感名称进行遮罩。这样可以回答 PHP 看到哪个临时目录或服务器地址,而不用盲目导出整个运行环境。

mail 有自己的诊断边界:本地 PHP 邮件传输和 IMAP 连接不是一回事。网站可以正常渲染,但外发邮件被拒绝;IMAP 也可能只是因为扩展不存在而不可用。测试你真正依赖的子系统。

env server SERVER_ADDR
env TMP
mail

修复之前先保存基准信息

修改 PHP 设置、模块、权限或主机配置之前,把紧凑报告重定向到 diagnostics/。修改完成后再收集同样的报告,用事实比较,而不是依赖“现在好像更好了”。

这个习惯不只适用于 lil-terminal。在 Linux、macOS、Windows、容器和控制面板中,好的诊断都遵循类似顺序:识别环境、隔离层级、收集证据、只改一件事、验证。

md diagnostics
doctor -j > diagnostics/doctor.json -r
sys > diagnostics/system.txt -r
php version > diagnostics/php.txt -r

把它保存成脚本

把它保存为 hosting-baseline.lil。它把一份紧凑的诊断快照写入 diagnostics/,不会修改应用数据。主机变更前后都保留快照:比较通常比记忆更可靠。

#lil
@install md doctor sys php disk log env
md diagnostics
core > diagnostics/core.txt -r
doctor -q > diagnostics/doctor.txt -r
sys > diagnostics/system.txt -r
php version > diagnostics/php.txt -r
disk . > diagnostics/disk.txt -r
log -l > diagnostics/logs.txt -r
env server SERVER_ADDR > diagnostics/server.txt -r