Wordpress 3.5.2
[autoinstalls/wordpress.git] / wp-admin / includes / file.php
index 9ff24384ccd5682c0361789d8819f373da65f56f..96b6db45c032c70559bdffc601eec01cb907d90c 100644 (file)
@@ -1,6 +1,8 @@
 <?php
 /**
 <?php
 /**
- * File contains all the administration image manipulation functions.
+ * Functions for reading, writing, modifying, and deleting files on the file system.
+ * Includes functionality for theme-specific files as well as operations for uploading,
+ * archiving, and rendering output when necessary.
  *
  * @package WordPress
  * @subpackage Administration
  *
  * @package WordPress
  * @subpackage Administration
@@ -79,10 +81,10 @@ function get_file_description( $file ) {
 function get_home_path() {
        $home = get_option( 'home' );
        $siteurl = get_option( 'siteurl' );
 function get_home_path() {
        $home = get_option( 'home' );
        $siteurl = get_option( 'siteurl' );
-       if ( $home != '' && $home != $siteurl ) {
-               $wp_path_rel_to_home = str_replace($home, '', $siteurl); /* $siteurl - $home */
-               $pos = strrpos($_SERVER["SCRIPT_FILENAME"], $wp_path_rel_to_home);
-               $home_path = substr($_SERVER["SCRIPT_FILENAME"], 0, $pos);
+       if ( ! empty( $home ) && 0 !== strcasecmp( $home, $siteurl ) ) {
+               $wp_path_rel_to_home = str_ireplace( $home, '', $siteurl ); /* $siteurl - $home */
+               $pos = strripos( str_replace( '\\', '/', $_SERVER['SCRIPT_FILENAME'] ), trailingslashit( $wp_path_rel_to_home ) );
+               $home_path = substr( $_SERVER['SCRIPT_FILENAME'], 0, $pos );
                $home_path = trailingslashit( $home_path );
        } else {
                $home_path = ABSPATH;
                $home_path = trailingslashit( $home_path );
        } else {
                $home_path = ABSPATH;
@@ -225,6 +227,7 @@ function validate_file_to_edit( $file, $allowed_files = '' ) {
  * @uses delete_transient
  * @param array $file Reference to a single element of $_FILES. Call the function once for each uploaded file.
  * @param array $overrides Optional. An associative array of names=>values to override default variables with extract( $overrides, EXTR_OVERWRITE ).
  * @uses delete_transient
  * @param array $file Reference to a single element of $_FILES. Call the function once for each uploaded file.
  * @param array $overrides Optional. An associative array of names=>values to override default variables with extract( $overrides, EXTR_OVERWRITE ).
+ * @param string $time Optional. Time formatted in 'yyyy/mm'.
  * @return array On success, returns an associative array of file attributes. On failure, returns $overrides['upload_error_handler'](&$file, $message ) or array( 'error'=>$message ).
  */
 function wp_handle_upload( &$file, $overrides = false, $time = null ) {
  * @return array On success, returns an associative array of file attributes. On failure, returns $overrides['upload_error_handler'](&$file, $message ) or array( 'error'=>$message ).
  */
 function wp_handle_upload( &$file, $overrides = false, $time = null ) {
@@ -325,8 +328,14 @@ function wp_handle_upload( &$file, $overrides = false, $time = null ) {
 
        // Move the file to the uploads dir
        $new_file = $uploads['path'] . "/$filename";
 
        // Move the file to the uploads dir
        $new_file = $uploads['path'] . "/$filename";
-       if ( false === @ move_uploaded_file( $file['tmp_name'], $new_file ) )
-               return $upload_error_handler( $file, sprintf( __('The uploaded file could not be moved to %s.' ), $uploads['path'] ) );
+       if ( false === @ move_uploaded_file( $file['tmp_name'], $new_file ) ) {
+               if ( 0 === strpos( $uploads['basedir'], ABSPATH ) )
+                       $error_path = str_replace( ABSPATH, '', $uploads['basedir'] ) . $uploads['subdir'];
+               else
+                       $error_path = basename( $uploads['basedir'] ) . $uploads['subdir'];
+
+               return $upload_error_handler( $file, sprintf( __('The uploaded file could not be moved to %s.' ), $error_path ) );
+       }
 
        // Set correct file permissions
        $stat = stat( dirname( $new_file ));
 
        // Set correct file permissions
        $stat = stat( dirname( $new_file ));
@@ -357,9 +366,10 @@ function wp_handle_upload( &$file, $overrides = false, $time = null ) {
  * @uses wp_unique_filename
  * @param array $file an array similar to that of a PHP $_FILES POST array
  * @param array $overrides Optional. An associative array of names=>values to override default variables with extract( $overrides, EXTR_OVERWRITE ).
  * @uses wp_unique_filename
  * @param array $file an array similar to that of a PHP $_FILES POST array
  * @param array $overrides Optional. An associative array of names=>values to override default variables with extract( $overrides, EXTR_OVERWRITE ).
+ * @param string $time Optional. Time formatted in 'yyyy/mm'.
  * @return array On success, returns an associative array of file attributes. On failure, returns $overrides['upload_error_handler'](&$file, $message ) or array( 'error'=>$message ).
  */
  * @return array On success, returns an associative array of file attributes. On failure, returns $overrides['upload_error_handler'](&$file, $message ) or array( 'error'=>$message ).
  */
-function wp_handle_sideload( &$file, $overrides = false ) {
+function wp_handle_sideload( &$file, $overrides = false, $time = null ) {
        // The default error handler.
        if (! function_exists( 'wp_handle_upload_error' ) ) {
                function wp_handle_upload_error( &$file, $message ) {
        // The default error handler.
        if (! function_exists( 'wp_handle_upload_error' ) ) {
                function wp_handle_upload_error( &$file, $message ) {
@@ -436,7 +446,7 @@ function wp_handle_sideload( &$file, $overrides = false ) {
        }
 
        // A writable uploads dir will pass this test. Again, there's no point overriding this one.
        }
 
        // A writable uploads dir will pass this test. Again, there's no point overriding this one.
-       if ( ! ( ( $uploads = wp_upload_dir() ) && false === $uploads['error'] ) )
+       if ( ! ( ( $uploads = wp_upload_dir( $time ) ) && false === $uploads['error'] ) )
                return $upload_error_handler( $file, $uploads['error'] );
 
        $filename = wp_unique_filename( $uploads['path'], $file['name'], $unique_filename_callback );
                return $upload_error_handler( $file, $uploads['error'] );
 
        $filename = wp_unique_filename( $uploads['path'], $file['name'], $unique_filename_callback );
@@ -448,7 +458,11 @@ function wp_handle_sideload( &$file, $overrides = false ) {
        // Move the file to the uploads dir
        $new_file = $uploads['path'] . "/$filename";
        if ( false === @ rename( $file['tmp_name'], $new_file ) ) {
        // Move the file to the uploads dir
        $new_file = $uploads['path'] . "/$filename";
        if ( false === @ rename( $file['tmp_name'], $new_file ) ) {
-               return $upload_error_handler( $file, sprintf( __('The uploaded file could not be moved to %s.' ), $uploads['path'] ) );
+               if ( 0 === strpos( $uploads['basedir'], ABSPATH ) )
+                       $error_path = str_replace( ABSPATH, '', $uploads['basedir'] ) . $uploads['subdir'];
+               else
+                       $error_path = basename( $uploads['basedir'] ) . $uploads['subdir'];
+               return $upload_error_handler( $file, sprintf( __('The uploaded file could not be moved to %s.' ), $error_path ) );
        }
 
        // Set correct file permissions
        }
 
        // Set correct file permissions
@@ -483,7 +497,7 @@ function download_url( $url, $timeout = 300 ) {
        if ( ! $tmpfname )
                return new WP_Error('http_no_file', __('Could not create Temporary file.'));
 
        if ( ! $tmpfname )
                return new WP_Error('http_no_file', __('Could not create Temporary file.'));
 
-       $response = wp_remote_get( $url, array( 'timeout' => $timeout, 'stream' => true, 'filename' => $tmpfname ) );
+       $response = wp_remote_get( $url, array( 'timeout' => $timeout, 'stream' => true, 'filename' => $tmpfname, 'reject_unsafe_urls' => true ) );
 
        if ( is_wp_error( $response ) ) {
                unlink( $tmpfname );
 
        if ( is_wp_error( $response ) ) {
                unlink( $tmpfname );