selene / filesystem
selene filesystem
Requires
- php: >=5.4.0
- selene/common: dev-development
Requires (Dev)
- league/phpunit-coverage-listener: dev-master
- selene/testsuite: dev-development
This package is not auto-updated.
Last update: 2016-02-07 09:58:51 UTC
README
设置
<?php use Selene\Components\Filesystem\Filesystem; $filesystem = new Filesystem();
用法
删除文件
unlink()
用于删除文件。
<?php $filesystem->unlink('/path/source_file.jpg'); // or $filesystem->remove('/path/source_file.jpg');
修改和访问文件的修改时间
<?php // Sets the current time for `filemtime` and `fileatime`. // If the file doesn't exists, it will be created. $filesystem->touch('/path/target_file.jpg'); // Set modification and accesstime explicitly. $filesystem->touch('/path/target_file.jpg', $time, $atime);
确保文件存在
ensureFile()
基本上与touch
相同,除非文件不存在。
<?php $filesystem->ensureFile('/path/target_file.txt');
将内容写入文件
setContents()
将内容写入文件。setContents()
接受第二个参数$writeFlags
,请参阅file_put_contents flags。
如果文件不存在,它将被创建。
<?php $filesystem->setContents('/path/target_file.txt', 'some content');
获取文件内容
getContents()
将文件内容写入。它接受第二个参数$readFlags
,请参阅file_get_contents flags。
<?php $filesystem->getContents('/path/target_file.txt'); // returns 'some content'
创建目录
mkdir()
尝试创建目录。该方法接受第二个布尔参数,表示是否递归创建目录(默认为true
)。
<?php $filesystem->mkdir('/path/target_dir');
但是,如果目标已存在,则会抛出IOExecption
异常。如果您想确保只有在目录不存在时才创建目录,可以使用Filesystem::ensureDirectory
。
<?php $filesystem->ensureDirectory('/path/target_dir');
删除目录
<?php $filesystem->rmdir('/path/source_dir'); // or $filesystem->remove('/path/source_dir');
列出目录
<?php $filesystem ->directory('/path/dir') // returns an instance of Selene\Components\Filesystem\Directory ->get(); // returns an instance of Selene\Components\FileCollection
复制文件或目录
copy()
创建文件或目录及其所有内容的镜像。第二个$target
参数是可选的。如果省略,copy()
将在当前目录的上下文中创建一个新的唯一文件名。
<?php $filesystem->copy('/target', '/source'); $filesystem->copy('/target'); // creates '/target copy 1' $filesystem->copy('/target'); // creates '/target copy 2' // define the copy prefix $filesystem->setCopyPrefix('Kopie'); $filesystem->copy('/target'); // creates '/target Kopie 1'
处理文件权限
所有posix方法chmod()
、chwon()
、chgrp()
都接受第三个布尔参数$recursive
,表示是否更改所有子目录的权限设置。
更改文件或目录的读写权限
<?php // for files: $filesystem->chmod('target_file', 0644); // for directories: $filesystem->chmod('target_dir', 0777, true);
更改文件或目录的所有权
<?php // for files: $filesystem->chown('target_file', 'new_owner'); // or $filesystem->chown('target_file', 500 /*the uid*/); // for directories: $filesystem->chown('target_dir', 'new_owner', true);
更改文件或目录的组
<?php // for files: $filesystem->chgrp('target_file', 'new_group'); // or $filesystem->chgrp('target_file', 20 /*the gid*/); // for directories: $filesystem->chgrp('target_dir', 'new_group', true); // or $filesystem->chgrp('target_dir', 20 /*the gid*/, true);
使用umask设置适当的文件权限
<?php // for files: $filesystem->mask('target_file'); // or $filesystem->mask('target_file', 0666); // for directories: $filesystem->mask('target_dir'); // or $filesystem->mask('target_file', 0755);
TODO:处理文件和目录
目录对象Directory
目录对象提供了一些方便的、可链式调用的方法,用于与文件系统交互。它还允许列出其根路径的数组表示。目录对象和文件对象都实现了可数组和可JSON化的接口,提供了toArray()
和toJson()
方法。
可链式调用的方法有:remove()
、mkdir()
、rmdir()
、chmod()
、chown()
、chgrp()
、in()
、notIn()
、filter()
。
文件对象 File
这些方法是可链式的:remove()
、mkdir()
、rmdir()
、chmod()
、chown()
、chgrp()
。
创建文件或目录对象
<?php use Selene\Components\Filesystem\File; use Selene\Components\Filesystem\Directory; use Selene\Components\Filesystem\Filesystem; // get an instance of `Selene\Components\Filesystem\Directory` $dir = $filesystem->directory('/path/target_dir'); // or $dir = new Directory(new Filesystem, '/path/target_dir'); // get an instance of `Selene\Components\Filesystem\File` $file = $filesystem->file('/path/target_file'); // or $file = new File(new Filesystem, '/path/target_file');
创建文件集合
<?php // Get the directory contents as `FileCollection` instance: $collection = $filesystem->directory('/path/target_dir') ->get(); // Get contents from a certain subdirectory or subdirectories: $collection = $filesystem->directory('/path/target_dir') ->in(['sub_a', 'sub_b']) ->get(); // Exclude subdirectories: $collection = $filesystem->directory('/path/target_dir') ->notIn(['sub_c', 'sub_d']) ->get(); // Filter for files: // By now, `filter takes an arbitrary regeular expression. Glob matching is // planed for the future. ` $collection = $filesystem->directory('/path/target_dir') ->in(['images']) ->filter('.*\.(jpe?g|png|gif)$') ->get();
<?php foreach ($collection as $fileName => $fileInfo) { if ($fileInfo->isDir()) { // ... } if ($fileInfo->isFile()) { // ... } }
<?php // export collection to an array: $collection->toArray(); // export collection to json $collection->toJson();
{ ".": { "%directories%": { "source_tree": { "name": "source_tree", "path": "\/files\/source_tree", "lastmod": 1375118383, "type": "dir", "owner": 501, "group": 20, "%directories%": { "nested_subtree": { "name": "nested_subtree", "path": "\/files\/source_tree\/nested_subtree", "lastmod": 1375118383, "type": "dir", "owner": 501, "group": 20 } }, "%files%": { "bar.txt": { "name": "bar.txt", "path": "\/files\/source_tree\/bar.txt", "lastmod": 1375118383, "type": "file", "owner": 501, "group": 20, "extension": "txt", "mimetype": "text\/plain" } } } } } }