Req #76702 [Fbk->Opn]: pathinfo's $options should have a value for DIRNAME + FILENAME
Edit report at https://bugs.php.net/bug.php?id=76702&edit=1
ID: 76702
Updated by: requinix@php.net
Reported by: jerry at jmweb dot net
-Summary: pathinfo's $options should accept a bitmask value
+Summary: pathinfo's $options should have a value for DIRNAME
+ FILENAME
-Status: Feedback
+Status: Open
Type: Feature/Change Request
Package: Filesystem function related
PHP Version: Irrelevant
Block user comment: N
Private report: N
New Comment:
Personally I would go for DIRFILE or DIRFILENAME - a combination of the DIRNAME and FILENAME
constants (and one that fits the current naming style) which should help users remember it.
Previous Comments:
------------------------------------------------------------------------
[2018-08-04 19:21:57] jerry at jmweb dot net
The output should follow the natural order of the file's path regardless of the order the
bitmask was created. So (PATHINFO_DIRNAME | PATHINFO_EXTENSION) would be identical to the
concatenation of pathinfo()'s matching indexes (['dirname'] . '/.' .
['extension']). The bitmask (PATHINFO_BASENAME | PATHINFO_FILENAME) would be normalized to
just (PATHINFO_BASENAME) and return only the equivalent of pathinfo()'s
(['basename']).
I now see that accepting a bitmask value will make things convoluted since:
PATHINFO_FILENAME | PATHINFO_EXTENSION -> same output as PATHINFO_BASENAME
PATHINFO_FILENAME | PATHINFO_BASENAME -> normalized to PATHINFO_BASENAME
PATHINFO_DIRNAME | PATHINFO_EXTENSION -> not useful
Introducing a new constant for the DIRNAME + FILENAME combination sounds like a better solution.
However, coming up an appropriate name escapes me at the moment. To kick-start the options, consider
these:
PATHINFO_FILEPATH
PATHINFO_FILENAMEPATH
PATHINFO_NO_EXTENSION
PATHINFO_EXTENSIONLESS
PATHINFO_DIRFILENAME
------------------------------------------------------------------------
[2018-08-04 13:47:32] a at b dot c dot de
The same way BASENAME is FILENAME+EXTENSION? It would fill a hole in the matrix:
dirname/filename.extension
------- -------- ********* EXTENSION
------- ******** --------- FILENAME
------- ******** ********* BASENAME
******* -------- --------- DIRNAME
******* ******** --------- ?[ROOTNAME? STEMNAME?]
(the remaining three dirname/filename/extension combinations aren't useful).
------------------------------------------------------------------------
[2018-08-04 07:08:40] requinix@php.net
So instead, how about a constant for the combined DIRNAME+FILENAME?
------------------------------------------------------------------------
[2018-08-04 06:45:37] a at b dot c dot de
How, for example, would (PATHINFO_DIRNAME | PATHINFO_EXTENSION) or (PATHINFO_BASENAME |
PATHINFO_FILENAME) be handled?
I'd be more inclined to write the test script as:
$path = '/dir/file.ext';
$newExt = '.ext2';
['dirname' => $dir, 'basename' => $file] = pathinfo($path);
$newPath = "$dir/$file$newExt";
But that may just be me.
------------------------------------------------------------------------
[2018-08-03 22:32:26] jerry at jmweb dot net
Description:
------------
Obtaining a file's path + filename is quite cumbersome using pathinfo() since the $options
argument accept one of a discrete set of values. It would be nice if we could supply a bitmask
instead.
A real-world case is caching output from .php pages. The web server routes /path/, to
/path/index.php and it saves it's own output to /path/index.html. The next request is then
served the contents of index.html directly by the web server.
I am not sure how difficult it would be to implement, but I see it useful.
Test script:
---------------
$path = '/dir/file.ext';
$newExt = '.ext2';
$newPath = pathinfo( $path, PATHINFO_DIRNAME ) . '/' . pathinfo( $path, PATHINFO_FILENAME
) . $newExt; // /dir/file.ext2
// if pathinfo could accept a bitmask
$newPathBitmask = pathinfo( $path, PATHINFO_DIRNAME | PATHINFO_FILENAME ) . $newExt; //
/dir/file.ext2
------------------------------------------------------------------------
--
Edit this bug report at https://bugs.php.net/bug.php?id=76702&edit=1
Thread (9 messages)