一、确保Ubuntu环境满足ThinkPHP版本要求
首先需要确认一个基础但容易被忽略的环节:PHP版本是否达到ThinkPHP的运行门槛。ThinkPHP对PHP版本有硬性要求——5.0以上需要PHP 5.6.0+,6.0则要求PHP 7.2.5+。可以通过php -v命令查看当前版本,若不满足条件,执行以下命令即可安装PHP 7.4(版本可按实际需求替换):

sudo apt update
sudo apt install php7.4 php7.4-cli php7.4-fpm php7.4-mysql php7.4-mbstring php7.4-xml php7.4-curl
安装完成后,如需切换默认PHP版本,可以使用update-alternatives工具(非必须步骤):
sudo update-alternatives --set php /usr/bin/php7.4
接下来安装ThinkPHP依赖的PHP扩展,这些扩展缺一不可:
sudo apt install php-mysql php-mbstring php-xml php-curl php-gd php-bcmath php-zip
安装完毕后,务必重启PHP-FPM使扩展生效:
sudo systemctl restart php7.4-fpm
二、正确配置Web服务器(Nginx/Apache)
Nginx配置(推荐方式)
Nginx默认不支持PATHINFO模式,需要手动修改配置文件(例如/etc/nginx/sites-a vailable/your_project)以支持ThinkPHP的URL重写。下面是一个完整的配置示例:
server {
listen 80;
server_name your_domain.com;
root /var/www/html/your_project/public; # 必须指向public目录
index index.php index.html;
location / {
try_files $uri $uri/ /index.php?s=$uri&$args; # 关键:支持PATHINFO模式
}
location ~ \.php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/var/run/php/php7.4-fpm.sock; # 路径需与PHP-FPM配置一致
fastcgi_param PATH_INFO $fastcgi_path_info; # 传递PATHINFO参数
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
}
location ~ /\.ht {
deny all; # 禁止访问.htaccess文件
}
}
修改配置后重启Nginx:sudo systemctl restart nginx。
Apache配置(备选方案)
如果使用Apache,需要先启用mod_rewrite模块:
sudo a2enmod rewrite
sudo systemctl restart apache2
然后在项目根目录创建.htaccess文件,内容如下:
Options +FollowSymlinks -Multiviews
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php/$1 [QSA,PT,L]
三、使用Composer正确安装ThinkPHP
官方推荐使用Composer进行依赖管理,这样可以避免手动下载带来的版本冲突问题。只需两步即可完成:
# 全局安装ThinkPHP(可选)
sudo composer global require topthink/think
# 创建新项目(以ThinkPHP 6.0为例)
composer create-project topthink/think your_project_name
进入项目目录后执行composer install补齐所有依赖。
四、设置项目目录权限
Web服务器用户(通常是www-data)需要对项目目录拥有读写权限,特别是runtime目录(缓存和日志都存放在此):
sudo chown -R www-data:www-data /var/www/html/your_project
sudo chmod -R 755 /var/www/html/your_project/runtime
五、检查并调整ThinkPHP配置
数据库配置
打开config/database.php文件,将连接信息(主机名、用户名、密码、数据库名)修改为Ubuntu上MySQL/MariaDB的实际值:
return [
'default' => 'mysql',
'connections' => [
'mysql' => [
'hostname' => 'localhost',
'database' => 'your_database',
'username' => 'your_username',
'password' => 'your_password',
'charset' => 'utf8mb4',
'prefix' => '',
],
],
];
URL模式设置
在config/app.php中,需要关注url_route_must和url_convert这两个选项:
'url_route_must' => false, // 是否强制使用路由
'url_convert' => false, // 是否自动转换URL大小写(建议关闭,避免兼容性问题)
六、排查常见兼容性问题
502 Bad Gateway错误
该错误通常由PHP-FPM未启动或Nginx配置中的fastcgi_pass路径不匹配引起。先检查PHP-FPM的运行状态:
sudo systemctl status php7.4-fpm
如果未运行,启动它:
sudo systemctl start php7.4-fpm
然后确认Nginx配置里的socket路径是否一致(例如unix:/var/run/php/php7.4-fpm.sock)。
路由失效
若使用PATHINFO模式,请确保Nginx的try_files指令配置正确。如果改用兼容模式(URL_MODEL=3),则需要相应调整rewrite规则(可参考前面Nginx配置示例)。
缓存问题
修改代码后没有生效?清空runtime目录中的缓存即可:
sudo rm -rf /var/www/html/your_project/runtime/*
七、查看日志定位问题
如果以上步骤均已执行仍无法解决,不要硬扛,日志会给出明确提示:
tail -f /var/log/nginx/error.log # Nginx错误日志
tail -f /var/log/php7.4-fpm.log # PHP-FPM错误日志
根据日志中的错误信息(例如缺少扩展、权限不足等)针对性处理,通常都能顺利解决。
