Bug->Req #72343 [Opn]: FTP wrapper should re-use connections

From: 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

« previous php.bugs (#231954) next »