linux服务器跑通thinkphp核心是三件事:public必须设为web根目录、runtime目录需赋予web用户读写权限(如chown -r www-data:www-data runtime)、nginx须用try_files $uri $uri/ /index.php?$query_string正确转发请求;同时php版本需≥7.4(tp6.1+)或≥8.0.0(tp8),并启用mbstring、openssl、pdo等扩展。

Linux服务器上跑通ThinkPHP,核心就三件事:Web根目录必须是public、runtime目录得让PHP进程真正能写、Nginx要把请求稳稳送到index.php。其他配置都是围绕这三点展开的。
Web根目录必须指向public,不能是项目根目录
把整个ThinkPHP项目(含app、config、route)直接放在Web可访问路径下,等于把数据库密码、密钥、路由逻辑全暴露在公网。攻击者只要访问http://your.com/config/database.php,很可能就拿到关键信息。
- Nginx配置里
root指令必须明确指向your_project/public,不是your_project - Apache需确保
DocumentRoot也设为public目录,并启用.htaccess重写(或手动在虚拟主机中配置规则) -
public/index.php权限建议设为644,禁止写入——留着写权限就是给上传的恶意脚本开后门
runtime目录要可写,但不能用777
runtime是ThinkPHP的“工作区”,缓存、日志、会话、路由映射全存在这儿。如果Web进程(如www-data或nginx)没权限创建或写入文件,页面直接500,错误日志里反复出现mkdir(): Permission denied或Cache not writable。
- 先确认Web服务用户:
ps aux | grep -E '(nginx|apache|php-fpm)',看主进程USER列(Ubuntu常见www-data,CentOS常见nginx) - 执行
sudo chown -R www-data:www-data runtime(用户名按实际替换),确保属主和属组都对齐 - 设权限:
chmod 775 runtime,再加chmod g+s runtime,这样新生成的子目录自动继承组,避免后续缓存子目录权限错乱 - 绝对不要
chmod -R 777 runtime——安全扫描工具一扫就标高危,且SELinux或容器环境可能直接拦截
Nginx转发规则要简洁可靠,避开PATH_INFO陷阱
ThinkPHP默认用index.php?s=/home/index这类方式路由,Nginx不配重写,访问/home/index就会404。网上很多if (!-e $request_filename)写法已被Nginx官方标记为不可靠,容易出错。
- 推荐用
try_files:在location /块里写try_files $uri $uri/ /index.php?$query_string; - 删掉或注释掉
fastcgi_split_path_info相关行——ThinkPHP不依赖它,留着反而导致$_SERVER['PATH_INFO']错乱 -
fastcgi_param SCRIPT_FILENAME务必用$realpath_root$fastcgi_script_name,不用$document_root,否则软链接部署时会报No input file specified
环境与扩展检查不能跳过
PHP版本或关键扩展缺失,会导致框架启动失败、功能异常,但错误提示可能很模糊。
- ThinkPHP 6.1+ 要求 PHP ≥ 7.4,TP8 强制要求 PHP ≥ 8.0.0。运行
php -v只看版本号不够,还得查扩展:php -m | grep -E "mbstring|openssl|pdo|pdo_mysql|curl|fileinfo" - 确认
php.ini已启用对应扩展(如extension=mbstring前面没分号),注意Nginx走的是PHP-FPM配置,不是CLI的php.ini - 生产环境必须关掉调试:
APP_DEBUG=false写进.env,并确认config/app.php里'app_debug' => false生效;app_trace也一并关掉,避免SQL和变量泄露
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











