압축 파일을 처리 할 때 PHP는 .zip 파일의 판독 및 작동을 지원하기 위해 강력한 지퍼 확장을 제공합니다. 이 기사는 Zip_Read () 함수의 사용법을 깊이 설명하고 다른 관련 기능과 협력하여 ZIP 파일의 각 항목을 가로 지르고 내용 또는 정보를 추출하는 방법을 보여줍니다.
Zip_read ()를 사용하기 전에 PHP 환경에 Zip 확장이 활성화되어 있는지 확인하십시오. 확실하지 않은 경우 다음 코드를 사용하여 확장자가로드되었는지 확인할 수 있습니다.
<?php
if (class_exists('ZipArchive')) {
echo "Zip 확장 활성화";
} else {
echo "Zip 확장이 활성화되지 않았습니다";
}
?>
반환 결과가 "zip 확장 프로그램이 활성화되지 않음"인 경우 php.ini 파일에서 관련 확장을 활성화하거나 PHP를 설치할 때 -with-zip 옵션을 추가해야합니다.
Zip_Read ()는 Zip_Open () 및 Zip_entry_* 시리즈 함수와 함께 사용됩니다. 그 목적은 열린 .zip 파일의 항목을 읽는 것입니다. 각 호출은 False가 더 이상 읽을 항목이 없음을 나타내는 다음 항목의 리소스 핸들을 반환합니다.
다음은 .zip 파일을 열고 모든 항목을 반복하고 각 항목의 이름과 내용을 읽는 방법을 보여주는 완전한 예입니다.
<?php
$zipFile = '/path/to/example.zip'; // 지역으로 교체하십시오 zip 파일 경로
$zip = zip_open($zipFile);
if (is_resource($zip)) {
while ($zip_entry = zip_read($zip)) {
echo "<strong>파일 이름:</strong> " . zip_entry_name($zip_entry) . "<br>";
if (zip_entry_open($zip, $zip_entry, "r")) {
$contents = zip_entry_read($zip_entry, zip_entry_filesize($zip_entry));
echo "<strong>컨텐츠 미리보기:</strong><br><pre>" . htmlentities(substr($contents, 0, 500)) . "</pre><hr>";
zip_entry_close($zip_entry);
}
}
zip_close($zip);
} else {
echo "압축 파일을 열 수 없습니다。";
}
?>
Zip_Read () 와 함께 사용되는 주요 기능은 다음과 같습니다.
zip_open (String $ filename) : Zip 파일을 열고 리소스 핸들을 반환합니다.
Zip_Read (Resource $ Zip) : Zip 파일 자원에서 다음 항목을 읽으십시오.
zip_entry_name (resource $ entry) : 현재 항목의 파일 이름을 가져옵니다.
zip_entry_open (resource $ zip, resource $ entry, string $ mode) : 항목을 열고 컨텐츠를 읽을 준비를합니다.
zip_entry_read (resource $ entry, int $ length) : 현재 열린 항목의 내용을 읽습니다.
zip_entry_close (Resource $ entry) : 열기 항목을 닫으십시오.
Zip_Close (Resource $ Zip) : Zip 파일 자원을 닫습니다.
사용자가 .zip 파일을 업로드 할 수 있는 시스템을 구축 할 때 불법 파일 이름 필터링, 블랙리스트 확장 등과 같은 업로드 된 파일 컨텐츠를 스캔해야 할 수도 있습니다.
예를 들어:
<?php
function scanZipForPhp($zipPath) {
$zip = zip_open($zipPath);
if (!is_resource($zip)) {
return false;
}
$suspicious = [];
while ($entry = zip_read($zip)) {
$name = zip_entry_name($entry);
if (preg_match('/\.php$/i', $name)) {
$suspicious[] = $name;
}
}
zip_close($zip);
return $suspicious;
}
$flaggedFiles = scanZipForPhp('/tmp/uploaded.zip');
if (!empty($flaggedFiles)) {
echo "의심스러운 발견 PHP 문서:<br>";
echo implode('<br>', $flaggedFiles);
} else {
echo "未의심스러운 발견문서。";
}
?>
zip_read () 및 zip_entry_* 시리즈 함수는 초기에 PHP가 제공하는 방법이며 하위 수준의 ZIP 작업에 적합합니다. 더 많은 풍부한 기능 (예 : Zip 파일 만들기, 주석 추가 등)이 필요한 경우 Ziparchive 클래스를 사용하는 것이 좋습니다.
zip_read ()를 사용하면 암호화 된 zip 패키지의 내용에 직접 액세스 할 수 없습니다.
ZIP 파일의 내용이 크면 메모리 오버플로를 방지하기 위해 모든 컨텐츠를 한 번에 읽지 않아야합니다.
이 기사의 설명 및 샘플 코드를 통해 다른 기능과 결합하여 zip_read ()를 사용하여 .zip 압축 파일의 내부 구조를 깊이 분석하고 읽는 방법을 마스터했다고 생각합니다. 실제 개발 에서이 방법은 문서 감사, 보안 스캔 등과 같은 시나리오에서 매우 유용합니다.