不能把 TP6 项目根目录直接扔进 htdocs,必须让 Web 服务器指向 public/ 子目录,否则会暴露敏感文件、报 404 或 500 错误;因 TP6 入口统一为 public/index.php,且 config、app 等目录若被 Web 直接访问将导致严重安全隐患。

直接说结论:不能把 TP6 项目根目录直接扔进 htdocs,必须让 Web 服务器指向 public/ 子目录,否则会暴露敏感文件、报 404 或 500 错误。
为什么访问 http://localhost/tp6 会出错
ThinkPHP 6 的入口文件 index.php 不在项目根目录,而在 public/ 下。XAMPP 默认把 htdocs 当作 Web 根,如果把整个 TP6 项目(含 app/、config/、vendor/)放进去,用户就能直接访问 http://localhost/tp6/config/database.php —— 这是严重安全隐患。
常见错误现象包括:
- 浏览器显示 “No input file specified.” 或空白页
- 打开
http://localhost/tp6报 404,但http://localhost/tp6/public/index.php能显示 “Hello ThinkPHP6” - Apache 日志中出现
PHP Warning: require(): open_basedir restriction in effect
正确配置 Apache 的 DocumentRoot(Windows/macOS/Ubuntu 通用)
不推荐改全局 htdocs,而是为 TP6 单独配一个虚拟路径,更安全也更清晰。
立即学习“PHP免费学习笔记(深入)”;
以 Windows 为例(macOS 和 Ubuntu 路径稍作替换即可):
- 编辑
D:\xampp\apache\conf\httpd.conf(或 macOS 的/Applications/XAMPP/etc/httpd.conf) - 找到
DocumentRoot和<Directory>两处,改成指向 TP6 的public目录:DocumentRoot "D:/xampp/htdocs/tp6/public" <Directory "D:/xampp/htdocs/tp6/public">
- 确保
AllowOverride All已启用,否则.htaccess重写规则不生效 - 重启 Apache
改完后,http://localhost 就直接对应 TP6 入口,无需再拼 /public/index.php。
composer create-project 执行失败的三个高频原因
不是网络慢,而是环境没对齐。重点检查以下三点:
-
php.exe路径是否被 Composer 正确识别?安装时务必勾选Add this PHP to your path,或手动运行composer config -g bin-dir确认 PHP 可执行路径 - 权限问题:macOS/Linux 下,
htdocs目录需有写权限,执行sudo chmod -R 777 /Applications/XAMPP/htdocs(仅开发机,勿用于生产) - 版本锁死:教程常用
topthink/think=6.0.6,但该版本已停止维护。如需长期维护,应改用topthink/think(自动拉最新稳定版),并确认 PHP 版本 ≥ 7.2.5
绕过 Composer 的临时方案(仅限调试)
当公司网络完全屏蔽 Packagist 时,可跳过 Composer,但必须严格保证目录结构:
- 从团队 NAS 下载
thinkphp6.0.6.zip(密码yunzhi.club) - 解压后重命名为
tp6,放入htdocs,确保路径为:htdocs/tp6/public/index.php - 手动创建
tp6/runtime目录,并设为可写(Windows 右键 → 属性 → 去掉只读;macOS/Linux 执行chmod 777 tp6/runtime) - 不要删
tp6/public/.htaccess,它负责隐藏index.php路径
这个方案能跑通,但后续装扩展(比如 phpoffice/phpspreadsheet)仍必须用 Composer —— 它不是可选项,是 ThinkPHP 6 生态的基础设施。



















