在本地主机上使用 Laravel 上传图片时,使用 chmod() 函数出现“操作不允许”的错误。已启用 GD 库。测试环境为 Ubuntu 16.04 和 Windows 10(WSL)。
我刚遇到了同样的问题。我不知道为什么会发生这种情况,但在我的情况下,运行composer dumpautoload
解决了这个问题。
我正在使用 Laravel 8、Docker Desktop 4.2.0 (运行在 Ubuntu-20.04 上) 以及 Windows 10 上的 WSL2。
在成功清理了 Docker 容器中 Laravel 缓存文件之后,我遇到了相同的错误:
sail artisan optimize:clear
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
请验证Apache服务用户是否有访问您的应用程序文件夹的权限。
尝试以下方法:
chown -R www-data /var/www/laravel-project
我在使用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 文档