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.eot
fileInfo->getExtension = eot
fileInfo->getFilename = montserrat-v14-latin-700.eot
fileInfo->getPath = /var/task/assets/fonts
fileInfo->getPathname = /var/task/assets/fonts/montserrat-v14-latin-700.eot
fileInfo->getRealPath = /var/task/assets/fonts/montserrat-v14-latin-700.eot
fileInfo->__toString = /var/task/assets/fonts/montserrat-v14-latin-700.eot
directoryIterator->getBasename = assets
directoryIterator->getExtension =
directoryIterator->getFilename = assets
directoryIterator->getPath = /var/task
directoryIterator->getPathname = /var/task/assets
directoryIterator->getRealPath = /var/task/assets
directoryIterator->__toString = assets
filterIterator->getBasename = montserrat-v14-latin-700.eot
filterIterator->getExtension = eot
filterIterator->getFilename = montserrat-v14-latin-700.eot
filterIterator->getPath = /var/task/assets/fonts
filterIterator->getPathname = /var/task/assets/fonts/montserrat-v14-latin-700.eot
filterIterator->getRealPath = /var/task/assets/fonts/montserrat-v14-latin-700.eot
filterIterator->__toString = montserrat-v14-latin-700.eot
Hope it’s useful to someone!