Zip 파일을 처리하기 위해 PHP를 사용하는 경우 Zip_Read 기능은 항목별로 압축 패키지 항목에서 파일 항목을 읽는 데 일반적으로 사용되는 인터페이스입니다. 그러나 때로는 MacOS 시스템에서 생성 된 __macoSx 디렉토리 또는 기타 숨겨진 파일과 같은 원치 않는 폴더 또는 파일 항목이 발생합니다. 이러한 항목은 일반적으로 비즈니스 로직에 의미가 없으며 파일 처리 흐름을 방해 할 수도 있으므로 트래버스 중에 건너 뛰어야합니다.
이 기사는 Zip_Read 함수를 사용할 때 이러한 특정 파일 항목을 필터링하는 방법을 설명합니다.
다음은 zip 파일을 열고 파일 항목을 반복하는 방법을 보여주는 간단한 예입니다.
<?php
$zipPath = 'example.zip';
$zip = zip_open($zipPath);
if ($zip) {
while ($zipEntry = zip_read($zip)) {
$entryName = zip_entry_name($zipEntry);
echo "Found entry: $entryName\n";
}
zip_close($zip);
} else {
echo "Failed to open ZIP file.";
}
?>
Traversal 동안 현재 항목의 이름을 결정하고 __macosx 및 유사한 유효하지 않은 항목으로 시작하는 폴더를 제외해야합니다.
여기서 핵심은 PHP의 문자열 함수 strpos를 사용하여 항목 이름의 접두사를 감지하는 것입니다.
<?php
$zipPath = 'example.zip';
$zip = zip_open($zipPath);
if ($zip) {
while ($zipEntry = zip_read($zip)) {
$entryName = zip_entry_name($zipEntry);
// 뛰어 올라 __MACOSX 폴더의 모든 항목
if (strpos($entryName, '__MACOSX/') === 0) {
continue;
}
// 还可以뛰어 올라其他不想거래하십시오的隐藏문서,예를 들어 .DS_Store
if (basename($entryName) === '.DS_Store') {
continue;
}
// 일반 처리 코드
echo "파일 처리: $entryName\n";
// 읽기 작업을위한 항목을 열 수 있습니다,예를 들어:
if (zip_entry_open($zip, $zipEntry)) {
$contents = zip_entry_read($zipEntry, zip_entry_filesize($zipEntry));
// 거래하십시오 $contents,예를 들어保存문서
zip_entry_close($zipEntry);
}
}
zip_close($zip);
} else {
echo "열 수 없습니다 ZIP 문서";
}
?>
Zip_Read를 사용하여 Zip 항목을 하나씩 읽을 때는 입력 이름을 확인하십시오.
strpos를 사용하여 입력 이름이 __macosx/ 로 시작하는지 여부를 결정 하고이 디렉토리의 모든 파일을 건너 뜁니다.
동시에 특정 파일 이름 (예 : .ds_store )에 대해 필터링을 수행 할 수 있습니다.
이는 쓸모없는 MACOS 시스템 파일을 효과적으로 피하고 코드 견고성 및 효율성을 향상시킬 수 있습니다.