ID: 44018
User updated by: jordan dot raub at dataxltd dot com
Reported By: jordan dot raub at dataxltd dot com
-Status: Feedback
+Status: Open
Bug Type: SPL related
Operating System: *
PHP Version: 5.3.0alpha2
Assigned To: colder
New Comment:
The bug was reintroduced.
$obj = new RecursiveDirectoryIterator(dirname(__FILE__), 0);
$obj->current(); //should return a RecursiveDirectoryIterator
$obj = new RecursiveDirectoryIterator(dirname(__FILE__));
$obj->current(); //should return a RecursiveDirectoryIterator
both of these return SplFileObjects.
So it looks like CURRENT_AS_FILEINFO and CURRENT_AS_SELF should be
switched. CURRENT_AS_SELF === 0?
Previous Comments:
------------------------------------------------------------------------
[2008-10-08 19:41:22] [EMAIL PROTECTED]
Using a test script testing some possibilities, I get such results:
Format is ($options) $key => type($val) when foreach'ing a
RecursiveDirectoryIterator with the following options.
Default:
() /home/colder/cvs/php5.2/ext/spl/doxygen.cfg =>SplFileInfo
Options = 0:
(0) /home/colder/cvs/php5.2/ext/spl/doxygen.cfg =>SplFileInfo
Options = CURRENT_AS_FILEINFO:
(0) /home/colder/cvs/php5.2/ext/spl/doxygen.cfg =>SplFileInfo
Options = CURRENT_AS_SELF:
(16) /home/colder/cvs/php5.2/ext/spl/doxygen.cfg
=>RecursiveDirectoryIterator
Options = CURRENT_AS_PATHNAME:
(32) /home/colder/cvs/php5.2/ext/spl/doxygen.cfg =>(string)
/home/colder/cvs/php5.2/ext/spl/doxygen.cfg
Options = KEY_AS_FILENAME:
(256) doxygen.cfg =>SplFileInfo
Options = KEY_AS_FILENAME|CURRENT_AS_FILEINFO:
(256) doxygen.cfg =>SplFileInfo
Options = NEW_CURRENT_AND_KEY:
(256) doxygen.cfg =>SplFileInfo
Options = KEY_MODE_MASK:
(3840) /home/colder/cvs/php5.2/ext/spl/doxygen.cfg =>SplFileInfo
This is consistent across 5.2, 5.3 and HEAD, and looks consistent to
me.
Where is the actual problem? Is it a regression? Documentation problem?
------------------------------------------------------------------------
[2008-10-08 18:17:26] [EMAIL PROTECTED]
Assigned to the maintainer..
------------------------------------------------------------------------
[2008-10-03 16:32:10] jordan dot raub at dataxltd dot com
this also got reintroduced to 5.3, tests fail w/ 5.3alpha2
------------------------------------------------------------------------
[2008-09-30 22:18:50] jordan dot raub at dataxltd dot com
patch....
diff php5.2-200809302030/ext/spl/spl_directory.c
php52/ext/spl/spl_directory.c
683,686c683
< } else if (SPL_FILE_DIR_CURRENT(intern,
SPL_FILE_DIR_CURRENT_AS_FILEINFO)) {
< spl_filesystem_object_get_file_name(intern TSRMLS_CC);
< spl_filesystem_object_create_type(0, intern,
SPL_FS_INFO, NULL, return_value TSRMLS_CC);
< } else {
---
> } else if (SPL_FILE_DIR_CURRENT(intern,
SPL_FILE_DIR_CURRENT_AS_SELF)) {
688a686,688
> } else {
> spl_filesystem_object_get_file_name(intern TSRMLS_CC);
> spl_filesystem_object_create_type(0, intern,
SPL_FS_INFO, NULL, return_value TSRMLS_CC);
966c966
< long flags =
SPL_FILE_DIR_KEY_AS_PATHNAME|SPL_FILE_DIR_CURRENT_AS_FILEINFO;
---
> long flags =
SPL_FILE_DIR_KEY_AS_PATHNAME|SPL_FILE_DIR_CURRENT_AS_SELF;
1258c1258,1260
< } else if (SPL_FILE_DIR_CURRENT(object,
SPL_FILE_DIR_CURRENT_AS_FILEINFO)) {
---
> } else if (SPL_FILE_DIR_CURRENT(object,
SPL_FILE_DIR_CURRENT_AS_SELF)) {
> *data = (zval**)&iterator->intern.data;
> } else {
1265,1266d1266
< } else {
< *data = (zval**)&iterator->intern.data;
diff php5.2-200809302030/ext/spl/spl_directory.h
php52/ext/spl/spl_directory.h
96,97c96,97
< #define SPL_FILE_DIR_CURRENT_AS_FILEINFO 0x00000000 /* make
RecursiveDirectoryTree::current() return SplFileInfo */
< #define SPL_FILE_DIR_CURRENT_AS_SELF 0x00000010 /* make
RecursiveDirectoryTree::current() return getSelf() */
---
> #define SPL_FILE_DIR_CURRENT_AS_FILEINFO 0x00000010 /* make
RecursiveDirectoryTree::current() return SplFileInfo */
> #define SPL_FILE_DIR_CURRENT_AS_SELF 0x00000000 /* make
RecursiveDirectoryTree::current() return getSelf() */
UnitTest
--TEST--
Bug #44018 (RecursiveDirectoryIterator options inconsistancy)
--FILE--
<?php
foreach(new RecursiveDirectoryIterator(dirname(dirname(__FILE__))) as
$key => $file)
{
if(strpos($key, '/tests') !== false)
{
echo get_class($file) . "\n";
}
}
$options = 0;
foreach(new RecursiveDirectoryIterator(dirname(dirname(__FILE__)),
$options) as $key => $file)
{
if(strpos($key, '/tests') !== false)
{
echo get_class($file) . "\n";
}
}
$options = RecursiveDirectoryIterator::CURRENT_AS_FILEINFO;
foreach(new RecursiveDirectoryIterator(dirname(dirname(__FILE__)),
$options) as $key => $file)
{
if(strpos($key, '/tests') !== false)
{
echo get_class($file) . "\n";
}
}
$options = RecursiveDirectoryIterator::KEY_AS_FILENAME;
foreach(new RecursiveDirectoryIterator(dirname(dirname(__FILE__)),
$options) as $key => $file)
{
if('tests' === $key)
{
echo get_class($file) . "\n";
}
}
$options = RecursiveDirectoryIterator::CURRENT_AS_FILEINFO
| RecursiveDirectoryIterator::KEY_AS_FILENAME;
foreach(new RecursiveDirectoryIterator(dirname(dirname(__FILE__)),
$options) as $key => $file)
{
if('tests' === $key)
{
echo get_class($file) . "\n";
}
}
?>
--EXPECTF--
RecursiveDirectoryIterator
RecursiveDirectoryIterator
SplFileInfo
RecursiveDirectoryIterator
SplFileInfo
------------------------------------------------------------------------
[2008-09-30 21:32:34] jordan dot raub at dataxltd dot com
re-opened
------------------------------------------------------------------------
The remainder of the comments for this report are too long. To view
the rest of the comments, please view the bug report online at
http://bugs.php.net/44018
--
Edit this bug report at http://bugs.php.net/?id=44018&edit=1