PHP에서 Zip_Read () 함수는 Zip 아카이브의 항목을 읽는 데 사용됩니다. 이 기능은 시스템의 기본 zip 라이브러리에 의존하므로 운영 체제마다 호환성 차이가 발생할 수 있습니다. 이 기사는 Windows 및 Linux 플랫폼에서 Zip_read ()를 사용할 때 일반적인 호환성 문제를 분석하는 데 중점을두고 해당 솔루션을 제공합니다.
Zip_Read () 는 php의 zip 확장의 일부입니다. Windows 및 Linux 플랫폼의 확장자 설치 및 구성에는 차이가 있습니다.
Windows : 일반적으로 php_zip.dll 확장자를 수동으로 활성화하고 확장 경로가 php.ini 파일에 올바르게 구성되어 있는지 확인해야합니다.
LINUX : 대부분의 분배가 패키지 관리자를 통해 PHP를 설치하면 Zip Extensions (예 : PHP-ZIP )가 자동으로 설치되어 활성화됩니다. 그러나 다른 Linux 배포판 및 PHP 버전은 확장 버전에서 불일치가 발생하여 기능의 성능에 영향을 줄 수 있습니다.
zip_read () 함수의 구현은 기본 libzip 라이브러리에 따라 다릅니다.
Windows의 PHP는 다른 버전의 libzip 또는 자체 내장 지퍼 구현을 사용할 수 있습니다.
Linux의 Libzip 버전은 일반적으로 시스템 패키지 관리자가 제공하며 다양한 버전이 있습니다.
결과는 다음과 같습니다.
행동 차이 : 특정 ZIP 형식에 대한 일관되지 않은 지원과 같은 일부 압축 알고리즘 호환성 문제.
오류 처리 : 동일한 ZIP 파일의 다른 플랫폼에서 다른 읽기 오류가 발생할 수 있습니다.
zip 파일의 파일 경로는 일반적으로 사용 / 구분 기호로 사용됩니다. 그러나 입력 이름을 읽을 때 다른 시스템의 경로 처리 방법은 일치하지 않습니다.
Windows 플랫폼은 \를 경로 분리기로 사용하는 데 사용됩니다.
Linux 플랫폼은 / 입니다.
zip_read () 가 반환 한 항목 이름은 일반적으로 표준 형식이지만 파일 경로를 처리 할 때 경로 스티치 오류를 피하기 위해 경로 변환에주의를 기울여야합니다.
zip 파일 내부 인코딩 파일 이름은 특히 플랫폼에서 zip 파일을 만들 때 통합되지 않을 수 있습니다.
Windows 플랫폼의 Zip 도구는 종종 GBK 또는 기타 로컬 인코딩을 사용합니다.
Linux 시스템은 주로 UTF-8 인코딩을 사용합니다.
zip_read ()에 의해 반환 된 파일 이름이 일치하지 않으면 코드가 나오거나 실패를 읽습니다. 일반적으로 변환 인코딩을 위해 MB_CONVERT_ENCODING () 함수를 결합해야합니다.
Linux Zip 파일에는 일반적으로 더 많은 파일 권한 정보가 포함되지만 Windows는 적습니다. 이것은 다음으로 이어질 수 있습니다.
zip_entry_stat ()을 사용하는 경우 리턴 된 파일 권한 정보는 Windows 및 Linux에서 다릅니다.
감압 후 파일 권한 처리 로직을 시스템에 따라 조정해야합니다.
다음은 플랫폼 전체에서 ZIP 파일 항목을 읽기위한 PHP 코드 예제를 보여 주며 경로를 피하고 문제를 인코딩하는 방법을 보여줍니다.
<?php
$zipPath = '/path/to/your/file.zip';
$zip = zip_open($zipPath);
if ($zip) {
while ($zipEntry = zip_read($zip)) {
$name = zip_entry_name($zipEntry);
// 처리 경로 분리기,통일 된 사용 /
$name = str_replace('\\', '/', $name);
// 프로세스 파일 이름 인코딩(가정 Windows 다음은 GBK 코딩)
if (strtoupper(substr(PHP_OS, 0, 3)) === 'WIN') {
$name = mb_convert_encoding($name, 'UTF-8', 'GBK');
}
echo "Entry: " . htmlspecialchars($name) . "\n";
}
zip_close($zip);
} else {
echo "열 수 없습니다 ZIP 문서\n";
}
?>
참고 : 실제 배포 중에 ZIP 파일 소스 및 대상 환경을 기반으로 인코딩 변환 부분의 논리를 조정하는 것이 좋습니다.
PHP ZIP 확장에 대한 자세한 내용은 공식 문서에 액세스 할 수 있습니다.