New in Symfony 5.4: Filesystem Path Class
Contributed by
Théo FIDRY
in #41954.
The Filesystem component is a small utility component that provides functions
related to the filesystem which are independent of the underlying operating system.
Its scope is small, but it’s so convenient that it has more than 200 million downloads.
In Symfony 5.4 we’re improving this component by adding a new Path class.
This class provides utilities to manipulate file/dir paths in a consistent manner.
For example, it includes a canonicalize() method that normalizes slashes,
resolves `..` segments, etc.
2
3
4
use SymfonyComponentFilesystemPath;
echo Path::canonicalize(‚../uploads/../config/config.yaml‘);
// => ../config/config.yaml
PHP provides a dirname() function to get the directory path of a given file
path, but it has some quirks. The Path class provides a getDirectory()
method as an alternative:
2
3
4
5
6
7
dirname(‚C:/Programs‘); // returns ‚C:‘, not ‚C:/‘
dirname(‚C:/‘); // returns ‚.‘, not ‚C:/‘
Path::getDirectory(‚C:/‘); // returns ‚C:/‘
Path::getDirectory(‚C:/Programs‘); // returns ‚C:/‘
Path::getDirectory(‚C:\‘); // returns ‚C:/‘
Path::getDirectory(‚C:\Programs‘); // returns ‚C:/‘
This class includes many other utilities that come in handy in web applications,
such as finding the longest common part of some file paths:
2
3
4
5
6
7
8
9
10
$paths = [
‚/var/www/vhosts/project/httpdocs/config/config.yaml‘,
‚/var/www/vhosts/project/httpdocs/config/routing.yaml‘,
‚/var/www/vhosts/project/httpdocs/config/services.yaml‘,
‚/var/www/vhosts/project/httpdocs/images/banana.gif‘,
‚/var/www/vhosts/project/httpdocs/uploads/images/nicer-banana.gif‘,
];
Path::getLongestCommonBasePath($paths);
// return ‚/var/www/vhosts/project/httpdocs‘
Do you want to sponsor the Symfony Filesystem component? Thanks to the new
Symfony sponsoring program your company logo can be displayed next to the
Filesystem component on GitHub and symfony.com. Browse Symfony support,
select the „Symfony Backers“ option and send us a message to get more details.
Symfony Blog
Read More