Bug->Req #72343 [Opn]: FTP wrapper should re-use connections
| From: | cmb@php.net | Date: | Thu, 04 Feb 2021 17:57:57 +0000 |
| Subject: | Bug->Req #72343 [Opn]: FTP wrapper should re-use connections | ||
| References: | 1 | Groups: | php.bugs |
| Request: | Send a blank email to php-bugs+get-231954@lists.php.net to get a copy of this message | ||
Edit report at https://bugs.php.net/bug.php?id=72343&edit=1
ID: 72343
Updated by: cmb@php.net
Reported by: sander at prezent dot nl
-Summary: SplFileInfo from DirectoryIterator opens new FTP
connections
+Summary: FTP wrapper should re-use connections
Status: Open
-Type: Bug
+Type: Feature/Change Request
-Package: FTP related
+Package: Streams related
Operating System: Linux
PHP Version: 7.0.7
Block user comment: N
Private report: N
New Comment:
This is not particularly related to SPL, but rather is general
limitation of the FTP protocol wrapper which does not re-use
opened connections. You see the same bad performance when using
the standard file/dir functions (i.e. opendir()/readdir() and
is_dir()/is_file()).
Basically, what stof already said[1].
[1] <https://github.com/symfony/symfony/issues/18923#issuecomment-222930229>
Previous Comments:
------------------------------------------------------------------------
[2016-06-06 11:48:48] sander at prezent dot nl
Related: https://github.com/symfony/symfony/issues/18923
------------------------------------------------------------------------
[2016-06-06 11:47:40] 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?
------------------------------------------------------------------------
--
Edit this bug report at https://bugs.php.net/bug.php?id=72343&edit=1