Ubuntu 下恢复 ThinkPHP 的可执行步骤
一 恢复前的快速定位
- 核对 PHP 版本是否满足项目要求(常见为 PHP 7.0+):执行命令:php -v。
- 查看项目日志定位错误:执行命令:tail -f runtime/log/error.log。
- 查看 Nginx/Apache 错误日志:执行命令:sudo tail -f /var/log/nginx/error.log 或 /var/log/apache2/error.log。
- 核对 .env 与 config 目录中的数据库、缓存等关键配置是否正确。
- 若项目使用 Composer 管理依赖,确认依赖是否完整。
二 从备份恢复代码与数据
- 代码恢复:将备份的代码覆盖到站点目录(如 /var/www/your-project),保持目录结构一致。
- 依赖恢复:在项目根目录执行:composer install(如需国内镜像可加 –optimize-autoloader)。
- 数据恢复:
- MySQL/MariaDB:优先使用 mysqldump 的 .sql 备份导入;
- 若只有 .frm/.ibd 等文件,需保证 ibdata1 与表结构一致,并在恢复前停止 MySQL,按表逐一导入或使用专业工具,操作前务必完整备份现有数据。
- 目录权限:将站点目录属主设为 www-data,权限设为 755(可按需对 runtime、upload 等目录放宽写权限):
- 命令:sudo chown -R www-data:www-data /var/www/your-project
- 命令:sudo chmod -R 755 /var/www/your-project
- 配置核对:确认 .env 中的 DB_HOST/DB_NAME/DB_USER/DB_PASS 与当前数据库一致;检查 config/database.php 等配置是否匹配备份环境。
三 框架核心文件缺失或损坏的处理
- 若从 GitHub 等渠道拉取的项目缺失 thinkphp 框架目录,会导致启动失败(如报错:require(…/thinkphp/start.php): failed to open stream)。
- 处理方式:
- 使用 Composer 重新安装框架依赖:在项目根目录执行 composer install;
- 或手动将对应版本的 thinkphp 框架目录复制到项目 vendor/topthink/ 下,确保 vendor/topthink 目录存在且可访问。
四 环境与重写配置修复
- PHP 扩展补齐:常见必备扩展包括 mbstring、openssl、pdo、tokenizer、gd、pdo_mysql 等。示例:
- 命令:sudo apt-get install php-mbstring php-openssl php-pdo php-tokenizer php-gd php-mysql
- 修改 php.ini(可用 php --ini 查看路径),确保相关扩展已启用(如 extension=pdo_mysql.so),然后重启 PHP-FPM/Apache。
- Web 服务器与重写:
- Nginx 推荐配置(支持 PATH_INFO 与 URL Rewrite):
- location / { try_files $uri $uri/ /index.php?$query_string; }
- location ~ .php$ { include fastcgi_params; fastcgi_pass unix:/var/run/php/php7.4-fpm.sock; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; fastcgi_param PATH_INFO $fastcgi_path_info; }
- Apache 确认 mod_rewrite 已启用,且 public/.htaccess 配置正确。
- Ubuntu 大小写敏感:确保控制器/类名与文件系统中的目录、文件名大小写完全一致,避免因 Linux 大小写敏感导致 控制器不存在 等错误。
五 缓存与常见故障排查清单
- 清除缓存:删除 runtime 目录下的缓存文件(如 temp、cache),或执行框架提供的清理命令,避免因旧缓存导致页面空白或异常。
- 权限问题:若页面空白或写入失败,检查 runtime、upload 等目录对 www-data 是否可写。
- 路由与重写:确认路由模式与服务器重写规则匹配,避免因路由未命中导致空白页。
- 模块缺失:若报错 php module not found(如 pdo_mysql、gd、mbstring),按第二节补齐扩展并重启服务。
- 验证码/图片不显示:安装 GD 扩展并在验证码输出前调用 ob_end_clean() 以清理输出缓冲。
- 持续报错:结合 runtime/log/error.log 与 Nginx/Apache 错误日志逐条排查,必要时开启开发模式获取更详细错误信息。