Whilst PHP’s documentation of SplFileInfo isn’t “bad” as such, it can be tricky to remember what string functions (such as getBasename, getExtension, getFilename, getPath, getPathname, getRealPath and __toString) return under which circumstances. Hence this post!
To generate this data, we’re going to start off with a RecursiveDirectoryIterator with an optional callback filter (to enable us to later on, filter the returned values):
<?php
$directoryIterator=new \RecursiveDirectoryIterator(
'/var/task', // test directory
\RecursiveDirectoryIterator::SKIP_DOTS // ignore "dot files"
);
$filterIterator = new \CallbackFilterIterator(
new \RecursiveIteratorIterator($directoryIterator),
function (\SplFileInfo $file) {
// add filter conditions here
return true;
});
/** @var \SplFileInfo $fileInfo */
foreach ($filterIterator as $fileInfo) {
$objectNames= [
'fileInfo',
'directoryIterator',
'filterIterator'
]; // which objects (defined above) are we interested in
$methods = [
'getBasename',
'getExtension',
'getFilename',
'getPath',
'getPathname',
'getRealPath',
'__toString'
]; // which methods of those objects do we want to get.
foreach ($objectNames as $objectName) {
foreach ($methods as $method) {
print $objectName . '->' .
$method . ' = ' .
call_user_func([$$objectName, $method]) .
PHP_EOL;
}
}
die(); // we only want the first one as an example
}
Give the file /var/task/assets/fonts/montserrat-v14-latin-700.eot and the “start” directory of /var/task , we get the following:
fileInfo->getBasename = montserrat-v14-latin-700.eotfileInfo->getExtension = eotfileInfo->getFilename = montserrat-v14-latin-700.eotfileInfo->getPath = /var/task/assets/fontsfileInfo->getPathname = /var/task/assets/fonts/montserrat-v14-latin-700.eotfileInfo->getRealPath = /var/task/assets/fonts/montserrat-v14-latin-700.eotfileInfo->__toString = /var/task/assets/fonts/montserrat-v14-latin-700.eotdirectoryIterator->getBasename = assetsdirectoryIterator->getExtension =directoryIterator->getFilename = assetsdirectoryIterator->getPath = /var/taskdirectoryIterator->getPathname = /var/task/assetsdirectoryIterator->getRealPath = /var/task/assetsdirectoryIterator->__toString = assetsfilterIterator->getBasename = montserrat-v14-latin-700.eotfilterIterator->getExtension = eotfilterIterator->getFilename = montserrat-v14-latin-700.eotfilterIterator->getPath = /var/task/assets/fontsfilterIterator->getPathname = /var/task/assets/fonts/montserrat-v14-latin-700.eotfilterIterator->getRealPath = /var/task/assets/fonts/montserrat-v14-latin-700.eotfilterIterator->__toString = montserrat-v14-latin-700.eot
Hope it’s useful to someone!