php.net |  support |  documentation |  report a bug |  advanced search |  search howto |  statistics |  random bug |  login
Bug #80660 FilesystemIterator foreach-loop fails on fuse filesystems
Submitted: 2021-01-22 13:53 UTC Modified: 2024-01-04 20:30 UTC
Votes:5
Avg. Score:3.2 ± 1.3
Reproduced:4 of 5 (80.0%)
Same Version:1 (25.0%)
Same OS:2 (50.0%)
From: shop1 at mokraemer dot de Assigned:
Status: Open Package: SPL related
PHP Version: 7.4.14 OS: linux
Private report: No CVE-ID: None
View Developer Edit
Welcome! If you don't have a Git account, you can't do anything here.
If you reported this bug, you can edit this bug over here.
(description)
Block user comment
Status: Assign to:
Package:
Bug Type:
Summary:
From: shop1 at mokraemer dot de
New email:
PHP Version: OS:

 

 [2021-01-22 13:53 UTC] shop1 at mokraemer dot de
Description:
------------
As for my testing, FilesystemIterator fails with the foreach loop while the while-next loop works as expected.

Test script:
---------------
<?php
$iterator = new \FilesystemIterator(
	'/fuse-filesystem',
             \FilesystemIterator::CURRENT_AS_SELF
           | \FilesystemIterator::SKIP_DOTS
);
echo "--while\n";
while($iterator->valid()) {
	echo $iterator->current()."\n";
	$iterator->next();
}
$iterator->rewind();
echo "--for\n";
foreach ($iterator as $entry) {
	echo $entry->getFilename()."\n";
}


Expected result:
----------------
--while
.hg
file1.class.php
file2.class.php
--for
.hg
file1.class.php
file2.class.php


Actual result:
--------------
--while
.hg
file1.class.php
file2.class.php
--for


Patches

Pull Requests

History

AllCommentsChangesGit/SVN commitsRelated reports
 [2021-04-30 02:19 UTC] marcelo at ofload dot com
I'm having a similar issue.

In your example, if you don't rewind() it works.
i.e.
- create the iterator
- while()
- foreach()

But I can also see an issue where if you rewind() before while() it fails.
i.e.
- create the iterator
- rewind()
- while()

Also, if we do foreach() before while() it fails:
i.e.
- create the iterator
- foreach()
- rewind()
- while()

In summary, depending if you call rewind() or not calling rewind() it fails for foreach() or while() too.

This is a very awkward bug that is happening in a Docker container with Windows as a Host.
 [2022-08-25 05:38 UTC] staffan at njoy dot fi
I think this is what I'm seeing in docker on windows, I'm using the php:7-fpm-alpine image and it's currently at 7.4.30.

I'm only seeing it if the directory that's being scanned has more than about 50 entries though. It puzzled me greatly why Drupal would fail to identify its modules if the modules directory had a lot of modules but be fine if I moved them around so that no modules directory had more than that. I've only seen this when the modules were on a bind mounted volume.
 [2024-01-04 20:30 UTC] bukka@php.net
-Package: *Directory/Filesystem functions +Package: SPL related
 [2024-05-10 09:10 UTC] Lorena783lopez at outlook dot com
Thank you for this information it is very helpful for me nice. (https://github.com)(https://gm-socrates.com)
 
PHP Copyright © 2001-2024 The PHP Group
All rights reserved.
Last updated: Sat Dec 21 11:01:30 2024 UTC