+ * Determine if the string provided contains binary characters.
+ *
+ * @since 2.7.0
+ *
+ * @param string $text String to test against.
+ * @return bool true if string is binary, false otherwise.
+ */
+ public function is_binary( $text ) {
+ return (bool) preg_match( '|[^\x20-\x7E]|', $text ); // chr(32)..chr(127)
+ }
+
+ /**
+ * Change the ownership of a file / folder.
+ *
+ * Default behavior is to do nothing, override this in your subclass, if desired.
+ *
+ * @since 2.5.0
+ *
+ * @param string $file Path to the file.
+ * @param mixed $owner A user name or number.
+ * @param bool $recursive Optional. If set True changes file owner recursivly. Defaults to False.
+ * @return bool Returns true on success or false on failure.
+ */
+ public function chown( $file, $owner, $recursive = false ) {
+ return false;
+ }
+
+ /**
+ * Connect filesystem.
+ *
+ * @since 2.5.0
+ * @abstract
+ * @return bool True on success or false on failure (always true for WP_Filesystem_Direct).
+ */
+ public function connect() {
+ return true;
+ }
+
+ /**
+ * Read entire file into a string.
+ *
+ * @since 2.5.0
+ * @abstract
+ * @param string $file Name of the file to read.
+ * @return mixed|bool Returns the read data or false on failure.
+ */
+ public function get_contents( $file ) {
+ return false;
+ }
+
+ /**
+ * Read entire file into an array.
+ *
+ * @since 2.5.0
+ * @abstract
+ * @param string $file Path to the file.
+ * @return array|bool the file contents in an array or false on failure.
+ */
+ public function get_contents_array( $file ) {
+ return false;
+ }
+
+ /**
+ * Write a string to a file.
+ *
+ * @since 2.5.0
+ * @abstract
+ * @param string $file Remote path to the file where to write the data.
+ * @param string $contents The data to write.
+ * @param int $mode Optional. The file permissions as octal number, usually 0644.
+ * @return bool False on failure.
+ */
+ public function put_contents( $file, $contents, $mode = false ) {
+ return false;
+ }
+
+ /**
+ * Get the current working directory.
+ *
+ * @since 2.5.0
+ * @abstract
+ * @return string|bool The current working directory on success, or false on failure.
+ */
+ public function cwd() {
+ return false;
+ }
+
+ /**
+ * Change current directory.
+ *
+ * @since 2.5.0
+ * @abstract
+ * @param string $dir The new current directory.
+ * @return bool|string
+ */
+ public function chdir( $dir ) {
+ return false;
+ }
+
+ /**
+ * Change the file group.
+ *
+ * @since 2.5.0
+ * @abstract
+ * @param string $file Path to the file.
+ * @param mixed $group A group name or number.
+ * @param bool $recursive Optional. If set True changes file group recursively. Defaults to False.
+ * @return bool|string
+ */
+ public function chgrp( $file, $group, $recursive = false ) {
+ return false;
+ }
+
+ /**
+ * Change filesystem permissions.
+ *
+ * @since 2.5.0
+ * @abstract
+ * @param string $file Path to the file.
+ * @param int $mode Optional. The permissions as octal number, usually 0644 for files, 0755 for dirs.
+ * @param bool $recursive Optional. If set True changes file group recursively. Defaults to False.
+ * @return bool|string
+ */
+ public function chmod( $file, $mode = false, $recursive = false ) {
+ return false;
+ }
+
+ /**
+ * Get the file owner.
+ *
+ * @since 2.5.0
+ * @abstract
+ * @param string $file Path to the file.
+ * @return string|bool Username of the user or false on error.
+ */
+ public function owner( $file ) {
+ return false;
+ }
+
+ /**
+ * Get the file's group.
+ *
+ * @since 2.5.0
+ * @abstract
+ * @param string $file Path to the file.
+ * @return string|bool The group or false on error.
+ */
+ public function group( $file ) {
+ return false;
+ }
+
+ /**
+ * Copy a file.
+ *
+ * @since 2.5.0
+ * @abstract
+ * @param string $source Path to the source file.
+ * @param string $destination Path to the destination file.
+ * @param bool $overwrite Optional. Whether to overwrite the destination file if it exists.
+ * Default false.
+ * @param int $mode Optional. The permissions as octal number, usually 0644 for files, 0755 for dirs.
+ * Default false.
+ * @return bool True if file copied successfully, False otherwise.
+ */
+ public function copy( $source, $destination, $overwrite = false, $mode = false ) {
+ return false;
+ }
+
+ /**
+ * Move a file.
+ *
+ * @since 2.5.0
+ * @abstract
+ * @param string $source Path to the source file.
+ * @param string $destination Path to the destination file.
+ * @param bool $overwrite Optional. Whether to overwrite the destination file if it exists.
+ * Default false.
+ * @return bool True if file copied successfully, False otherwise.
+ */
+ public function move( $source, $destination, $overwrite = false ) {
+ return false;
+ }
+
+ /**
+ * Delete a file or directory.
+ *
+ * @since 2.5.0
+ * @abstract
+ * @param string $file Path to the file.
+ * @param bool $recursive Optional. If set True changes file group recursively. Defaults to False.
+ * Default false.
+ * @param bool $type Type of resource. 'f' for file, 'd' for directory.
+ * Default false.
+ * @return bool True if the file or directory was deleted, false on failure.
+ */
+ public function delete( $file, $recursive = false, $type = false ) {
+ return false;
+ }
+
+ /**
+ * Check if a file or directory exists.
+ *
+ * @since 2.5.0
+ * @abstract
+ * @param string $file Path to file/directory.
+ * @return bool Whether $file exists or not.
+ */
+ public function exists( $file ) {
+ return false;
+ }
+
+ /**
+ * Check if resource is a file.
+ *
+ * @since 2.5.0
+ * @abstract
+ * @param string $file File path.
+ * @return bool Whether $file is a file.
+ */
+ public function is_file( $file ) {
+ return false;
+ }
+
+ /**
+ * Check if resource is a directory.
+ *
+ * @since 2.5.0
+ * @abstract
+ * @param string $path Directory path.
+ * @return bool Whether $path is a directory.
+ */
+ public function is_dir( $path ) {
+ return false;
+ }
+
+ /**
+ * Check if a file is readable.
+ *
+ * @since 2.5.0
+ * @abstract
+ * @param string $file Path to file.
+ * @return bool Whether $file is readable.
+ */
+ public function is_readable( $file ) {
+ return false;
+ }
+
+ /**
+ * Check if a file or directory is writable.
+ *
+ * @since 2.5.0
+ * @abstract
+ * @return bool Whether $file is writable.
+ */
+ public function is_writable( $file ) {
+ return false;
+ }
+
+ /**
+ * Gets the file's last access time.
+ *
+ * @since 2.5.0
+ * @abstract
+ * @param string $file Path to file.
+ * @return int|bool Unix timestamp representing last access time.
+ */
+ public function atime( $file ) {
+ return false;
+ }
+
+ /**
+ * Gets the file modification time.
+ *
+ * @since 2.5.0
+ * @abstract
+ * @param string $file Path to file.
+ * @return int|bool Unix timestamp representing modification time.
+ */
+ public function mtime( $file ) {
+ return false;
+ }
+
+ /**
+ * Gets the file size (in bytes).
+ *
+ * @since 2.5.0
+ * @abstract
+ * @param string $file Path to file.
+ * @return int|bool Size of the file in bytes.
+ */
+ public function size( $file ) {
+ return false;
+ }
+
+ /**
+ * Set the access and modification times of a file.
+ *
+ * Note: If $file doesn't exist, it will be created.
+ *
+ * @since 2.5.0
+ * @abstract
+ * @param string $file Path to file.
+ * @param int $time Optional. Modified time to set for file.
+ * Default 0.
+ * @param int $atime Optional. Access time to set for file.
+ * Default 0.
+ * @return bool Whether operation was successful or not.
+ */
+ public function touch( $file, $time = 0, $atime = 0 ) {
+ return false;
+ }
+
+ /**
+ * Create a directory.
+ *
+ * @since 2.5.0
+ * @abstract
+ * @param string $path Path for new directory.
+ * @param mixed $chmod Optional. The permissions as octal number, (or False to skip chmod)
+ * Default false.
+ * @param mixed $chown Optional. A user name or number (or False to skip chown)
+ * Default false.
+ * @param mixed $chgrp Optional. A group name or number (or False to skip chgrp).
+ * Default false.
+ * @return bool False if directory cannot be created, true otherwise.
+ */
+ public function mkdir( $path, $chmod = false, $chown = false, $chgrp = false ) {
+ return false;
+ }
+
+ /**
+ * Delete a directory.
+ *
+ * @since 2.5.0
+ * @abstract
+ * @param string $path Path to directory.
+ * @param bool $recursive Optional. Whether to recursively remove files/directories.
+ * Default false.
+ * @return bool Whether directory is deleted successfully or not.
+ */
+ public function rmdir( $path, $recursive = false ) {
+ return false;
+ }
+
+ /**
+ * Get details for files in a directory or a specific file.
+ *
+ * @since 2.5.0
+ * @abstract