1. 检查并调整PHP版本
ThinkPHP对PHP版本有明确要求:ThinkPHP 5.0及以上需PHP 5.6.0+,ThinkPHP 6.0需PHP 7.2.5+。通过php -v命令查看当前PHP版本,若不符合要求,可通过以下命令安装指定版本(以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
安装后,用update-alternatives切换默认PHP版本(可选):
sudo update-alternatives --set php /usr/bin/php7.4
2. 安装必要PHP扩展
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
1. Nginx配置(推荐)
Nginx默认不支持PATHINFO,需修改配置文件(如/etc/nginx/sites-available/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
2. Apache配置(备选)
若使用Apache,需启用mod_rewrite模块并配置.htaccess文件:
sudo a2enmod rewrite # 启用rewrite模块
sudo systemctl restart apache2
在项目根目录创建.htaccess文件,内容如下:
<IfModule mod_rewrite.c>
Options +FollowSymlinks -Multiviews
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php/$1 [QSA,PT,L]
</IfModule>
ThinkPHP推荐通过Composer管理依赖,避免手动下载导致的兼容性问题:
# 全局安装ThinkPHP(可选)
sudo composer global require topthink/think
# 创建新项目(以ThinkPHP 6.0为例)
composer create-project topthink/think your_project_name
安装完成后,进入项目目录安装依赖:
cd 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
1. 数据库配置
修改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' => '',
],
],
];
2. URL模式设置
在config/app.php中,确保url_route_must(路由强制模式)和url_convert(URL大小写转换)设置符合项目需求:
'url_route_must' => false, // 是否强制使用路由
'url_convert' => false, // 是否自动转换URL大小写(建议关闭,避免兼容性问题)
1. 502 Bad Gateway错误
通常因PHP-FPM未运行或Nginx配置中的fastcgi_pass路径错误导致。检查PHP-FPM状态:
sudo systemctl status php7.4-fpm
若未运行,启动服务:
sudo systemctl start php7.4-fpm
并确认Nginx配置中的fastcgi_pass路径与PHP-FPM的socket路径一致(如unix:/var/run/php/php7.4-fpm.sock)。
2. 路由失效
若使用PATHINFO模式,确保Nginx配置中try_files指令正确(如try_files $uri $uri/ /index.php?s=$uri&$args);若使用兼容模式(URL_MODEL=3),需修改Nginx配置中的rewrite规则(参考上文Nginx配置部分)。
3. 缓存问题
若修改代码后未生效,清除runtime目录下的缓存文件:
sudo rm -rf /var/www/html/your_project/runtime/*
若问题仍未解决,查看Nginx和PHP-FPM的错误日志获取详细信息:
tail -f /var/log/nginx/error.log # Nginx错误日志
tail -f /var/log/php7.4-fpm.log # PHP-FPM错误日志
根据日志中的错误提示(如缺少扩展、权限不足),针对性解决问题。