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.
1
2 3 4 use Symfony\Component\Filesystem\Path;
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:
1
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:
1
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.
Sponsor the Symfony project.
Login to add comment
Other posts in this group

Symfony is turning 20 and we’re throwing a party you won’t want to miss! 🥳
Join us for an unforgettable evening of drinks, music, and great company at the Kanarie Club in Amsterdam!
This year

This week, the upcoming Symfony 7.4 version improved the Serializer component by adding more prefix support to the accessor, added more code to make the JsonPath component RFC compliant, and added sup

This week, Symfony unveiled the Symfony AI initiative, a set of components and bundles designed to bring powerful AI capabilities directly into your PHP applications. In addition, we published travel

Today we are happy to announce a new Symfony initiative called Symfony AI - with the goal to provide a comprehensive set of components and bundles designed to bring powerful AI capabilities directly i

SymfonyCon Amsterdam 2025, our next annual international Symfony conference, will take place on:
November 25 & 26: 2 workshops days with several topics to learn, practice and improve your skills

This week, development on the upcoming Symfony 8.0 version continued with the removal of deprecated features and the marking of several classes as final. In addition, we published two new case studies

At Wide, Micropole’s digital agency, they help leading brands modernize their digital infrastructures while ensuring scalability, security, and performance. When Audi France approached them to migrate