本地跑得好好的站点,传到虚拟主机上总会多出几个新问题。踩过的坑记在这里。

一、PHP 版本不一致

本地 8.2,主机默认可能还是 7.4。面板里能选版本,但切换后要给站点重载一次 PHP 进程,否则 php.ini 还是旧的。

二、路径大小写

macOS 文件系统不区分大小写,Linux 区分。require './db.php' 写成 DB.php 在本地毫无问题,上线直接 500。

三、SQLite 的写权限

数据库文件可写还不够,同目录也必须可写——SQLite 要创建 -journal 和 -wal 临时文件。只给文件加 666 是最常见的错误。

BASH
chmod 755 /www/wwwroot/blog
chmod 664 /www/wwwroot/blog/data/blog.db
chown www:www /www/wwwroot/blog/data

四、伪静态规则

/article/123 这种路由依赖重写规则。面板里新建站点默认没有 .htaccess,需要自己加:

APACHE
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ index.php [QSA,L]

五、时区

date() 输出差 8 小时,是因为主机默认 UTC。在入口统一设置,别指望 php.ini 每个站点都改过:

PHP
date_default_timezone_set('Asia/Shanghai');

六、上传限制

upload_max_filesize 和 post_max_size 要一起改,只改前者会静默截断请求,表现为"点了保存但什么都没发生"。

最省事的排查手段永远是看日志。面板的站点日志目录里,error.log 的最后 50 行通常直接写着原因。