소스 검색

Merge branch 'master' into develop

Ne-Lexa 7 년 전
부모
커밋
650fab4bad
2개의 변경된 파일58개의 추가작업 그리고 1개의 파일을 삭제
  1. 3 1
      src/PhpZip/Model/Entry/ZipNewEntry.php
  2. 55 0
      tests/PhpZip/ZipRemoteFileTest.php

+ 3 - 1
src/PhpZip/Model/Entry/ZipNewEntry.php

@@ -41,7 +41,9 @@ class ZipNewEntry extends ZipAbstractEntry
     public function getEntryContent()
     {
         if (is_resource($this->content)) {
-            rewind($this->content);
+            if (stream_get_meta_data($this->content)['seekable']) {
+                rewind($this->content);
+            }
             return stream_get_contents($this->content);
         }
         return $this->content;

+ 55 - 0
tests/PhpZip/ZipRemoteFileTest.php

@@ -0,0 +1,55 @@
+<?php
+
+namespace PhpZip;
+
+use PhpZip\Exception\ZipException;
+use PhpZip\Util\Iterator\IgnoreFilesFilterIterator;
+use PhpZip\Util\Iterator\IgnoreFilesRecursiveFilterIterator;
+
+/**
+ * Test add remote files to zip archive
+ */
+class ZipRemoteFileTest extends ZipTestCase
+{
+
+    protected function setUp()
+    {
+        parent::setUp();
+    }
+
+    /**
+     * @throws ZipException
+     */
+    public function testAddRemoteFileFromStream()
+    {
+        $zipFile = new ZipFile();
+        $outputZip = $this->outputFilename;
+        $fileUrl = 'https://raw.githubusercontent.com/Ne-Lexa/php-zip/master/README.md';
+        $fp = @fopen($fileUrl, 'rb', false, stream_context_create([
+            'http' => [
+                'timeout' => 3,
+            ]
+        ]));
+        if ($fp === false) {
+            self::markTestSkipped(sprintf(
+                "Could not fetch remote file: %s",
+                $fileUrl
+            ));
+            return;
+        }
+
+        $fileName = 'remote-file-from-http-stream.md';
+        $zipFile->addFromStream($fp, $fileName);
+
+        $zipFile->saveAsFile($outputZip);
+        $zipFile->close();
+
+        $zipFile = new ZipFile();
+        $zipFile->openFile($outputZip);
+        $files = $zipFile->getListFiles();
+        self::assertCount(1, $files);
+        self::assertSame($fileName, $files[0]);
+        $zipFile->close();
+    }
+
+}