我是Flysystem的新用户.

开始之前,我正在try 使用Local适配器在现有的php应用程序中编写文件.

我正在使用这种方法设置适配器/文件系统:

$adapter = new LocalFilesystemAdapter('/');
$filesystem = new Filesystem($adapter);

当我来写这些文件时,我提交了这条指令:

filesystem->write('/var/www/html/public_html/files/'.$file_name, $file_content);

但是,这不会产生错误,也不会产生保存的文件.

我跟踪了写操作的执行过程,结果发现当它到达@file_put_contents步(LocalFileSystemAdapter.php的第123行)时,提供的路径是var/www/html/public_html/files/'.$file_name(即提供了什么,但缺少开口/).

因此,file_put_contents指令将输出写入relative path,而不是写入所提供/所需的路径.

如何更改内容以使Flysystem写入所需的路径?

提前感谢您所能提供的任何指导. 写入文件的try 失败,因为写入路径不正确.

推荐答案

你不应该在写的时候提供完整的路径,你错误地使用了Flysystem.


…是filesystem abstraction layer(它抽象出如何存储数据和在哪里存储数据的细节).为了在代码中正确分离关注点,您希望代码不知道数据的确切存储位置(位置是什么,媒介是什么等FlySystem如果您想要切换到其他存储设备.)

在编写文件时,您的代码应该忽略您试图使用的适配器.如果你说,有一天,决定切换到云,理论上切换就像在配置中更改文件系统的适配器一样简单--您不必对代码进行任何更改.

根据设计,Flysystem在file keys(write方法的第一个参数)上操作.要写入文件,您应该:

// configure where to store your data
$adapter = new LocalFilesystemAdapter('/var/www/html/public_html/files');

// instantiate the abstraction layer
$filesystem = new Filesystem($adapter);

// store the data using the abstraction
$filesystem->write('test.txt', 'file contents');

这将在/var/www/html/public_html/files目录中创建一个名为test.txt的文件.

您的file keys还可以包含"目录":

$filesystem->write('textfiles/test.txt', 'file contents');

这将在/var/www/html/public_html/files/textfiles目录中创建一个名为test.txt的文件.试试看!

如果您决定使用,即AwsS3V3Adapter,Flysystem将在您的AWS存储桶中创建textfiles/test.txt个文件.

要读取创建的文件,您必须使用与写入文件相同的file key:

echo $filesystem->read('file.txt');

额外提示:您可以定义多个来源,例如

  • 将用户缩略图保留在您的Web服务器上
  • 将发票放在AWS S3存储桶内
  • 在您的测试套件中,可以使用"in Memory"存储

参考资料:

Php相关问答推荐

提交表格后的重定向不起作用

LaravelEloquent 的地方条件父/子与第三模型多对多

PHP如何将ARRAY_MAP与Reset()配合使用

如何删除WordPress用户的个人资料描述或其他个人资料字段中的链接?

Laravel Livewire如何在数组值上使用IF、ELSE条件

如何在WooCommerce产品子类别中显示特定内容

将SVG包含在另一个php生成的SVG中

如何在UML类图中可视化变量引用数组

在WooCommerce中只允许高价产品的BACS付款

无法在Laravel中将日志(log)通道设置为空

Select 本地提货时隐藏WooCommerce显示的发货成本

多个产品类别 Select 自定义 WooCommerce 插件设置页面

使用 Spomky Labs JWT 框架中的 verifyWithKey 验证 id_token JWT 的签名需要 30 秒以上

如何为自定义帖子类型的自定义角色提供功能

使用 Composer 找不到 Google APIClient 类

同一页面上多个组件的 Livewire 分页问题

php preg_match 验证 Tiktok 用户名

Shopware 6:无法在新的自定义插件中保存关联字段(媒体)

正则表达式抓取递归括号的内容

我正在使用 Baryryvdh/laravel-snappy 从 HTML 导出 PDF 它正在工作但缩小了 pdf 文件