현재 위치: > 최신 기사 목록> Zip과 같은 압축 파일을 읽기 위해 File_Get_Contents를 사용하는 방법은 무엇입니까? 타당성 및 방법 분석

Zip과 같은 압축 파일을 읽기 위해 File_Get_Contents를 사용하는 방법은 무엇입니까? 타당성 및 방법 분석

gitbox 2025-08-11

file_get_contents ()는 어떻게 작동합니까?

file_get_contents () 는 간단한 파일 읽기 기능이며 기본 기능은 전체 파일의 내용을 읽고 반환하는 것입니다. 일반적으로 텍스트 파일을 읽는 데 사용되며 작은 이진 파일에도 매우 적합합니다. 그러나 큰 파일 또는 압축 파일의 경우이 기능의 효율성과 적용 가능성이 제한 될 수 있습니다.

php에서는 file_get_contents () 가 파일을 메모리에 직접로드합니다. 따라서 파일이 크면 메모리 사용이 높아서 메모리 오버플로가 발생할 수 있습니다. 압축 파일의 경우 file_get_contents ()는 단순히 이진 데이터를 읽고 내용을 직접 압축 시키거나 읽을 수 없습니다.


zip 파일을 직접 읽는 과제

zip 파일은 본질적으로 여러 파일 또는 디렉토리를 포함하는 이진 형식의 압축 파일입니다. file_get_contents ()는 전체 압축 파일의 원래 바이너리 데이터를 읽습니다. 즉, zip 파일을 직접 읽으면 압축 된 컨텐츠 대신 압축 이진 스트림이 나타납니다.

따라서 zip 파일에서 파일의 내용을 추출하려면 file_get_contents () 가이 작업을 직접 완료 할 수 없습니다. 파일을 읽을 수 있으려면 ZIP 파일의 내용을 압축해야합니다.


솔루션 : PHP를 사용한 지퍼 연장

file_get_contents () 자체는 zip 파일에서 특정 컨텐츠를 직접 읽을 수 없지만 PHP의 내장 Ziparchive 클래스를 사용하여 Zip 파일을 작동 할 수 있습니다. 이 클래스를 사용하면 zip 파일을 열고 읽고, 압축 해제 할 수 있습니다. 다음은 ZipACHIVE를 사용하여 ZIP 파일의 내용을 읽는 예입니다.

샘플 코드 :

 <span><span><span class="hljs-meta">&lt;?php</span></span><span>
</span><span><span class="hljs-variable">$zipFile</span></span><span> = </span><span><span class="hljs-string">'example.zip'</span></span><span>;  </span><span><span class="hljs-comment">// ZIP 파일 경로</span></span><span>
</span><span><span class="hljs-variable">$zip</span></span><span> = </span><span><span class="hljs-keyword">new</span></span><span> </span><span><span class="hljs-title class_">ZipArchive</span></span><span>;

</span><span><span class="hljs-keyword">if</span></span><span> (</span><span><span class="hljs-variable">$zip</span></span><span>-&gt;</span><span><span class="hljs-title function_ invoke__">open</span></span><span>(</span><span><span class="hljs-variable">$zipFile</span></span><span>) === </span><span><span class="hljs-literal">TRUE</span></span><span>) {
    </span><span><span class="hljs-comment">// 얻다 ZIP 파일의 첫 번째 파일 이름입니다</span></span><span>
    </span><span><span class="hljs-variable">$fileName</span></span><span> = </span><span><span class="hljs-variable">$zip</span></span><span>-&gt;</span><span><span class="hljs-title function_ invoke__">getNameIndex</span></span><span>(</span><span><span class="hljs-number">0</span></span><span>);  </span><span><span class="hljs-comment">// 얻다第一个문서的名称</span></span><span>

    </span><span><span class="hljs-comment">// 파일의 내용을 읽으십시오</span></span><span>
    </span><span><span class="hljs-variable">$fileContent</span></span><span> = </span><span><span class="hljs-variable">$zip</span></span><span>-&gt;</span><span><span class="hljs-title function_ invoke__">getFromName</span></span><span>(</span><span><span class="hljs-variable">$fileName</span></span><span>);

    </span><span><span class="hljs-comment">// 출력 파일 컨텐츠</span></span><span>
    </span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-variable">$fileContent</span></span><span>;

    </span><span><span class="hljs-comment">// 폐쇄 ZIP 문서</span></span><span>
    </span><span><span class="hljs-variable">$zip</span></span><span>-&gt;</span><span><span class="hljs-title function_ invoke__">close</span></span><span>();
} </span><span><span class="hljs-keyword">else</span></span><span> {
    </span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">'열 수 없습니다 ZIP 문서!'</span></span><span>;
}
</span><span><span class="hljs-meta">?&gt;</span></span><span>
</span></span>

이 예에서는 먼저 ZipACHIVE 클래스를 사용하여 Zip 파일을 열고 GetFromName () 메소드를 사용하여 Zip 파일에서 첫 번째 파일의 내용을 읽습니다. 이러한 방식으로 전체 압축 파일의 이진 데이터를 직접 읽는 대신 압축 패키지에서 파일을 쉽게 추출 할 수 있습니다.


ziparchive 와 함께 file_get_contents ()를 사용하십시오

file_get_contents () 자체는 zip 파일을 압축 할 수는 없지만 File_get_contents ()를 사용하여 zip 파일의 원래 바이너리 컨텐츠를 읽고 감압을 위해 ziparchive 클래스로 전달할 수 있습니다. 이런 식으로 File_get_Contents ()는 파일을 읽기위한 전제 조건이되고 실제 감압 작업은 Ziparchive 에 의해 완료됩니다.

샘플 코드 :

 <span><span><span class="hljs-meta">&lt;?php</span></span><span>
</span><span><span class="hljs-variable">$zipFile</span></span><span> = </span><span><span class="hljs-string">'example.zip'</span></span><span>;  </span><span><span class="hljs-comment">// ZIP 파일 경로</span></span><span>

</span><span><span class="hljs-comment">// 읽다 ZIP 문서的原始内容</span></span><span>
</span><span><span class="hljs-variable">$zipData</span></span><span> = </span><span><span class="hljs-title function_ invoke__">file_get_contents</span></span><span>(</span><span><span class="hljs-variable">$zipFile</span></span><span>);

</span><span><span class="hljs-comment">// 将읽다到的二进制数据传递给 ZipArchive 감압</span></span><span>
</span><span><span class="hljs-variable">$zip</span></span><span> = </span><span><span class="hljs-keyword">new</span></span><span> </span><span><span class="hljs-title class_">ZipArchive</span></span><span>;
</span><span><span class="hljs-variable">$tmpFile</span></span><span> = </span><span><span class="hljs-title function_ invoke__">tempnam</span></span><span>(</span><span><span class="hljs-title function_ invoke__">sys_get_temp_dir</span></span><span>(), </span><span><span class="hljs-string">'zip'</span></span><span>);  </span><span><span class="hljs-comment">// 创建一个临时문서</span></span><span>

</span><span><span class="hljs-title function_ invoke__">file_put_contents</span></span><span>(</span><span><span class="hljs-variable">$tmpFile</span></span><span>, </span><span><span class="hljs-variable">$zipData</span></span><span>);  </span><span><span class="hljs-comment">// 将읽다的二进制数据写入临时문서</span></span><span>

</span><span><span class="hljs-keyword">if</span></span><span> (</span><span><span class="hljs-variable">$zip</span></span><span>-&gt;</span><span><span class="hljs-title function_ invoke__">open</span></span><span>(</span><span><span class="hljs-variable">$tmpFile</span></span><span>) === </span><span><span class="hljs-literal">TRUE</span></span><span>) {
    </span><span><span class="hljs-comment">// 얻다 ZIP 파일의 첫 번째 파일 이름입니다</span></span><span>
    </span><span><span class="hljs-variable">$fileName</span></span><span> = </span><span><span class="hljs-variable">$zip</span></span><span>-&gt;</span><span><span class="hljs-title function_ invoke__">getNameIndex</span></span><span>(</span><span><span class="hljs-number">0</span></span><span>);  </span><span><span class="hljs-comment">// 얻다第一个문서的名称</span></span><span>

    </span><span><span class="hljs-comment">// 파일의 내용을 읽으십시오</span></span><span>
    </span><span><span class="hljs-variable">$fileContent</span></span><span> = </span><span><span class="hljs-variable">$zip</span></span><span>-&gt;</span><span><span class="hljs-title function_ invoke__">getFromName</span></span><span>(</span><span><span class="hljs-variable">$fileName</span></span><span>);

    </span><span><span class="hljs-comment">// 출력 파일 컨텐츠</span></span><span>
    </span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-variable">$fileContent</span></span><span>;

    </span><span><span class="hljs-comment">// 폐쇄 ZIP 문서</span></span><span>
    </span><span><span class="hljs-variable">$zip</span></span><span>-&gt;</span><span><span class="hljs-title function_ invoke__">close</span></span><span>();

    </span><span><span class="hljs-comment">// 删除临时문서</span></span><span>
    </span><span><span class="hljs-title function_ invoke__">unlink</span></span><span>(</span><span><span class="hljs-variable">$tmpFile</span></span><span>);
} </span><span><span class="hljs-keyword">else</span></span><span> {
    </span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">'열 수 없습니다 ZIP 문서!'</span></span><span>;
}
</span><span><span class="hljs-meta">?&gt;</span></span><span>
</span></span>

이 예에서는 먼저 file_get_contents () 를 통해 zip 파일의 이진 데이터를 읽은 다음 데이터를 임시 파일에 씁니다. 다음으로 ziparchive 클래스를 사용 하여이 임시 파일을 열고 내용을 읽습니다. 이런 식으로 File_get_Contents ()는 원시 데이터를 읽는 도구가되며 감압 작업은 여전히 Ziparchive에 넘겨집니다.