[prev in list] [next in list] [prev in thread] [next in thread] 

List:       php-internals
Subject:    Re: [PHP-DEV] suggestion SplFileInfo
From:       Arnold Daniels <info () adaniels ! nl>
Date:       2007-02-27 0:36:21
Message-ID: 45E37D05.5040000 () adaniels ! nl
[Download RAW message or body]


Hi again,

Thanks for your response. I've put some new comments below.


Marcus Boerger wrote:
> Hello Arnold,
>
>   some interesting ideas indeed. See my comments below.
>
> best regards
> marcus
>
> Monday, February 26, 2007, 8:48:32 PM, you wrote:
>
>   
>> Hi,
>>     
>
>   
>> I've got a few feature suggestions for SplFileInfo and 
>> DirectoryIteratorRecursive. I'm creating yet another php file manager. 
>> I've noticed that I needed to add quite some code to make it act the way 
>> gnome nautilus does. I believe these feature would be a good addition.
>>     
>
>   
>> SplFileInfo:
>>  - Add parameter $flags to constructor. The flags are passed to any 
>> fileinfo object created.
>>     
> In case we need flags this will be added to the constructor or as
> seperate getter/setter. My preference is actually the latter.
>   
Sure that works just as well, but it would be useful if the flags are 
passed down. That way you can also use it on a DirectoryIterator.
>   
>>  - Add flags FOLLOW_LINK_ALWAYS, FOLLOW_LINK_EXISTS, FOLLOW_LINK_NEVER 
>> for the constructor. Functions as getPerms and getOwner will look at 
>> this setting.
>>     
> I will need to check whether I Can do that. If so I will add flags as well.
> Until then you can overwrite hasChildren() to return "parent::hasChildren()
> && !this->isLink()" to solve the third flag. The second flag also needs to
> verify the target by using getLinkTarget() (see below). Finally the first
> flag is simplywhat we have right now
I believe that there is a bit of miscommunication here. The flags should 
determine if stat or lstat is used to get the properties of the files. 
Currently spl always uses stat. Perhaps the names I came up with aren't 
perfect.
> .
>
>   
>>  - Add getBasename, to get the basename of either a dir or file.
>>     
Did you overlook this? or don't you like it.

>>  - Function getLinkTarget, does readlink($this->getPathname())
>>     
> added in HEAD as getLinkTarget()
>   
Perfect
>   
>>  - Function getRealpath, does realpath($this->getPathname())
>>     
> added in HEAD as getRealPath()
>   
Excellent
>   
>>  - Function getOwnerName and getGroupName
>>     
> Use posix_getpwuid() and posix_getgrgid() *if available*. I prefer not to
> have them in SPL.
>   
Ok very well
>   
>>  - Function isHidden, to check wether a file is hidden
>>     
> I don't think we have support for windows' hidden flag, do we? Under
> *nix as I just reminded you can simply check whether thefilename starts
> with a dot.
>   
Yes that true, but it would be nice to have a function which returns a 
boolean and work for both windows and unix. Perhaps a workaround can be 
thought off for windows.
>   
>>  - Functions getTypeInfo and getMime, to get info of the file using libmagic
>>     
> there are getType and getMTime, that should be enough no?
>   
No the name are almost the same, but the output isn't. I'm talking about 
integrating the features provided by fileinfo 
(http://www.php.net/fileinfo). Perhaps the names aren't chosen well.
>   
>>  - Function setDirInfoClass, set a info class specially for directories
>>     
> What I could do is providing a slow mechanism that actually does a stat
> call and checks the dir flag. Then internally add a pointer for the
> directory info class and a getter/setter for that. It would be initialized
> to null and thegetter would see the normal info class as long as it is
> null. That way the directory info is bound to the standard info class
> until you explicitly split it. Would this solve your problem?
>
> Maybe for PHP 5.3 there should be a stat cache tospeeed things up.
>   
Yes that would be perfect.
PS. Currently looping with a DirectoryIterator returns a 
DirectoryIterator for each child, dirs as well as files, instead of the 
class set using setInfoClass(). Is this correct? It wasn't what I 
expected. RecursiveDirectoryIterator work like I expected.
>   
>> DirectoryIteratorRecursive:
>>  - Add flag DIRS_ONLY for the constructor, to only loop through directories
>>     
> This is achieved by a FilterIterator: ParentIterator
>   
Yes but if you want to loop recursively through the directories, 
creating an object for each file gives a huge overhead. Glob has a 
directory only flag, may that feature can be used.
>   
>>  - Add flag WITHOUT_HIDDEN_FILES for the constructor, not to loop
>> through hidden files
>>     
> Can be done easily by providing a filter.
>   
Ok that is fine.
>   
>>  - Function getFileCount
>>     
> That would require to loop through the directory which is not what we want.
> If you need the count after usingthe elements you can for example loop
> through a CachingIterator which ha sa newly introduced count method that
> will give you the number of elements used.
>   
Isn't there a way you can easily get this information from the system? 
Anyhow I much rather have a loop in c through a set of filenames, than 
looping in php using the iterator. I believe having the ability to give 
the number of files of a directory is really useful, even if you don't 
want to do anything with the files from the dir. For example: gnome 
nautilus displays the number files for each dir instead of the filesize.
>   
>> If you like these features, but don't have time to implement them, I can 
>> see if I can write a patch. I'm quite new at writing PHP extensions, but 
>> I know the basics.
>>     
Thanks again. If you need any help, please let me know.

Best regards,
Arnold


[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic