示例#1
0
 public function testAppendToCurrentFifo()
 {
     if (!$this->canWrite) {
         return;
     }
     if (!ezcBaseFeatures::hasFunction('posix_mknod')) {
         return;
     }
     $dir = $this->getTempDir();
     posix_mknod("{$dir}/myfifo", POSIX_S_IFIFO);
     $fifo = "{$dir}/my_fifo.tar";
     $bf = new ezcArchiveBlockFile($fifo, true);
     $archive = ezcArchive::getTarInstance($bf, $this->tarMimeFormat);
     $archive->appendToCurrent("{$dir}/myfifo", "{$dir}");
     $archive->close();
     // Do the same with gnu tar.
     exec("tar -cf {$dir}/gnutar.tar --format=" . $this->tarFormat . " -C {$dir}/ myfifo");
     $this->assertEquals(file_get_contents("{$dir}/gnutar.tar"), file_get_contents($fifo));
     unlink("{$dir}/myfifo");
 }
示例#2
0
 public function testAppendArchiveAtOnce()
 {
     if (!$this->canWrite) {
         try {
             $this->complexArchive->truncate();
             $this->fail("Cannot write exception expected");
         } catch (ezcBaseFilePermissionException $e) {
             // Okay, some exception thrown.
         }
         return;
     }
     $dir = $this->getTempDir();
     $src = $dir . "/src";
     mkdir($src);
     $files = array();
     do {
         $this->complexArchive->extractCurrent($src);
         $files[] = $src . '/' . $this->complexArchive->current()->getPath();
     } while ($this->complexArchive->next());
     $mytar = "{$dir}/my_archive.tar";
     $bf = new ezcArchiveBlockFile($mytar, true);
     $archive = ezcArchive::getTarInstance($bf, $this->tarMimeFormat);
     $archive->appendToCurrent($files, $src);
     $archive->close();
     exec("tar -cf {$dir}/gnutar.tar --format=" . $this->tarFormat . " -C {$src} files");
     $this->assertEquals(file_get_contents("{$dir}/gnutar.tar"), file_get_contents($mytar));
     unset($archive);
     unset($bf);
 }
示例#3
0
 public function testExtractLongLinkName()
 {
     $dir = $this->getTempDir();
     if ($this->isWindows()) {
         $dirname = "aaaaabbbbbaaaaabbbbbaaaaabbbbb";
         // 30 char. max paths shorter in Windows
         $filename = "cccccdddddcccccdddddcccccddddd";
         // 30 char. max paths shorter in Windows
         mkdir("{$dir}\\{$dirname}\\{$dirname}\\{$dirname}", 0777, true);
         touch("{$dir}\\{$dirname}\\{$dirname}\\{$dirname}\\{$filename}");
         copy("{$dir}\\{$dirname}\\{$dirname}\\{$dirname}\\{$filename}", "{$dir}/mylink");
     } else {
         $dirname = "aaaaaaaaaabbbbbbbbbbaaaaaaaaaabbbbbbbbbbaaaaaaaaaabbbbbbbbbb";
         // 60 char.
         mkdir("{$dir}/{$dirname}/{$dirname}/{$dirname}", 0777, true);
         $filename = "ccccccccccddddddddddccccccccccddddddddddccccccccccdddddddddd";
         // 60 char.
         touch("{$dir}/{$dirname}/{$dirname}/{$dirname}/{$filename}");
         symlink("{$dirname}/{$dirname}/{$dirname}/{$filename}", "{$dir}/mylink");
     }
     exec("tar -cf {$dir}/gnutar.tar --format=" . $this->tarFormat . " -C {$dir} mylink");
     unlink("{$dir}/{$dirname}/{$dirname}/{$dirname}/{$filename}");
     rmdir("{$dir}/{$dirname}/{$dirname}/{$dirname}");
     rmdir("{$dir}/{$dirname}/{$dirname}");
     rmdir("{$dir}/{$dirname}");
     // Extract it:
     $bf = new ezcArchiveBlockFile("{$dir}/gnutar.tar");
     $archive = ezcArchive::getTarInstance($bf, $this->tarMimeFormat);
     foreach ($archive as $entry) {
         $archive->extractCurrent($dir);
     }
     $this->assertTrue(is_link("{$dir}/mylink"));
     $this->assertEquals("{$dirname}/{$dirname}/{$dirname}/{$filename}", readlink("{$dir}/mylink"));
     unset($bf);
 }