|  support |  documentation |  report a bug |  advanced search |  search howto |  statistics |  random bug |  login
Bug #72343 SplFileInfo from DirectoryIterator opens new FTP connections
Submitted: 2016-06-06 11:47 UTC Modified: -
Avg. Score:5.0 ± 0.0
Reproduced:2 of 2 (100.0%)
Same Version:0 (0.0%)
Same OS:2 (100.0%)
From: sander at prezent dot nl Assigned:
Status: Open Package: FTP related
PHP Version: 7.0.7 OS: Linux
Private report: No CVE-ID: None
View Add Comment Developer Edit
Welcome! If you don't have a Git account, you can't do anything here.
You can add a comment by following this link or if you reported this bug, you can edit this bug over here.
Block user comment
Status: Assign to:
Bug Type:
From: sander at prezent dot nl
New email:
PHP Version: OS:


 [2016-06-06 11:47 UTC] sander at prezent dot nl
Iterating over an FTP directory using \DirectoryIterator and then using the \SplFileInfo is extremely slow. Methods called un the \SplFileInfo object, such as `isDir()` and `isFile()` cause PHP to open a new FTP connection under the hood for every file to retrieve file information.

This issue becomes more apparent when an FTP server is slow during authentication.

Test script:

// Some public FTP servers to use
$ftp = ''; // Fast server
//$ftp = '';     // Not so fast server

echo "Testing on $ftp\n";

$it = new NoRewindIterator(new DirectoryIterator($ftp));

foreach ($it as $file) {
    var_dump($file->isFile()); // This causes new connections and the slowdown

Expected result:
No constant stream of new FTP connections and better performance. The FTP extension should reuse the connection that was established with the \DirectoryIterator.

Also, since \DirectoryIterator already gets an FTP file listing, it probably already knows what it should respond to isFile()/isDir() and other \SplFileInfo method calls. Can that information not simply be reused?


Add a Patch

Pull Requests

Add a Pull Request


AllCommentsChangesGit/SVN commitsRelated reports
 [2016-06-06 11:48 UTC] sander at prezent dot nl
PHP Copyright © 2001-2020 The PHP Group
All rights reserved.
Last updated: Sat Oct 31 19:01:24 2020 UTC