1. 纸鱼博客需要什么运行环境?
需要 PHP 8.1 或更高版本、MySQL 5.7.6 或更高版本,以及 Nginx 或 Apache。PHP 请启用 pdo_mysql、gd、zip、mbstring、openssl、json 和 fileinfo 扩展。
2. 如何安装 Pafish?
下载发布包并上传到网站目录,解压后访问 https://你的域名/install.php,按照向导填写数据库和管理员信息即可。宝塔用户可以参考宝塔面板部署指南。
3. 安装完成后为什么必须删除 install.php?
安装向导检测到 runtime/config.php(或旧版根目录 config.php)已存在时会显示“系统已安装”并拒绝再次提交,网页无法直接覆盖已有配置。但仍应立即删除 install.php,避免暴露安装入口和多余的可执行文件。
4. 提示目录不可写怎么办?
请确保 PHP 运行用户可以写入 runtime/、backups/ 和 public/uploads/ 目录。一般安装不需要开放整个项目根目录的写权限;宝塔用户可在文件管理器中将上述目录所有者设置为运行 PHP 的用户。
5. post_max_size 或 upload_max_filesize 警告会影响使用吗?
低于 10M 时只影响应用商店/主题安装,不影响文章发布和正常浏览;10M 到目标值之间会使安装向导的环境检查不通过,需要先调大限制。建议将 post_max_size 设置为至少 16M,将 upload_max_filesize 设置为至少 12M,修改后重启 PHP。
6. 不支持伪静态怎么办?
在安装向导中关闭“启用伪静态”,或在 runtime/config.php 中将 pretty_urls 设置为 false。旧版站点若仍使用根目录 config.php,系统会继续兼容读取。系统会使用 index.php?p=... 形式的链接,功能不受影响。
7. Nginx 访问文章时返回 404 怎么办?
安装完成并删除 install.php 后,可在 Nginx server 配置中加入以下安全规则。PHP 拦截规则要放在通用 PHP-FPM 规则之前:
location ~* ^/(config\.php|composer\.(json|lock)|\.env)(/|$) {
deny all;
}
location ^~ /runtime/ {
deny all;
}
location ^~ /backups/ {
deny all;
}
location ~ ^/(?!index\.php$|cron\.php$).*\.php(?:/|$) {
deny all;
}
location / {
try_files $uri $uri/ /index.php?$query_string;
}规则会阻止直接访问敏感文件和目录,并禁止执行其他 PHP 文件。不要使用 try_files $uri =404 处理整个站点。修改后执行 nginx -t 并重载 Nginx。
8. 页面能打开,但 CSS 或 JS 没有加载怎么办?
先确认站点根目录指向 纸鱼博客项目根目录,而不是 public/ 目录;再检查 Nginx 的伪静态规则和浏览器开发者工具中的资源路径。Apache 用户请确认 .htaccess 已启用。
9. 发布文章后前台看不到怎么办?
确认文章状态为“已发布”,并检查文章发布时间和站点时区。定时文章只有到达发布时间后,才会显示在首页、搜索、RSS 和 API 中。
10. 定时发布需要配置计划任务吗?
不是必须的。没有计划任务时,前台请求会低频检查并发布到期文章。为了让发布时间更准确,建议每分钟执行一次:
php /www/wwwroot/你的站点/cron.php11. 中文搜索没有结果怎么办?
纸鱼博客会优先使用 MySQL 全文索引,无法使用时自动回退到普通查询。请确认 MySQL 版本不低于 5.7.6,并确认安装时已创建 ft_posts_search 全文索引;后台没有单独的“重建搜索索引”入口。
12. 图片上传失败怎么办?
先检查 upload_max_filesize、post_max_size 和 public/uploads/ 的写入权限。单个文件不能超过 PHP 的上传限制;超过时编辑器会改用分片上传,此时还需要 storage/chunks/ 可写。若站点启用了云存储插件,插件连接失败也会回退本地存储并在 runtime/error.log 记录原因。
13. 评论为什么需要验证码?
游客评论默认需要填写验证码,登录用户不需要。管理员可以在评论设置中调整验证码和审核策略;同一 IP 的评论请求也有频率限制。
14. SMTP 邮件发送失败怎么办?
在站点设置中检查 SMTP 服务器、端口、账号、密码和发件人地址。465 通常使用 SSL,587 通常使用 STARTTLS。修改后使用“测试发送”确认配置。
15. 备份提示 mysqldump 不可用怎么办?
纸鱼博客会自动回退到纯 PHP 备份,不依赖 exec()、mysqldump 或 mysql 命令。数据库很大时,建议同时使用主机面板提供的数据库备份功能。
16. 忘记管理员密码怎么办?
可以在服务器上生成新的密码哈希:
php -r 'echo password_hash("新密码", PASSWORD_BCRYPT);'然后将输出结果更新到数据库 users 表对应用户的 password_hash 字段。操作前请先备份数据库。
17. 主题或插件安装失败怎么办?
先检查 PHP 的 zip 扩展、上传限制和 themes/ 或 plugins/ 对 PHP 运行用户是否可写,再确认压缩包结构和 PHP 版本满足应用清单要求。应用更新前会自动创建备份,失败时可以恢复旧版本。
18. 如何迁移到另一台服务器?
先在旧站点备份数据库和站点文件,再在新服务器准备相同或更高版本的运行环境,导入数据库并恢复文件,最后确认 runtime/config.php 中的数据库连接信息和 site_url 指向新站。旧版站点可能仍使用根目录 config.php。迁移前请确认两边的数据库结构版本一致。
19. 如何调用开放 API?
在后台“站点设置 → 开放 API”中启用并生成 Key,请求时携带 X-API-Key 请求头。常用接口包括:
/api/v1/posts/api/v1/posts/{slug}/api/v1/categories/api/v1/tags/api/v1/comments/api/v1/site/api/v1/pages/api/v1/links/api/v1/menus/api/v1/micro-statuses
完整参数与返回字段见API 开发文档。
20. 手机 App 连不上站点或提示令牌失效怎么办?
App 使用登录后签发的 Bearer 设备令牌,与开放 API 的 X-API-Key 是两套凭据。令牌有效期 90 天,每账号最多 10 台设备;被撤销、过期或账号被禁用都会返回 401。在 App 内重新登录,或登录网页后台“个人资料 → 设备授权”撤销旧设备后重新连接。接口契约见App 接口与设备令牌。
21. 如何排查站点异常?
先查看 PHP 和 Web 服务器错误日志,再依次检查目录权限、伪静态规则、PHP 扩展和数据库连接。如果问题出现在安装主题或插件之后,请先停用最近安装的应用;仍无法定位时,切换到默认主题进行对比。
22. 如何让站点更安全?
请及时升级 纸鱼博客和已安装的应用,使用高强度管理员密码,安装完成后删除 install.php,关闭不需要的用户注册,并定期将数据库和站点文件备份到服务器之外的位置。