|
php.net | support | documentation | report a bug | advanced search | search howto | statistics | random bug | login |
[2009-05-22 10:30 UTC] petercowburn at gmail dot com
Description:
------------
It appears that using PHP5.3.0RC2-dev the SplFileInfo::getPathinfo method just returns the SplFileInfo object on which it was called rather than an SplFileInfo object for its path.
Reproduce code:
---------------
<?php
$info = new SplFileInfo('/usr/bin/php');
$parent_info = $info->getPathInfo();
var_dump($parent_info->getRealPath());
?>
Expected result:
----------------
string(8) "/usr/bin"
Actual result:
--------------
string(12) "/usr/bin/php"
PatchesPull RequestsHistoryAllCommentsChangesGit/SVN commits
|
|||||||||||||||||||||||||||||||||||||
Copyright © 2001-2025 The PHP GroupAll rights reserved. |
Last updated: Fri Oct 24 07:00:01 2025 UTC |
I downloaded a recent snap of PHP 5.3 (200906162030) which gives me PHP 5.3.0RC4 and amended the method definition which was using spl_filesystem_object_get_pathname rather than spl_filesystem_object_get_path. With that function name changed, the call to SplFileInfo::getPathInfo now appears to work as expected from the description given in the documentation. Reproduce code: --------------- <?php $info = new SplFileInfo('/usr/bin/php'); $parent_info = $info->getPathInfo(); var_dump($parent_info->getRealPath()); ?> Expected result: ---------------- string(8) "/usr/bin" Actual result: ---------------- string(8) "/usr/bin" Diff file: ---------- Index: spl_directory.c =================================================================== RCS file: /repository/php-src/ext/spl/spl_directory.c,v retrieving revision 1.45.2.27.2.23.2.43 diff -u -u -r1.45.2.27.2.23.2.43 spl_directory.c --- spl_directory.c 4 Jun 2009 14:46:26 -0000 1.45.2.27.2.23.2.43 +++ spl_directory.c 16 Jun 2009 22:13:45 -0000 @@ -1176,7 +1176,7 @@ if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "|C", &ce) == SUCCESS) { int path_len; - char *path = spl_filesystem_object_get_pathname(intern, &path_len TSRMLS_CC); + char *path = spl_filesystem_object_get_path(intern, &path_len TSRMLS_CC); if (path) { spl_filesystem_object_create_info(intern, path, path_len, 1, ce, return_value TSRMLS_CC); }Also behavior has changed since 5.2 (where it at least behaved according to documentation): weirdan@virtual-debian:/home/sam/trunk$ php -r 'var_dump(phpversion()); $f = new SplFileInfo("/usr/bin/php5"); $d = $f->getPathInfo(); var_dump($d->getRealPath());' string(8) "5.2.12-2" string(8) "/usr/bin" weirdan@virtual-debian:/home/sam/trunk$ sudo update-alternatives --set php /usr/local/php/bin/php # switch to 5.3.1 update-alternatives: using /usr/local/php/bin/php to provide /usr/bin/php (php) in manual mode. weirdan@virtual-debian:/home/sam/trunk$ php -r 'var_dump(phpversion()); $f = new SplFileInfo("/usr/bin/php5"); $d = $f->getPathInfo(); var_dump($d->getRealPath());' string(5) "5.3.1" string(13) "/usr/bin/php5" weirdan@virtual-debian:/home/sam/trunk$ ls -l /usr/bin/php5 -rwxr-xr-x 1 root root 5261500 Jan 11 19:36 /usr/bin/php5 The likely cause is the 'fix' for the http://bugs.php.net/bug.php?id=45345 (which should have been rejected as RTFM I believe).