[ Index ] |
PHP Cross Reference of WordPress Trunk (Updated Daily) |
[Summary view] [Print] [Text view]
1 <?php 2 /** 3 * Base WordPress Filesystem 4 * 5 * @package WordPress 6 * @subpackage Filesystem 7 */ 8 9 /** 10 * Base WordPress Filesystem class which Filesystem implementations extend. 11 * 12 * @since 2.5.0 13 */ 14 #[AllowDynamicProperties] 15 class WP_Filesystem_Base { 16 17 /** 18 * Whether to display debug data for the connection. 19 * 20 * @since 2.5.0 21 * @var bool 22 */ 23 public $verbose = false; 24 25 /** 26 * Cached list of local filepaths to mapped remote filepaths. 27 * 28 * @since 2.7.0 29 * @var array 30 */ 31 public $cache = array(); 32 33 /** 34 * The Access method of the current connection, Set automatically. 35 * 36 * @since 2.5.0 37 * @var string 38 */ 39 public $method = ''; 40 41 /** 42 * @var WP_Error 43 */ 44 public $errors = null; 45 46 /** 47 */ 48 public $options = array(); 49 50 /** 51 * Returns the path on the remote filesystem of ABSPATH. 52 * 53 * @since 2.7.0 54 * 55 * @return string The location of the remote path. 56 */ 57 public function abspath() { 58 $folder = $this->find_folder( ABSPATH ); 59 60 /* 61 * Perhaps the FTP folder is rooted at the WordPress install. 62 * Check for wp-includes folder in root. Could have some false positives, but rare. 63 */ 64 if ( ! $folder && $this->is_dir( '/' . WPINC ) ) { 65 $folder = '/'; 66 } 67 68 return $folder; 69 } 70 71 /** 72 * Returns the path on the remote filesystem of WP_CONTENT_DIR. 73 * 74 * @since 2.7.0 75 * 76 * @return string The location of the remote path. 77 */ 78 public function wp_content_dir() { 79 return $this->find_folder( WP_CONTENT_DIR ); 80 } 81 82 /** 83 * Returns the path on the remote filesystem of WP_PLUGIN_DIR. 84 * 85 * @since 2.7.0 86 * 87 * @return string The location of the remote path. 88 */ 89 public function wp_plugins_dir() { 90 return $this->find_folder( WP_PLUGIN_DIR ); 91 } 92 93 /** 94 * Returns the path on the remote filesystem of the Themes Directory. 95 * 96 * @since 2.7.0 97 * 98 * @param string|false $theme Optional. The theme stylesheet or template for the directory. 99 * Default false. 100 * @return string The location of the remote path. 101 */ 102 public function wp_themes_dir( $theme = false ) { 103 $theme_root = get_theme_root( $theme ); 104 105 // Account for relative theme roots. 106 if ( '/themes' === $theme_root || ! is_dir( $theme_root ) ) { 107 $theme_root = WP_CONTENT_DIR . $theme_root; 108 } 109 110 return $this->find_folder( $theme_root ); 111 } 112 113 /** 114 * Returns the path on the remote filesystem of WP_LANG_DIR. 115 * 116 * @since 3.2.0 117 * 118 * @return string The location of the remote path. 119 */ 120 public function wp_lang_dir() { 121 return $this->find_folder( WP_LANG_DIR ); 122 } 123 124 /** 125 * Locates a folder on the remote filesystem. 126 * 127 * @since 2.5.0 128 * @deprecated 2.7.0 use WP_Filesystem_Base::abspath() or WP_Filesystem_Base::wp_*_dir() instead. 129 * @see WP_Filesystem_Base::abspath() 130 * @see WP_Filesystem_Base::wp_content_dir() 131 * @see WP_Filesystem_Base::wp_plugins_dir() 132 * @see WP_Filesystem_Base::wp_themes_dir() 133 * @see WP_Filesystem_Base::wp_lang_dir() 134 * 135 * @param string $base Optional. The folder to start searching from. Default '.'. 136 * @param bool $verbose Optional. True to display debug information. Default false. 137 * @return string The location of the remote path. 138 */ 139 public function find_base_dir( $base = '.', $verbose = false ) { 140 _deprecated_function( __FUNCTION__, '2.7.0', 'WP_Filesystem_Base::abspath() or WP_Filesystem_Base::wp_*_dir()' ); 141 $this->verbose = $verbose; 142 return $this->abspath(); 143 } 144 145 /** 146 * Locates a folder on the remote filesystem. 147 * 148 * @since 2.5.0 149 * @deprecated 2.7.0 use WP_Filesystem_Base::abspath() or WP_Filesystem_Base::wp_*_dir() methods instead. 150 * @see WP_Filesystem_Base::abspath() 151 * @see WP_Filesystem_Base::wp_content_dir() 152 * @see WP_Filesystem_Base::wp_plugins_dir() 153 * @see WP_Filesystem_Base::wp_themes_dir() 154 * @see WP_Filesystem_Base::wp_lang_dir() 155 * 156 * @param string $base Optional. The folder to start searching from. Default '.'. 157 * @param bool $verbose Optional. True to display debug information. Default false. 158 * @return string The location of the remote path. 159 */ 160 public function get_base_dir( $base = '.', $verbose = false ) { 161 _deprecated_function( __FUNCTION__, '2.7.0', 'WP_Filesystem_Base::abspath() or WP_Filesystem_Base::wp_*_dir()' ); 162 $this->verbose = $verbose; 163 return $this->abspath(); 164 } 165 166 /** 167 * Locates a folder on the remote filesystem. 168 * 169 * Assumes that on Windows systems, Stripping off the Drive 170 * letter is OK Sanitizes \\ to / in Windows filepaths. 171 * 172 * @since 2.7.0 173 * 174 * @param string $folder the folder to locate. 175 * @return string|false The location of the remote path, false on failure. 176 */ 177 public function find_folder( $folder ) { 178 if ( isset( $this->cache[ $folder ] ) ) { 179 return $this->cache[ $folder ]; 180 } 181 182 if ( stripos( $this->method, 'ftp' ) !== false ) { 183 $constant_overrides = array( 184 'FTP_BASE' => ABSPATH, 185 'FTP_CONTENT_DIR' => WP_CONTENT_DIR, 186 'FTP_PLUGIN_DIR' => WP_PLUGIN_DIR, 187 'FTP_LANG_DIR' => WP_LANG_DIR, 188 ); 189 190 // Direct matches ( folder = CONSTANT/ ). 191 foreach ( $constant_overrides as $constant => $dir ) { 192 if ( ! defined( $constant ) ) { 193 continue; 194 } 195 196 if ( $folder === $dir ) { 197 return trailingslashit( constant( $constant ) ); 198 } 199 } 200 201 // Prefix matches ( folder = CONSTANT/subdir ), 202 foreach ( $constant_overrides as $constant => $dir ) { 203 if ( ! defined( $constant ) ) { 204 continue; 205 } 206 207 if ( 0 === stripos( $folder, $dir ) ) { // $folder starts with $dir. 208 $potential_folder = preg_replace( '#^' . preg_quote( $dir, '#' ) . '/#i', trailingslashit( constant( $constant ) ), $folder ); 209 $potential_folder = trailingslashit( $potential_folder ); 210 211 if ( $this->is_dir( $potential_folder ) ) { 212 $this->cache[ $folder ] = $potential_folder; 213 214 return $potential_folder; 215 } 216 } 217 } 218 } elseif ( 'direct' === $this->method ) { 219 $folder = str_replace( '\\', '/', $folder ); // Windows path sanitization. 220 221 return trailingslashit( $folder ); 222 } 223 224 $folder = preg_replace( '|^([a-z]{1}):|i', '', $folder ); // Strip out Windows drive letter if it's there. 225 $folder = str_replace( '\\', '/', $folder ); // Windows path sanitization. 226 227 if ( isset( $this->cache[ $folder ] ) ) { 228 return $this->cache[ $folder ]; 229 } 230 231 if ( $this->exists( $folder ) ) { // Folder exists at that absolute path. 232 $folder = trailingslashit( $folder ); 233 $this->cache[ $folder ] = $folder; 234 235 return $folder; 236 } 237 238 $return = $this->search_for_folder( $folder ); 239 240 if ( $return ) { 241 $this->cache[ $folder ] = $return; 242 } 243 244 return $return; 245 } 246 247 /** 248 * Locates a folder on the remote filesystem. 249 * 250 * Expects Windows sanitized path. 251 * 252 * @since 2.7.0 253 * 254 * @param string $folder The folder to locate. 255 * @param string $base The folder to start searching from. 256 * @param bool $loop If the function has recursed. Internal use only. 257 * @return string|false The location of the remote path, false to cease looping. 258 */ 259 public function search_for_folder( $folder, $base = '.', $loop = false ) { 260 if ( empty( $base ) || '.' === $base ) { 261 $base = trailingslashit( $this->cwd() ); 262 } 263 264 $folder = untrailingslashit( $folder ); 265 266 if ( $this->verbose ) { 267 /* translators: 1: Folder to locate, 2: Folder to start searching from. */ 268 printf( "\n" . __( 'Looking for %1$s in %2$s' ) . "<br />\n", $folder, $base ); 269 } 270 271 $folder_parts = explode( '/', $folder ); 272 $folder_part_keys = array_keys( $folder_parts ); 273 $last_index = array_pop( $folder_part_keys ); 274 $last_path = $folder_parts[ $last_index ]; 275 276 $files = $this->dirlist( $base ); 277 278 foreach ( $folder_parts as $index => $key ) { 279 if ( $index === $last_index ) { 280 continue; // We want this to be caught by the next code block. 281 } 282 283 /* 284 * Working from /home/ to /user/ to /wordpress/ see if that file exists within 285 * the current folder, If it's found, change into it and follow through looking 286 * for it. If it can't find WordPress down that route, it'll continue onto the next 287 * folder level, and see if that matches, and so on. If it reaches the end, and still 288 * can't find it, it'll return false for the entire function. 289 */ 290 if ( isset( $files[ $key ] ) ) { 291 292 // Let's try that folder: 293 $newdir = trailingslashit( path_join( $base, $key ) ); 294 295 if ( $this->verbose ) { 296 /* translators: %s: Directory name. */ 297 printf( "\n" . __( 'Changing to %s' ) . "<br />\n", $newdir ); 298 } 299 300 // Only search for the remaining path tokens in the directory, not the full path again. 301 $newfolder = implode( '/', array_slice( $folder_parts, $index + 1 ) ); 302 $ret = $this->search_for_folder( $newfolder, $newdir, $loop ); 303 304 if ( $ret ) { 305 return $ret; 306 } 307 } 308 } 309 310 /* 311 * Only check this as a last resort, to prevent locating the incorrect install. 312 * All above procedures will fail quickly if this is the right branch to take. 313 */ 314 if ( isset( $files[ $last_path ] ) ) { 315 if ( $this->verbose ) { 316 /* translators: %s: Directory name. */ 317 printf( "\n" . __( 'Found %s' ) . "<br />\n", $base . $last_path ); 318 } 319 320 return trailingslashit( $base . $last_path ); 321 } 322 323 /* 324 * Prevent this function from looping again. 325 * No need to proceed if we've just searched in `/`. 326 */ 327 if ( $loop || '/' === $base ) { 328 return false; 329 } 330 331 /* 332 * As an extra last resort, Change back to / if the folder wasn't found. 333 * This comes into effect when the CWD is /home/user/ but WP is at /var/www/.... 334 */ 335 return $this->search_for_folder( $folder, '/', true ); 336 } 337 338 /** 339 * Returns the *nix-style file permissions for a file. 340 * 341 * From the PHP documentation page for fileperms(). 342 * 343 * @link https://www.php.net/manual/en/function.fileperms.php 344 * 345 * @since 2.5.0 346 * 347 * @param string $file String filename. 348 * @return string The *nix-style representation of permissions. 349 */ 350 public function gethchmod( $file ) { 351 $perms = intval( $this->getchmod( $file ), 8 ); 352 353 if ( ( $perms & 0xC000 ) === 0xC000 ) { // Socket. 354 $info = 's'; 355 } elseif ( ( $perms & 0xA000 ) === 0xA000 ) { // Symbolic Link. 356 $info = 'l'; 357 } elseif ( ( $perms & 0x8000 ) === 0x8000 ) { // Regular. 358 $info = '-'; 359 } elseif ( ( $perms & 0x6000 ) === 0x6000 ) { // Block special. 360 $info = 'b'; 361 } elseif ( ( $perms & 0x4000 ) === 0x4000 ) { // Directory. 362 $info = 'd'; 363 } elseif ( ( $perms & 0x2000 ) === 0x2000 ) { // Character special. 364 $info = 'c'; 365 } elseif ( ( $perms & 0x1000 ) === 0x1000 ) { // FIFO pipe. 366 $info = 'p'; 367 } else { // Unknown. 368 $info = 'u'; 369 } 370 371 // Owner. 372 $info .= ( ( $perms & 0x0100 ) ? 'r' : '-' ); 373 $info .= ( ( $perms & 0x0080 ) ? 'w' : '-' ); 374 $info .= ( ( $perms & 0x0040 ) ? 375 ( ( $perms & 0x0800 ) ? 's' : 'x' ) : 376 ( ( $perms & 0x0800 ) ? 'S' : '-' ) ); 377 378 // Group. 379 $info .= ( ( $perms & 0x0020 ) ? 'r' : '-' ); 380 $info .= ( ( $perms & 0x0010 ) ? 'w' : '-' ); 381 $info .= ( ( $perms & 0x0008 ) ? 382 ( ( $perms & 0x0400 ) ? 's' : 'x' ) : 383 ( ( $perms & 0x0400 ) ? 'S' : '-' ) ); 384 385 // World. 386 $info .= ( ( $perms & 0x0004 ) ? 'r' : '-' ); 387 $info .= ( ( $perms & 0x0002 ) ? 'w' : '-' ); 388 $info .= ( ( $perms & 0x0001 ) ? 389 ( ( $perms & 0x0200 ) ? 't' : 'x' ) : 390 ( ( $perms & 0x0200 ) ? 'T' : '-' ) ); 391 392 return $info; 393 } 394 395 /** 396 * Gets the permissions of the specified file or filepath in their octal format. 397 * 398 * @since 2.5.0 399 * 400 * @param string $file Path to the file. 401 * @return string Mode of the file (the last 3 digits). 402 */ 403 public function getchmod( $file ) { 404 return '777'; 405 } 406 407 /** 408 * Converts *nix-style file permissions to an octal number. 409 * 410 * Converts '-rw-r--r--' to 0644 411 * From "info at rvgate dot nl"'s comment on the PHP documentation for chmod() 412 * 413 * @link https://www.php.net/manual/en/function.chmod.php#49614 414 * 415 * @since 2.5.0 416 * 417 * @param string $mode string The *nix-style file permissions. 418 * @return string Octal representation of permissions. 419 */ 420 public function getnumchmodfromh( $mode ) { 421 $realmode = ''; 422 $legal = array( '', 'w', 'r', 'x', '-' ); 423 $attarray = preg_split( '//', $mode ); 424 425 for ( $i = 0, $c = count( $attarray ); $i < $c; $i++ ) { 426 $key = array_search( $attarray[ $i ], $legal, true ); 427 428 if ( $key ) { 429 $realmode .= $legal[ $key ]; 430 } 431 } 432 433 $mode = str_pad( $realmode, 10, '-', STR_PAD_LEFT ); 434 $trans = array( 435 '-' => '0', 436 'r' => '4', 437 'w' => '2', 438 'x' => '1', 439 ); 440 $mode = strtr( $mode, $trans ); 441 442 $newmode = $mode[0]; 443 $newmode .= $mode[1] + $mode[2] + $mode[3]; 444 $newmode .= $mode[4] + $mode[5] + $mode[6]; 445 $newmode .= $mode[7] + $mode[8] + $mode[9]; 446 447 return $newmode; 448 } 449 450 /** 451 * Determines if the string provided contains binary characters. 452 * 453 * @since 2.7.0 454 * 455 * @param string $text String to test against. 456 * @return bool True if string is binary, false otherwise. 457 */ 458 public function is_binary( $text ) { 459 return (bool) preg_match( '|[^\x20-\x7E]|', $text ); // chr(32)..chr(127) 460 } 461 462 /** 463 * Changes the owner of a file or directory. 464 * 465 * Default behavior is to do nothing, override this in your subclass, if desired. 466 * 467 * @since 2.5.0 468 * 469 * @param string $file Path to the file or directory. 470 * @param string|int $owner A user name or number. 471 * @param bool $recursive Optional. If set to true, changes file owner recursively. 472 * Default false. 473 * @return bool True on success, false on failure. 474 */ 475 public function chown( $file, $owner, $recursive = false ) { 476 return false; 477 } 478 479 /** 480 * Connects filesystem. 481 * 482 * @since 2.5.0 483 * @abstract 484 * 485 * @return bool True on success, false on failure (always true for WP_Filesystem_Direct). 486 */ 487 public function connect() { 488 return true; 489 } 490 491 /** 492 * Reads entire file into a string. 493 * 494 * @since 2.5.0 495 * @abstract 496 * 497 * @param string $file Name of the file to read. 498 * @return string|false Read data on success, false on failure. 499 */ 500 public function get_contents( $file ) { 501 return false; 502 } 503 504 /** 505 * Reads entire file into an array. 506 * 507 * @since 2.5.0 508 * @abstract 509 * 510 * @param string $file Path to the file. 511 * @return array|false File contents in an array on success, false on failure. 512 */ 513 public function get_contents_array( $file ) { 514 return false; 515 } 516 517 /** 518 * Writes a string to a file. 519 * 520 * @since 2.5.0 521 * @abstract 522 * 523 * @param string $file Remote path to the file where to write the data. 524 * @param string $contents The data to write. 525 * @param int|false $mode Optional. The file permissions as octal number, usually 0644. 526 * Default false. 527 * @return bool True on success, false on failure. 528 */ 529 public function put_contents( $file, $contents, $mode = false ) { 530 return false; 531 } 532 533 /** 534 * Gets the current working directory. 535 * 536 * @since 2.5.0 537 * @abstract 538 * 539 * @return string|false The current working directory on success, false on failure. 540 */ 541 public function cwd() { 542 return false; 543 } 544 545 /** 546 * Changes current directory. 547 * 548 * @since 2.5.0 549 * @abstract 550 * 551 * @param string $dir The new current directory. 552 * @return bool True on success, false on failure. 553 */ 554 public function chdir( $dir ) { 555 return false; 556 } 557 558 /** 559 * Changes the file group. 560 * 561 * @since 2.5.0 562 * @abstract 563 * 564 * @param string $file Path to the file. 565 * @param string|int $group A group name or number. 566 * @param bool $recursive Optional. If set to true, changes file group recursively. 567 * Default false. 568 * @return bool True on success, false on failure. 569 */ 570 public function chgrp( $file, $group, $recursive = false ) { 571 return false; 572 } 573 574 /** 575 * Changes filesystem permissions. 576 * 577 * @since 2.5.0 578 * @abstract 579 * 580 * @param string $file Path to the file. 581 * @param int|false $mode Optional. The permissions as octal number, usually 0644 for files, 582 * 0755 for directories. Default false. 583 * @param bool $recursive Optional. If set to true, changes file permissions recursively. 584 * Default false. 585 * @return bool True on success, false on failure. 586 */ 587 public function chmod( $file, $mode = false, $recursive = false ) { 588 return false; 589 } 590 591 /** 592 * Gets the file owner. 593 * 594 * @since 2.5.0 595 * @abstract 596 * 597 * @param string $file Path to the file. 598 * @return string|false Username of the owner on success, false on failure. 599 */ 600 public function owner( $file ) { 601 return false; 602 } 603 604 /** 605 * Gets the file's group. 606 * 607 * @since 2.5.0 608 * @abstract 609 * 610 * @param string $file Path to the file. 611 * @return string|false The group on success, false on failure. 612 */ 613 public function group( $file ) { 614 return false; 615 } 616 617 /** 618 * Copies a file. 619 * 620 * @since 2.5.0 621 * @abstract 622 * 623 * @param string $source Path to the source file. 624 * @param string $destination Path to the destination file. 625 * @param bool $overwrite Optional. Whether to overwrite the destination file if it exists. 626 * Default false. 627 * @param int|false $mode Optional. The permissions as octal number, usually 0644 for files, 628 * 0755 for dirs. Default false. 629 * @return bool True on success, false on failure. 630 */ 631 public function copy( $source, $destination, $overwrite = false, $mode = false ) { 632 return false; 633 } 634 635 /** 636 * Moves a file. 637 * 638 * @since 2.5.0 639 * @abstract 640 * 641 * @param string $source Path to the source file. 642 * @param string $destination Path to the destination file. 643 * @param bool $overwrite Optional. Whether to overwrite the destination file if it exists. 644 * Default false. 645 * @return bool True on success, false on failure. 646 */ 647 public function move( $source, $destination, $overwrite = false ) { 648 return false; 649 } 650 651 /** 652 * Deletes a file or directory. 653 * 654 * @since 2.5.0 655 * @abstract 656 * 657 * @param string $file Path to the file or directory. 658 * @param bool $recursive Optional. If set to true, deletes files and folders recursively. 659 * Default false. 660 * @param string|false $type Type of resource. 'f' for file, 'd' for directory. 661 * Default false. 662 * @return bool True on success, false on failure. 663 */ 664 public function delete( $file, $recursive = false, $type = false ) { 665 return false; 666 } 667 668 /** 669 * Checks if a file or directory exists. 670 * 671 * @since 2.5.0 672 * @abstract 673 * 674 * @param string $path Path to file or directory. 675 * @return bool Whether $path exists or not. 676 */ 677 public function exists( $path ) { 678 return false; 679 } 680 681 /** 682 * Checks if resource is a file. 683 * 684 * @since 2.5.0 685 * @abstract 686 * 687 * @param string $file File path. 688 * @return bool Whether $file is a file. 689 */ 690 public function is_file( $file ) { 691 return false; 692 } 693 694 /** 695 * Checks if resource is a directory. 696 * 697 * @since 2.5.0 698 * @abstract 699 * 700 * @param string $path Directory path. 701 * @return bool Whether $path is a directory. 702 */ 703 public function is_dir( $path ) { 704 return false; 705 } 706 707 /** 708 * Checks if a file is readable. 709 * 710 * @since 2.5.0 711 * @abstract 712 * 713 * @param string $file Path to file. 714 * @return bool Whether $file is readable. 715 */ 716 public function is_readable( $file ) { 717 return false; 718 } 719 720 /** 721 * Checks if a file or directory is writable. 722 * 723 * @since 2.5.0 724 * @abstract 725 * 726 * @param string $path Path to file or directory. 727 * @return bool Whether $path is writable. 728 */ 729 public function is_writable( $path ) { 730 return false; 731 } 732 733 /** 734 * Gets the file's last access time. 735 * 736 * @since 2.5.0 737 * @abstract 738 * 739 * @param string $file Path to file. 740 * @return int|false Unix timestamp representing last access time, false on failure. 741 */ 742 public function atime( $file ) { 743 return false; 744 } 745 746 /** 747 * Gets the file modification time. 748 * 749 * @since 2.5.0 750 * @abstract 751 * 752 * @param string $file Path to file. 753 * @return int|false Unix timestamp representing modification time, false on failure. 754 */ 755 public function mtime( $file ) { 756 return false; 757 } 758 759 /** 760 * Gets the file size (in bytes). 761 * 762 * @since 2.5.0 763 * @abstract 764 * 765 * @param string $file Path to file. 766 * @return int|false Size of the file in bytes on success, false on failure. 767 */ 768 public function size( $file ) { 769 return false; 770 } 771 772 /** 773 * Sets the access and modification times of a file. 774 * 775 * Note: If $file doesn't exist, it will be created. 776 * 777 * @since 2.5.0 778 * @abstract 779 * 780 * @param string $file Path to file. 781 * @param int $time Optional. Modified time to set for file. 782 * Default 0. 783 * @param int $atime Optional. Access time to set for file. 784 * Default 0. 785 * @return bool True on success, false on failure. 786 */ 787 public function touch( $file, $time = 0, $atime = 0 ) { 788 return false; 789 } 790 791 /** 792 * Creates a directory. 793 * 794 * @since 2.5.0 795 * @abstract 796 * 797 * @param string $path Path for new directory. 798 * @param int|false $chmod Optional. The permissions as octal number (or false to skip chmod). 799 * Default false. 800 * @param string|int|false $chown Optional. A user name or number (or false to skip chown). 801 * Default false. 802 * @param string|int|false $chgrp Optional. A group name or number (or false to skip chgrp). 803 * Default false. 804 * @return bool True on success, false on failure. 805 */ 806 public function mkdir( $path, $chmod = false, $chown = false, $chgrp = false ) { 807 return false; 808 } 809 810 /** 811 * Deletes a directory. 812 * 813 * @since 2.5.0 814 * @abstract 815 * 816 * @param string $path Path to directory. 817 * @param bool $recursive Optional. Whether to recursively remove files/directories. 818 * Default false. 819 * @return bool True on success, false on failure. 820 */ 821 public function rmdir( $path, $recursive = false ) { 822 return false; 823 } 824 825 /** 826 * Gets details for files in a directory or a specific file. 827 * 828 * @since 2.5.0 829 * @abstract 830 * 831 * @param string $path Path to directory or file. 832 * @param bool $include_hidden Optional. Whether to include details of hidden ("." prefixed) files. 833 * Default true. 834 * @param bool $recursive Optional. Whether to recursively include file details in nested directories. 835 * Default false. 836 * @return array|false { 837 * Array of arrays containing file information. False if unable to list directory contents. 838 * 839 * @type array ...$0 { 840 * Array of file information. Note that some elements may not be available on all filesystems. 841 * 842 * @type string $name Name of the file or directory. 843 * @type string $perms *nix representation of permissions. 844 * @type string $permsn Octal representation of permissions. 845 * @type int|string|false $number File number. May be a numeric string. False if not available. 846 * @type string|false $owner Owner name or ID, or false if not available. 847 * @type string|false $group File permissions group, or false if not available. 848 * @type int|string|false $size Size of file in bytes. May be a numeric string. 849 * False if not available. 850 * @type int|string|false $lastmodunix Last modified unix timestamp. May be a numeric string. 851 * False if not available. 852 * @type string|false $lastmod Last modified month (3 letters) and day (without leading 0), or 853 * false if not available. 854 * @type string|false $time Last modified time, or false if not available. 855 * @type string $type Type of resource. 'f' for file, 'd' for directory, 'l' for link. 856 * @type array|false $files If a directory and `$recursive` is true, contains another array of 857 * files. False if unable to list directory contents. 858 * } 859 * } 860 */ 861 public function dirlist( $path, $include_hidden = true, $recursive = false ) { 862 return false; 863 } 864 }
title
Description
Body
title
Description
Body
title
Description
Body
title
Body
Generated : Thu Nov 21 08:20:01 2024 | Cross-referenced by PHPXref |