Switch language

wpseek.com
A WordPress-centric search engine for devs and theme authors




_unzip_file_ziparchive [ WordPress Function ]

_unzip_file_ziparchive ( $file, $to, $needed_dirs = array() )
Access:
  • private
Parameters:
  • (string) $file Full path and filename of zip archive
  • (string) $to Full path on the filesystem to extract archive to
  • (array) $needed_dirs A partial list of required folders needed to be created.
See:
Returns:
  • (mixed) WP_Error on failure, True on success
Defined at:



This function should not be called directly, use unzip_file instead. Attempts to unzip an archive using the ZipArchive class.

Assumes that WP_Filesystem() has already been called and set up.

Source


<?php
function _unzip_file_ziparchive($file$to$needed_dirs = array() ) {
    global 
$wp_filesystem;

    
$z = new ZipArchive();

    
// PHP4-compat - php4 classes can't contain constants
    
$zopen $z->open($file/* ZIPARCHIVE::CHECKCONS */ 4);
    if ( 
true !== $zopen )
        return new 
WP_Error('incompatible_archive'__('Incompatible Archive.'));

    for ( 
$i 0$i $z->numFiles$i++ ) {
        if ( ! 
$info $z->statIndex($i) )
            return new 
WP_Error('stat_failed'__('Could not retrieve file from archive.'));

        if ( 
'__MACOSX/' === substr($info['name'], 09) ) // Skip the OS X-created __MACOSX directory
            
continue;

        if ( 
'/' == substr($info['name'], -1) ) // directory
            
$needed_dirs[] = $to untrailingslashit($info['name']);
        else
            
$needed_dirs[] = $to untrailingslashit(dirname($info['name']));
    }

    
$needed_dirs array_unique($needed_dirs);
    foreach ( 
$needed_dirs as $dir ) {
        
// Check the parent folders of the folders all exist within the creation array.
        
if ( untrailingslashit($to) == $dir // Skip over the working directory, We know this exists (or will exist)
            
continue;
        if ( 
strpos($dir$to) === false // If the directory is not within the working directory, Skip it
            
continue;

        
$parent_folder dirname($dir);
        while ( !empty(
$parent_folder) && untrailingslashit($to) != $parent_folder && !in_array($parent_folder$needed_dirs) ) {
            
$needed_dirs[] = $parent_folder;
            
$parent_folder dirname($parent_folder);
        }
    }
    
asort($needed_dirs);

    
// Create those directories if need be:
    
foreach ( $needed_dirs as $_dir ) {
        if ( ! 
$wp_filesystem->mkdir($_dirFS_CHMOD_DIR) && ! $wp_filesystem->is_dir($_dir) ) // Only check to see if the Dir exists upon creation failure. Less I/O this way.
            
return new WP_Error('mkdir_failed'__('Could not create directory.'), $_dir);
    }
    unset(
$needed_dirs);

    for ( 
$i 0$i $z->numFiles$i++ ) {
        if ( ! 
$info $z->statIndex($i) )
            return new 
WP_Error('stat_failed'__('Could not retrieve file from archive.'));

        if ( 
'/' == substr($info['name'], -1) ) // directory
            
continue;

        if ( 
'__MACOSX/' === substr($info['name'], 09) ) // Don't extract the OS X-created __MACOSX directory files
            
continue;

        
$contents $z->getFromIndex($i);
        if ( 
false === $contents )
            return new 
WP_Error('extract_failed'__('Could not extract file from archive.'), $info['name']);

        if ( ! 
$wp_filesystem->put_contents$to $info['name'], $contentsFS_CHMOD_FILE) )
            return new 
WP_Error('copy_failed'__('Could not copy file.'), $to $info['name']);
    }

    
$z->close();

    return 
true;
}
?>

Examples [ wp-snippets.com ]

Top Google zoekresultaten

Meer ...

Gebruikersdiscussies [ wordpress.org ]

0 User Note(s)

Nog geen één. Wees de eerste!

Nieuw toevoegen ...



HTML5 Powered with CSS3 / Styling, Performance & Integration, and Semantics