今天碰到个需求,需要编译某个目录下的所有 .php 文件(怎么感觉这种场景碰到过好多次,不同的公司项目中,都碰到过。。,但一直也没有总结过一个好的方法)
不想再写了。。。另外是感觉自己写出来的太弱了。。。所以就上网搜索,看有没有。一搜就是一般的递归方法,也没细看,想着看laravel有没有高大上的代码。
定位到了 laravel 官方文档:
文件系统/云存储:Storage
(再吐槽下:可见之前看文档有多不仔细...可能也是当时觉得没啥用,没啥印象吧!)
仔细一看,很强大啊!递归所有文件、所有目录,支持不同驱动,文件的操作,文件的写入、追加,应该是我们想到的,人家估计都实现了!
github地址:
https://github.com/thephpleague/flysystem
官网:
https://flysystem.thephpleague.com
laravel的storage使用的就是它,文档地址:
http://laravelacademy.org/post/3181.html
具体文档就不看了,内容太多,先解决我当前的问题。过一遍文档:
配置:
config/filesystems.php
默认的驱动是 'local',默认的目录的根路径是 'storage_path('app')'
/*
注意:
根路径是 'storage/app',所以我们的 '/' === 'storage/app',且操作文件范围都不能超过 'storage/app/',否则报错!
Path is outside of the defined root
解决方法:
很多时候,我们可能需要存储到不同的目录,我们总不能修改 '默认配置'。
所以,我们可能更想动态的修改默认的 '根目录',查看了下 laravel/Filesystem,未提供接口!所以,我们只能自己在调用前,修改默认配置:
使用config($key, $default),我们来修改默认的配置项
config(['filesystems.drivers.local.root' => base_path()])
// laravel公共函数,提供了该函数,可以参看源码
*/
方法:
1.获取其他驱动
Storage::disk('local');
Storage::disk('local')->get('avatar.jpg'); // 在local驱动下,获取avatar.jpg文件内容
2.如果使用默认驱动,可省略 disk('local')
Storage::get('avatar.jpg');
3.get() - 获取文件内容,返回文件的 '原生字符串'
4.exists('avatar.jpg') - 文件是否存在
5.size('avatar.jpg') - 获取文件大小,单位为 '字节'
6.lastModified('avatar.jpg') - 文件最后一次修改时间,'unix时间戳'
7.put('avatar.jpg', $content) - 写入文件,支持 '内容写入'
put('avatar.jpg', $resource) - 写入文件,支持 '资源写入'(处理大文件时,推荐使用文件流)
8.copy('old.txt', 'new.txt') - 复制文件
9.move('old.txt', 'new.txt') - 移动文件
10.prepend('file.txt', '头追加') - 插入内容到文件头部
11.append('file.txt', '尾追加') - 插入内容到文件尾部
12.delete('file.txt') - 删除单个
delete(['1.txt', '2.txt']); - 删除多个
13.files('test')- 获取目录下所有文件
14.allFiles('test') - '递归' 获取目录下所有文件
15.directories('test') - 获取目录下所有目录
16.allDirectories('test') - '递归' 获取目录下所有目录
17.makeDirectory('test') - 创建目录。支持 '递归创建' makeDirectory('test/dong/xue/min')
18.deleteDirectory('test') - 删除目录。注意:!!移除目录下的所有文件和目录!!
/*
注意:
laravel的文件系统处理,使用的是 'thephpleague/flysystem',提供的api进行过封装,并非是 'thephpleague/flysystem' 默认的方法!2个不同!
要想使用原生的 'thephpleague/flysystem' 方法,不能使用 Storage,2者不同!
*/
laravel文件系统操作笔记
最新推荐文章于 2023-03-09 13:59:15 发布