通过WordPress文件系统抽象将指定的ZIP文件解压缩到Filesystem上的某个位置。
原型
unzip_file( string $file, string $to )
描述
假设已经调用并设置了WP_Filesystem()。如果存在,则不提取根级__MACOSX目录。
参数
$file
(string)
(Required)
zip存档的完整路径和文件名
$to
(string)
(Required)
文件系统上的完整路径以提取存档
返回值
(mixed)
源文件
路径:wp-admin/includes/file.php
<?php
...
function unzip_file($file, $to) {
global $wp_filesystem;
if ( ! $wp_filesystem || !is_object($wp_filesystem) )
return new WP_Error('fs_unavailable', __('Could not access filesystem.'));
// Unzip can use a lot of memory, but not this much hopefully.
wp_raise_memory_limit( 'admin' );
$needed_dirs = array();
$to = trailingslashit($to);
// Determine any parent dir's needed (of the upgrade directory)
if ( ! $wp_filesystem->is_dir($to) ) { //Only do parents if no children exist
$path = preg_split('![/\]!', untrailingslashit($to));
for ( $i = count($path); $i >= 0; $i-- ) {
if ( empty($path[$i]) )
continue;
$dir = implode('/', array_slice($path, 0, $i+1) );
if ( preg_match('!^[a-z]:$!i', $dir) ) // Skip it if it looks like a Windows Drive letter.
continue;
if ( ! $wp_filesystem->is_dir($dir) )
$needed_dirs[] = $dir;
else
break; // A folder exists, therefor, we dont need the check the levels below this
}
}
/**
* Filters whether to use ZipArchive to unzip archives.
*
* @since 3.0.0
*
* @param bool $ziparchive Whether to use ZipArchive. Default true.
*/
if ( class_exists( 'ZipArchive', false ) && apply_filters( 'unzip_file_use_ziparchive', true ) ) {
$result = _unzip_file_ziparchive($file, $to, $needed_dirs);
if ( true === $result ) {
return $result;
} elseif ( is_wp_error($result) ) {
if ( 'incompatible_archive' != $result->get_error_code() )
return $result;
}
}
// Fall through to PclZip if ZipArchive is not available, or encountered an error opening the file.
return _unzip_file_pclzip($file, $to, $needed_dirs);
}
...
?>
其他
英文文档:https://developer.wordpress.org/reference/functions/unzip_file/