<?php
namespace App\Filesystem;
use Illuminate\Filesystem\Filesystem as FilesystemBase;
class Filesystem extends FilesystemBase
{
public function put($path, $contents, $lock = false)
{
// don't pass the value of $lock to the parent method
return parent::put($path, $contents);
}
}
<?php
namespace App\Providers;
use App\Filesystem\Filesystem;
use Illuminate\Support\ServiceProvider;
class AppServiceProvider extends ServiceProvider
{
public function register()
{
$this->app->singleton('files', fn () => new Filesystem);
}
}
8条答案
按热度按时间bvk5enib1#
尝试删除路径中的以下代码行:
并将其替换为以下内容:
hpcdzsge2#
问题是主机不支持“exlusive锁”。我在Ubuntu主机上使用Vagrant时遇到了这个问题。那么你可以像这里描述的那样修复它:https://stackoverflow.com/a/35743592/2707570如果您在远程服务器上遇到问题,您需要联系提供商并询问为什么不支持独占锁。
ykejflvf3#
我最近也遇到过类似的问题。运行Artisan命令:php Artisan配置:缓存为我修复了它
cxfofazt4#
我在使用NFS将我的代码从开发人员计算机共享到Centos服务器时遇到了同样的错误。问题似乎是服务器试图使用默认的NLM锁定来访问我的NFS共享文件,因此我不得不在我的设置中禁用锁定。这是通过在
/etc/fstab
的NFS选项中添加nolock
来完成的这解决了我的问题
cld4siwp5#
在不支持独占file locks的系统上运行时会出现此问题。
独占锁或写锁授予进程对文件的指定部分进行写操作的独占访问权限。当写锁就位时,其他进程不能锁定文件的该部分。
出于数据安全原因,目前在Laravel有2个地方强制执行此类锁定:请注意,在这两个调用中,
Filesystem::put()
的第三个参数都是true
,这会导致它在写入之前尝试获取独占锁。解决这个问题的方法是让文件系统适配器不尝试锁定。一个答案中建议的方法是编辑Laravel的库文件。正如孩子们所说,这是一种头脑简单的方法。您的更改将在升级时丢失,因此必须持续管理。
而是编写您自己的自定义类,重写该方法,并将应用程序配置为使用它。
步骤1:使用这些内容创建
app/Filesystem/Filesystem.php
:步骤2:编辑
app/Providers/AppServiceProvider.php
来注册新的类。不要删除现有的注册,如果有的话,只添加以下注册:启动
php artisan tinker
并输入app('files')
,确认提供程序正在运行,您应该会得到新类的一个示例。nwnhqdif6#
按照这些步骤,当我尝试在我的Android平板电脑上运行laravel 9与termux时,解决了相同的问题。
只需将LOCK_EX更改为LOCK_SH即可。
0mkxixxg7#
1.必须通过关闭最初启动服务器时使用的批处理窗口来关闭服务器。
1.刷新浏览器并确保服务器已关闭。
1.通过键入
$ php artisan serve
启动新的开发服务器1.进入浏览器,输入由Artisan生成的服务器地址,通常为http://127.0.0.1:8000
7cjasjjr8#
最好的解决方案Laravel转到/laravel/framework/src/Illuminate/Filesystem/Filesystem. php删除内容函数“公共函数put($path,$contents,$lock = false)”第120行。完成