结论是权限问题:当前用户或php进程用户(如www-data)对runtime/或vendor/无写权限,导致mkdir() permission denied;需用chown -r www-data:www-data runtime/和chmod -r 755 runtime/赋权,禁用selinux或配置上下文,勿用777。

直接说结论:不是命令写错了,而是当前用户对目标目录没写权限,或者 PHP 进程运行用户(如 www-data、nginx、apache)无法写入 runtime/ 或创建 vendor/。
composer create-project 报 mkdir() Permission denied
这是最典型的权限错误,现象是命令执行到一半卡住或报错,末尾带 mkdir(): Permission denied。根本原因不是 Composer 本身没权限,而是它试图在当前目录下建 vendor/ 和 runtime/ 时被系统拒绝。
- 先确认你执行命令的当前目录可写:
ls -ld .看是否含w权限;若属主不是你,用chown -R $USER:$USER ./myapp改归属 - 别在
/var/www或宝塔网站根目录这种默认只给 web 用户写的路径下直接跑create-project;换到家目录(如~/projects)先装好,再整体挪过去 - 如果非得在 web 目录装,加
sudo不解决问题——sudo composer create-project会以 root 身份生成文件,但后续 PHP 进程(www-data)仍无法读写runtime/
装完访问空白页,日志里写“runtime目录不可写”
安装成功 ≠ 能运行。TP6 启动时要往 runtime/ 写日志、缓存、模板编译文件,一旦失败就静默退出,浏览器只显示空白或 500,且不报具体错误。
-
runtime/必须由 PHP 进程实际运行用户可写,不是当前 shell 用户。查 PHP 进程用户:ps aux | grep 'php-fpm\|apache\|nginx',常见为www-data(Ubuntu/Debian)、nginx(CentOS)、apache - 正确赋权命令是:
chown -R www-data:www-data runtime/(按你实际用户改),然后chmod -R 755 runtime/;不要无脑chmod 777,有安全风险 - Windows 下用 IIS 或 PHP-CGI 时,注意「应用程序池标识」或「PHP 运行用户」是否有该目录的「修改」权限,光勾「读取」不够
宝塔面板里安装失败,提示 proc_open()、putenv() 被禁用
这不是权限错误,而是 PHP 配置层面的函数禁用。宝塔默认出于安全考虑,把一些系统调用函数拉黑了,而 Composer 安装 TP6 必须用到它们。
- 进宝塔 → 软件管理 → 找到你用的 PHP 版本 → 设置 → 禁用函数 → 把
proc_open、putenv、passthru这三个删掉 - 删完重启 PHP 服务(不是重启面板),再回到对应网站根目录下运行
composer create-project "topthink/think:^6.1" .(注意末尾的.表示当前目录) - 如果还报
fileinfo缺失,回宝塔 PHP 设置 → 安装扩展 → 勾上fileinfo
Linux 下 chmod 755 runtime/ 还是不行?检查 SELinux
CentOS/RHEL 系统默认开启 SELinux,它会在文件权限之外再加一层策略控制。即使 chmod 和 chown 都对了,SELinux 仍可能阻止 httpd/nginx 写 runtime/。
- 临时验证是否 SELinux 导致:
setenforce 0(设为 permissive 模式),再试访问;若恢复正常,就是它 - 永久解决:给
runtime/目录打上正确的上下文标签:semanage fcontext -a -t httpd_sys_rw_content_t "/path/to/myapp/runtime(/.*)?",再执行restorecon -Rv /path/to/myapp/runtime - 不熟悉 SELinux 的话,更稳妥的做法是关掉它(
vi /etc/selinux/config改SELINUX=disabled),但生产环境建议学着配策略而非直接关
真正容易被忽略的点是:权限问题从来不是孤立的。你改了 runtime/ 权限,却忘了 public/ 下的 .htaccess 或 Nginx 的 try_files 配置不对,照样 404;你开了 proc_open,却没清 Composer 缓存,依然拉不到正确包。每一步都得验证落地效果,而不是只看命令有没有报错。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











