Make WordPress Core


Ignore:
Timestamp:
11/11/2022 04:02:41 PM (4 years ago)
Author:
desrosj
Message:

Filesystem: Return FTP/FTP Sockets exists() methods to a previous state.

This partially reverts [53860] and [53862], which refactored the exists() method to rely on ftp_rawlist() instead of ftp_nlist().

[53860] makes a similar attempt to the ones made in [33648] and [34733] (which were also reverted in [35944]). Being compliant with the specifications while continuing to work without issue for all FTP servers continues seem impossible. These little ghosts are the ones we’re scared of the most.

Props jsh4, afragen, costdev, pkolenbr, SergeyBiryukov, dd32, peterwilsoncc, gamecreature, desrosj.
Merges [54815] to the 6.1 branch.
Fixes #56966.
See #51170, #28013.

Location:
branches/6.1
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • branches/6.1

  • branches/6.1/src/wp-admin/includes/class-wp-filesystem-ftpext.php

    r53898 r54816  
    413413         *
    414414         * @since 2.5.0
    415          * @since 6.1.0 Uses WP_Filesystem_FTPext::is_dir() to check for directory existence
    416          *              and ftp_rawlist() to check for file existence.
    417415         *
    418416         * @param string $path Path to file or directory.
    … …  
    420418         */
    421419        public function exists( $path ) {
    422                 if ( $this->is_dir( $path ) ) {
    423                         return true;
    424                 }
    425 
    426                 return ! empty( ftp_rawlist( $this->link, $path ) );
     420                $list = ftp_nlist( $this->link, $path );
     421
     422                if ( empty( $list ) && $this->is_dir( $path ) ) {
     423                        return true; // File is an empty directory.
     424                }
     425
     426                return ! empty( $list ); // Empty list = no file, so invert.
    427427        }
    428428
Note: See TracChangeset for help on using the changeset viewer.