Zip64Test.php 1.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354
  1. <?php
  2. namespace PhpZip\Tests;
  3. use PhpZip\Constants\ZipCompressionMethod;
  4. use PhpZip\Exception\ZipException;
  5. use PhpZip\ZipFile;
  6. /**
  7. * Class Zip64Test.
  8. *
  9. * @internal
  10. *
  11. * @medium
  12. */
  13. class Zip64Test extends ZipTestCase
  14. {
  15. /**
  16. * Test support ZIP64 ext (slow test - normal).
  17. * Create > 65535 files in archive and open and extract to /dev/null.
  18. *
  19. * @throws ZipException
  20. */
  21. public function testOver65535FilesInZip()
  22. {
  23. if (\PHP_INT_SIZE === 4) { // php 32 bit
  24. static::markTestSkipped('Only php-64 bit.');
  25. return;
  26. }
  27. $countFiles = 0xffff + 1;
  28. $zipFile = new ZipFile();
  29. for ($i = 0; $i < $countFiles; $i++) {
  30. $zipFile->addFromString($i . '.txt', (string) $i, ZipCompressionMethod::STORED);
  31. }
  32. $zipFile->saveAsFile($this->outputFilename);
  33. $zipFile->close();
  34. static::assertCorrectZipArchive($this->outputFilename);
  35. $zipFile->openFile($this->outputFilename);
  36. static::assertSame($zipFile->count(), $countFiles);
  37. $i = 0;
  38. foreach ($zipFile as $entry => $content) {
  39. static::assertSame($entry, $i . '.txt');
  40. static::assertSame($content, (string) $i);
  41. $i++;
  42. }
  43. $zipFile->close();
  44. }
  45. }