>  기사  >  백엔드 개발  >  PHP 압축 해제 zip이 깨졌을 경우 어떻게 해야 할까요?

PHP 압축 해제 zip이 깨졌을 경우 어떻게 해야 할까요?

藏色散人
藏色散人원래의
2021-03-18 11:00:172847검색

PHP로 압축을 풀 때 왜곡된 우편번호에 대한 해결 방법: 먼저 해당 PHP 파일을 연 다음 PHP의 zip 캡슐화 프로토콜을 사용하여 압축을 풀어 왜곡된 ZipArchive 코드를 해결합니다.

PHP 압축 해제 zip이 깨졌을 경우 어떻게 해야 할까요?

이 글의 운영 환경: Windows 7 시스템, PHP 버전 7.1, DELL G3 컴퓨터

php 압축 해제된 zip 파일이 깨지는 문제

공식 운영 방법:

<?php
$zip = new \ZipArchive;
$zipfile = "./test.zip";
$res = $zip->open($zipfile);
$toDir = "./test";
$s = $zip->extractTo($toDir);
print_r(scandir($toDir));

기존 문제

zip이 압축되지 않은 경우 Windows 플랫폼에서 압축된 경우 Linux 서버에서 위 코드를 실행하면 문자가 깨져서 압축이 풀린 파일도 누락됩니다. 해결 방법 파일 시스템은 gbk로 인코딩되어 있고 PHP ZipArchive의 파일 이름은 UTF-입니다. 8 인코딩되었습니다. Zip 아카이브의 파일 이름에 중국어와 같은 특수 문자가 포함되어 있는 경우, 왜곡된 문자의 압축을 풀기 위해 PHP ZipArchive를 사용하는 것은 불가피합니다. ZipArchive 압축 파일이 왜곡되거나 압축할 수 없는 경우에도 동일한 이유가 적용됩니다.

해결책ZipArchive 문서의 압축을 풀기 위해 내장된 ZipArchive::extractTo() 메서드를 사용하지 마세요. 대신 PHP의 zip 캡슐화 프로토콜을 사용하여 ZipArchive의 압축을 풀세요. 파일이 깨졌습니다.

코드 풀기

<?php
$zip = new \ZipArchive;
$zipfile = "./test.zip";
$res = $zip->open($zipfile);
$toDir = "./test";
if(!file_exists($toDir)) {
   mkdir($toDir);
}
$docnum = $zip->numFiles;
for($i = 0; $i < $docnum; $i++) {
   $statInfo = $zip->statIndex($i);
   if($statInfo[&#39;crc&#39;] == 0) {
       //新建目录
       mkdir($toDir.&#39;/&#39;.substr($statInfo[&#39;name&#39;], 0,-1));
   } else {
       //拷贝文件
       copy(&#39;zip://&#39;.$zipfile.&#39;#&#39;.$statInfo[&#39;name&#39;], $toDir.&#39;/&#39;.$statInfo[&#39;name&#39;]);
   }
}
print_r(scandir($toDir));

추천 학습: "

PHP 비디오 튜토리얼

"

위 내용은 PHP 압축 해제 zip이 깨졌을 경우 어떻게 해야 할까요?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.