致命错误:未找到类“ZipArchive”(PHP 5.3.1)

时间:2011-01-29 01:54:34

标签: php wordpress ziparchive

当运行以下功能时,我收到...致命错误:在/home/test/dummyurl.com/wp-content/themes/mytheme/upload-zip.php上找不到类'ZipArchive'第14行

PHP版本是5.3.1

 function openZip($file_to_open) { 
  global $target;  
  $zip = new ZipArchive();  //This is line 14
  $x = $zip->open($file_to_open);  
  if($x === true) {  
   $zip->extractTo($target);  
   $zip->close();       
   unlink($file_to_open);  
  } else {  
   die("There was a problem. Please try again!");  
  }  
 }  

这是一个wordpress应用程序,我想我也许可以使用内置函数(见下文),但仍然不确定为什么上面缺少ZipArchive类...

 /**
  * Unzip's a specified ZIP file to a location on the Filesystem via the WordPress Filesystem Abstraction.
  * Assumes that WP_Filesystem() has already been called and set up. Does not extract a root-level __MACOSX directory, if present.
  *
  * Attempts to increase the PHP Memory limit to 256M before uncompressing,
  * However, The most memory required shouldn't be much larger than the Archive itself.
  *
  * @since 2.5.0
  *
  * @param string $file Full path and filename of zip archive
  * @param string $to Full path on the filesystem to extract archive to
  * @return mixed WP_Error on failure, True on success
  */
 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
  @ini_set('memory_limit', '256M');

  $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
   }
  }

  if ( class_exists('ZipArchive') && 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);
 }

2 个答案:

答案 0 :(得分:2)

要启用ZipArchive,您需要使用--enable-zip选项as stated in the documentation编译PHP。

或者,您可以安装zip PECL package

答案 1 :(得分:0)

你必须启用php扩展

1)php_zip

2)php_zlib_filters