thinkphp5不能直接扔进/var/www/html运行,必须将web根目录设为public子目录,否则导致敏感目录暴露、autoload失败和静态资源404;还需配置重写规则、修复runtime权限、启用必要php扩展并关闭调试模式清缓存。

ThinkPHP5 不能直接扔进 /var/www/html 就跑起来——核心问题是入口文件路径、运行时目录权限和 Apache/Nginx 的重写规则没配对,不改必报 404 或 require(): failed to open stream。
确认 PHP 环境和扩展是否到位
TP5 要求 PHP ≥ 5.6(推荐 7.2+),且必须启用 curl、mbstring、openssl、pdo_mysql(如用 MySQL)。常见坑是漏开 mbstring,导致路由解析失败或模板乱码。
- 执行
php -v和php -m | grep -E "curl|mbstring|openssl|pdo"核查 - 若缺失,Debian/Ubuntu 执行
sudo apt install php-curl php-mbstring php-openssl php-pdo php-mysql;CentOS 用yum install php-curl php-mbstring php-opcache php-pdo php-mysqlnd - 重启 PHP-FPM:
sudo systemctl restart php7.4-fpm(版本号按实际调整)
把 public 目录设为 Web 根目录,不是整个项目根目录
TP5 的安全设计强制要求 Web 服务器只暴露 public/ 下的文件。把整个 thinkphp/ 目录放在 /var/www/html 下,会导致 application/、config/ 等敏感目录被直接访问。
Zynq‑7000 / Zynq UltraScale+ 硬件调试技能。适用于 Xilinx Zynq(Cortex‑A9/A53 + FPGA)Linux 环境,调试 I2C、I2S、UART、GPIO 等外设。包括设备树配置、内核驱动、用户空间调试工具、交叉编译和常见问题排查,支持 PetaLinux 开发。
- 正确做法:将你的项目解压后,把 Web 服务器的根目录(如 Nginx 的
root或 Apache 的DocumentRoot)指向/path/to/your/project/public - 例如 Nginx 配置片段:
location / { try_files $uri $uri/ /index.php?$query_string; },并确保index.php可执行(无需加php前缀) - 切勿用
Alias或子目录方式绕过 —— TP5 的__DIR__定位依赖于public/index.php是入口起点
修复 runtime 目录权限和 SELinux(如启用)
runtime/ 目录需由 Web 进程(如 www-data 或 nginx 用户)可读写,否则日志写不进、缓存生成失败,首页空白但无报错。
- 给权限:
sudo chown -R www-data:www-data /path/to/project/runtime(Ubuntu/Debian)或sudo chown -R nginx:nginx /path/to/project/runtime(CentOS) - 设权限位:
sudo chmod -R 755 /path/to/project/runtime(不要 777) - 若系统启用了 SELinux(如 CentOS 默认开启),还需打标签:
sudo semanage fcontext -a -t httpd_sys_rw_content_t "/path/to/project/runtime(/.*)?",再执行sudo restorecon -Rv /path/to/project/runtime - 临时验证:在
public/index.php顶部加file_put_contents('test.txt', 'ok');,看是否生成成功
关闭调试模式前务必清空 runtime/cache
开发时 APP_DEBUG = true,会缓存大量调试信息;上线后设为 false,但若不手动删掉 runtime/cache/,旧缓存可能干扰路由、配置加载,出现“页面不更新”“路由 404”等诡异现象。
- 修改
app.php中的'debug' => false,并确保APP_DEBUG环境变量未被覆盖(检查.env文件) - 清缓存命令:
php think clear(需在项目根目录执行,不是public/) - 如果
think命令不可用,直接rm -rf runtime/cache/* runtime/log/* runtime/common.php - 注意:
runtime/下的route.php也得删,否则新定义的路由不会生效
最常被跳过的其实是 public/.htaccess 在 Nginx 下完全无效,以及误以为 index.php 能自动识别部署路径 —— TP5 的 BASE_PATH 和 ROOT_PATH 全靠入口文件位置反推,挪错一格,整个框架就找不到自己家在哪。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!










