在Laravel中,chmod():操作不允许。

10

在本地主机上使用 Laravel 上传图片时,使用 chmod() 函数出现“操作不允许”的错误。已启用 GD 库。测试环境为 Ubuntu 16.04 和 Windows 10(WSL)。


你尝试过以管理员身份登录吗? - Sithira
需要更多信息。 - bxN5
看一下堆栈跟踪,chmod 的文件或文件夹可能属于除 Web 服务器守护程序用户之外的其他人。 - Alex Barker
4个回答

23

我刚遇到了同样的问题。我不知道为什么会发生这种情况,但在我的情况下,运行composer dumpautoload解决了这个问题。


5

我正在使用 Laravel 8、Docker Desktop 4.2.0 (运行在 Ubuntu-20.04 上) 以及 Windows 10 上的 WSL2。

在成功清理了 Docker 容器中 Laravel 缓存文件之后,我遇到了相同的错误:

sail artisan optimize:clear

重新提交并在浏览器上重新加载应用程序后,它报告了一些文件系统错误。跟踪日志指向 Laravel 尝试执行 chmod() 命令并返回错误的一行。

chmod(): Operation not permitted

我尝试运行
sail composer dumpautoload

在我的 Docker 容器内部,运行了一段时间后,命令行报告了相同的“chmod(): 操作不允许”错误。

以下命令拯救了我的一天:

docker run --rm \
    -u "$(id -u):$(id -g)" \
    -v $(pwd):/var/www/html \
    -w /var/www/html \
    composer dumpautoload

只需将它们复制并粘贴到运行sail命令的命令行中,然后按回车键即可。在最后一个composer命令完成后,您现在可以访问应用程序,而无需chmod()标记错误。

警告:在运行上述命令之前,请备份修改过的 Laravel 文件,特别是routes/web.php

更新

通过表单上传文件时出现 chmod(): Operation not permitted 的问题。这个问题可能是由于通过composer安装多个依赖项而不经意间导致目录结构/信息发生了变化所致。

此外,Laravel 应用程序的 Docker 容器和 Docker 镜像由 Laravel Sail 管理。当您运行 sail up 时,Sail 会为应用程序设置用户访问策略。它会在应用程序启动时为 docker 镜像创建新用户,并将其关联到组中。您可以通过运行以下命令进行确认:

sail artisan sail:publish

检查在你的应用程序根目录中生成的docker文件夹中的Docker文件。它们实际上被Sail用于启动新的应用程序容器。

解决方案

如果你有类似于我的设置,并且遇到chmod(): Operation not permitted错误;只需停止Sail:

sail stop

等待所有容器停止运行,然后将其重新启动:

sail up

1
"sail stop && sail up" 对我来说有效;这是因为我使用 Docker Destop 启动容器,而不是使用 "sail up" 命令。 - Kheng

2

请验证Apache服务用户是否有访问您的应用程序文件夹的权限。

尝试以下方法:

chown -R www-data /var/www/laravel-project

无论何处,www-data 都是运行 Apache2 服务的用户。原始答案翻译成“最初的回答”。

这个答案存在与chmod 0777相同的问题。 - Alex Barker

0

我在使用Docker和Sail运行Laravel时遇到了同样的问题。(在Windows上使用WSL)。对于我来说,通过在Linux命令行界面(如果你在Windows上使用,可以通过安装和运行wsl命令打开)中添加此别名来解决了这个问题:

 alias sail='[ -f sail ] && sh sail || sh vendor/bin/sail'

然后在运行任何命令之前,只需在其前面添加 sail。 像这样:

sail composer install

或者

sail php artisan migrate

来源:Laravel 文档


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接