我是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相关问答推荐

如果WooCommerce中存在特定的运输方式,则隐藏其他运输方式

无法在Laravel/Vue停靠容器中启动MySQL

PHP日期操作,将多个日期输出为格式化字符串

在特定订单状态更改时自定义WooCommerce订单发货项目

ForHumans函数中的月当量与单位限制

基于不用于变体的产品属性隐藏多个WooCommerce发货方式

使用列入黑名单的单词和自定义业务逻辑的组合将特定的子字符串包装在HTML标记中

Symfony5:如何在不登录的情况下使API路由可访问?

Codeigniter 3中SMTP.office 365.com的截断问题

在PHP中处理Linux输入事件(/dev/input/Event*)

从字符串转换日期和/或时间时,Laravel转换失败

更改特定产品标签的 Woocommerce 产品名称

如何使用 AJAX、PHP 和 MYSQL 在 Select 项目时在文本框中填充数据

WooCommerce:如果购物车中已存在产品,则增加购物车商品数量

如何使用相同的变量使函数参数对于数组和字符串都是可选的

PDO 和 SQL 查询结果中日期格式不同的原因可能是什么?

在 laravel 中更新表单时如何在 Select 选项中保留旧值?

使用 splat 运算符时按引用传递 (...)

PHP - $_GET、$_POST、$_REQUEST、$_COOKIE 和其他内置请求变量可以安全地显示给访问者吗?

php中的通用枚举类型