php.net |  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: -
Votes:2
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
Have you experienced this issue?
Rate the importance of this bug to you:

 [2016-06-06 11:47 UTC] sander at prezent dot nl
Description:
------------
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:
---------------
<?php

// Some public FTP servers to use
$ftp = 'ftp://speedtest.tele2.net/'; // Fast server
//$ftp = 'ftp://ftp.hq.nasa.gov/';     // 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?


Patches

Add a Patch

Pull Requests

Add a Pull Request

History

AllCommentsChangesGit/SVN commitsRelated reports
 [2016-06-06 11:48 UTC] sander at prezent dot nl
Related: https://github.com/symfony/symfony/issues/18923
 
PHP Copyright © 2001-2019 The PHP Group
All rights reserved.
Last updated: Mon Nov 18 23:01:35 2019 UTC