这个方便的文件名操作库使得文件名的操作变得简单

1.3.0 2023-09-17 02:04 UTC

This package is auto-updated.

Last update: 2024-09-17 04:14:11 UTC


README

~ 提供了一种简单操作文件名的方法。方便地更改路径、文件名主体和扩展名。

安装

FName 包含到您的项目的最佳方式是使用 Composer

composer require dixflatlinr/fname

细节... 我很匆忙

<?php
use \DF\App\FName\FName;
require 'vendor/autoload.php';

$f = FName::make('/easy/path/file.ext');            # /easy/path/file.ext
$f->path('/var/www')->body('%_readme')->ext('txt'); # /var/www/file_readme.txt

一般信息和术语

文件名有三个部分:一个 路径,一个 文件名主体,和一个 扩展名。您可以单独操作每一部分,而不会影响其他部分。每一部分都可以为空。

PATH

/var/www/filename.ext

  • 总是以斜杠结尾(如果省略,将自动插入)
  • 不允许有 null 字节

FILENAME BODY

/var/www/filename.ext

  • 不允许有 null 字节和斜杠

EXTENSION

/var/www/filename.ext

  • 不允许有 null 字节、斜杠和点

示例

<?php
use \DF\App\FName\FName;
require 'vendor/autoload.php';

$filename = '/hevy/path/filebody.info.ext';

实例化和查询部分

$f = FName::make($filename);  
$f = new FName($filename);  
$f = FName::makeByParts('/hevy/path/','filebody.info','ext');  
  
(string)$f; # /hevy/path/filebody.info.ext
$f->path;   # /hevy/path/
$f->body;   # filebody.info
$f->ext;    # ext
$f->extLong # info.ext

操作部分

FName::make('/hevy/path/filebody.ext')
->path('/var/www')           # /var/www/filebody.ext
->body('%.indy')             # /var/www/filebody.indy.ext
->ext('mp4');                # /var/www/filebody.indy.mp4
->filename('newfile.ext')    # /var/www/newfile.ext

FName::make('')
->set('/','readme','txt');   # /readme.txt

使用占位符生成文件名

FName::make('/var/www/pugs_attacking.jpg')
->gen('%Pnewfilename%X'); # /var/www/newfilename.jpg
/*  
* %A - Full filename => /var/www/pugs_attacking.jpg  
* %P - Path => /var/www/  
* %F - Filename (body and ext) => pugs_attacking.jpg
* %B - Filename body => pugs_attacking  
* %E - Filename extension without dot => jpg  
* %X - Filename extension with dot => .jpg  
* %L - Filename long extension => jpg
*/

标志

FLAG_DISABLE_PLACEHOLDER

占位符字符 (%) 不会被转换为文件名部分

FName::make('filename.ext', FName::FLAG_DISABLE_PLACEHOLDER)  
 ->body('%leftalone'); # %leftalone.ext  

FLAG_DISABLE_SMARTPATH

相邻路径目录分隔符将被保留原样

FName::make('',FName::FLAG_DISABLE_SMARTPATH)  
 ->path('/var/www//slashes///'); #/var/www//slashes///

特性

//A path, no filename  
$filename = '/var/www/whatever/';  
$f = new FName($filename);  
$this->assertEqualsCanonicalizing(['/var/www/whatever/','',''], [$f->path, $f->body, $f->ext]);  
  
//A path's last segment without an ending slash is interpreted as a filename  
$filename = '/var/www/whatever';  
$f = new FName($filename);  
$this->assertEqualsCanonicalizing(['/var/www/','whatever',''], [$f->path, $f->body, $f->ext]);  
  
//Full path, with filename, without extension  
$filename = '/var/www/whatever/filename';  
$f = new FName($filename);  
$this->assertEqualsCanonicalizing(['/var/www/whatever/','filename',''], [$f->path, $f->body, $f->ext]);  
  
//Full path, with filename and extension  
$filename = '/var/www/whatever/filename.ext';  
$f = new FName($filename);  
$this->assertEqualsCanonicalizing(['/var/www/whatever/','filename','ext'], [$f->path, $f->body, $f->ext]);
//double dots is a filename without extension (body only)  
$filename = '..';  
$f = new FName($filename);  
$this->assertEqualsCanonicalizing(['','..',''], [$f->path, $f->body, $f->ext]);  
  
//single dot is a filename without extension (body only)  
$filename = '.';  
$f = new FName($filename);  
$this->assertEqualsCanonicalizing(['','.',''], [$f->path, $f->body, $f->ext]);  
  
//lots of dots is still considered a filename without extension (body only)  
$filename = '......';  
$f = new FName($filename);  
$this->assertEqualsCanonicalizing(['','......',''], [$f->path, $f->body, $f->ext]);  
  
//lots of dots as body with an added extension - last dot is always consumed when separating the extension  
$filename = '......ext';  
$f = new FName($filename);  
$this->assertEqualsCanonicalizing(['','.....','ext'], [$f->path, $f->body, $f->ext]);  

//Multiple dots in filename
$filename = '/var/www/whatever/flying...pugs.plus.the.birds...ext';  
$f = new FName($filename);  
$this->assertEqualsCanonicalizing  
(  
 ['/var/www/whatever/','flying...pugs.plus.the.birds..','ext'],  
  [$f->path, $f->body, $f->ext]  
);