Example #1
0
 /**
  * Extract files from archive to target directory
  *
  * @param string $pathExtracted Absolute path of target directory
  * @return mixed  Array of filenames if successful; or 0 if an error occurred
  */
 public function extract($pathExtracted)
 {
     if (substr($pathExtracted, -1) !== '/') {
         $pathExtracted .= '/';
     }
     $fileselector = array();
     $list = array();
     $count = $this->ziparchive->numFiles;
     if ($count === 0) {
         return 0;
     }
     for ($i = 0; $i < $count; $i++) {
         $entry = $this->ziparchive->statIndex($i);
         $filename = str_replace('\\', '/', $entry['name']);
         $parts = explode('/', $filename);
         if (!strncmp($filename, '/', 1) || array_search('..', $parts) !== false || strpos($filename, ':') !== false) {
             return 0;
         }
         $fileselector[] = $entry['name'];
         $list[] = array('filename' => $pathExtracted . $entry['name'], 'stored_filename' => $entry['name'], 'size' => $entry['size'], 'compressed_size' => $entry['comp_size'], 'mtime' => $entry['mtime'], 'index' => $i, 'crc' => $entry['crc']);
     }
     $res = $this->ziparchive->extractTo($pathExtracted, $fileselector);
     if ($res === false) {
         return 0;
     }
     return $list;
 }
Example #2
0
 /**
  * @group Core
  */
 public function testUnzipEmptyFile()
 {
     clearstatcache();
     $filename = dirname(__FILE__) . '/Unzip/empty.zip';
     $extractDir = PIWIK_USER_PATH . '/tmp/latest/';
     $unzip = new ZipArchive($filename);
     $res = $unzip->extract($extractDir);
     $this->assertEquals(0, $res);
 }