PHP 는 rar 압축 풀기 확장 패키지 소결 읽 기 를 실현 합 니 다.
php-rar 확장 이 pecl 에 있 는 패 키 지 는 시간 이 지 났 습 니 다.PHP 7 에서 사용 할 수 없습니다.github 에 있 는 원본 코드 를 사용 하여 컴 파일 설치 해 야 PHP 7 환경 에서 설치 할 수 있 습 니 다.
https://github.com/cataphract/php-rar
git clone 을 직접 사용 하면 정상 적 인 PHP 확장 방식 으로 설치 할 수 있 습 니 다.
압축 파일 핸들 가 져 오기 RarArchive
$arch = RarArchive::open("test.rar");
$archNo = rar_open("test.rar");
echo $arch, PHP_EOL; // RAR Archive "/data/www/blog/test.rar"
echo $archNo, PHP_EOL; // RAR Archive "/data/www/blog/test.rar"
$arch->close();
rar_close($archNo);
echo $arch, PHP_EOL; // RAR Archive "/data/www/blog/test.rar" (closed)
echo $archNo, PHP_EOL; // RAR Archive "/data/www/blog/test.rar" (closed)
pp-rar 확장 은 두 가지 형식의 쓰기 가 있 습 니 다.하 나 는 대상 을 대상 으로 하 는 것 입 니 다.즉,RarArchive 류 를 사용 하여 압축 패 키 지 를 조작 하 는 것 입 니 다.다른 방식 은 함수 rar 를 직접 사용 하 는 것 입 니 다.open 은 rar 파일 의 핸들 을 가 져 오 는 데 사 용 됩 니 다.그것들 은 모두 다시 썼 다toString 방법 입 니 다.따라서 현재 핸들 이 작 동 하 는 구체 적 인 파일 을 직접 인쇄 할 수 있 습 니 다.우리 가 핸들 을 닫 을 때,핸들 대상 은 여전히 출력 을 할 수 있 지만,뒤에 closed 가 표 시 됩 니 다.이 때 핸들 대상 은 이미 다른 조작 을 할 수 없습니다.
$arch = RarArchive::open("test.rar");
$archNo = rar_open("test.rar");
echo $arch->getComment(), PHP_EOL;
echo $arch->isBroken(), PHP_EOL;
echo $arch->isSolid(), PHP_EOL;
echo rar_comment_get($archNo), PHP_EOL;
echo rar_broken_is($archNo), PHP_EOL;
echo rar_solid_is($archNo), PHP_EOL;
echo $arch->setAllowBroken(true), PHP_EOL;
echo rar_allow_broken_set($archNo, true), PHP_EOL;
RarArchive 대상 의 일부 방법 은 현재 압축 된 가방 의 정 보 를 얻 는 데 도움 을 줄 수 있 습 니 다.예 를 들 어 getComment()는 압축 패키지 의 설명 정 보 를 가 져 옵 니 다.isBroken()은 현재 압축 패키지 가 손상 되 었 는 지,isSolid()는 현재 압축 패키지 가 사용 가능 한 지 확인 합 니 다.setAllowBroken()방법 은 손 상 된 압축 패 키 지 를 조작 할 수 있 도록 하 는 것 입 니 다.여기 서 우 리 는 대상 과 과정 을 향 한 문법 을 제시 했다.압축 패키지 안의 모든 실체 파일 이나 디 렉 터 리 작업 RarEntry
압축 패키지 의 핸들 을 얻 은 후에 우 리 는 압축 패키지 내부 의 내용 을 더욱 깊이 가 져 와 야 한다.핸들 대상 에는 압축 파일 내부 의 각 파일 과 디 렉 터 리 의 대상 인 RarEntry 가 저장 되 어 있 습 니 다.
$gameEntry = $arch->getEntry('ldxlcs/ldxlcs/game.htm');
echo $gameEntry->getName(), PHP_EOL; // ldxlcs/ldxlcs/game.htm
echo $gameEntry->getUnpackedSize(), PHP_EOL; // 56063
$gameEntryNo = rar_entry_get($arch, "ldxlcs/ldxlcs/game.htm");
echo $gameEntry->getName(), PHP_EOL; // ldxlcs/ldxlcs/game.htm
echo $gameEntry->getUnpackedSize(), PHP_EOL; // 56063
$fp = $gameEntryNo->getStream();
while (!feof($fp)) {
$buff = fread($fp, 8192);
if ($buff !== false) {
echo $buff;
} else {
break;
}
//fread error
}
//
echo PHP_EOL;
echo 'Entry extract: ', $gameEntry->extract("./"), PHP_EOL;
핸들 대상 의 getEntry()방법 은 지정 한 파일 이나 디 렉 터 리 내용 을 가 져 오 는 데 사 용 됩 니 다.단일 파일 이나 디 렉 터 리 를 가 져 왔 기 때문에 가 져 올 파일 의 내용 을 명확 하 게 지정 해 야 합 니 다.이 방법 을 통 해 우 리 는 RarEntry 대상 을 얻 을 수 있다.다음은 이 대상 의 조작 이다.RarEntry 대상 의 getName()방법 은 파일 이름 을 가 져 오 는 데 사 용 됩 니 다.이 파일 이름 은 경로 가 있 습 니 다.이 경 로 는 압축 패키지 의 절대 경로 입 니 다.getUnpacked Size()방법 은 파일 의 크기 를 가 져 오 는 데 사 용 됩 니 다.getStream()은 파일 흐름 을 가 져 오 는 데 사 용 됩 니 다.getStream()방법 을 통 해 출력 파일 의 내용 을 직접 인쇄 할 수 있 습 니 다.
물론 가장 중요 한 것 은 extract()방법 을 통 해 지정 한 디 렉 터 리 에 파일 을 직접 압축 해제 할 수 있 습 니 다.pp-rar 확장 은 전체 압축 패 키 지 를 완전히 풀 수 있 는 방법 을 제공 하지 않 았 기 때문에 전체 압축 패 키 지 를 풀 필요 가 있다 면 압축 패 키 지 내부 의 모든 내용 을 순환 적 으로 옮 겨 다 니 며 이 파일 들 을 하나씩 풀 어야 합 니 다.
마지막 으로 압축 가방 안의 모든 내용 을 어떻게 옮 겨 다 니 는 지 살 펴 보 자.
$entries = $arch->getEntries();
foreach ($entries as $en) {
echo $en, PHP_EOL;
echo $en->getName(), PHP_EOL;
echo $en->getUnpackedSize(), PHP_EOL;
echo $en->getAttr(), PHP_EOL;
echo $en->getCrc(), PHP_EOL;
echo $en->getFileTime(), PHP_EOL;
echo $en->getHostOs(), PHP_EOL;
echo $en->getMethod(), PHP_EOL;
echo $en->getPackedSize(), PHP_EOL;
echo $en->getVersion(), PHP_EOL;
echo $en->isDirectory(), PHP_EOL;
echo $en->isEncrypted(), PHP_EOL;
}
//
// RarEntry for file "ldxlcs/ldxlcs/game.htm" (3c19abf6)
// ldxlcs/ldxlcs/game.htm
// 56063
// 32
// 3c19abf6
// 2017-09-10 13:25:04
// 2
// 51
// 7049
// 200
// ……
$entriesNo = rar_list($archNo);
foreach ($entriesNo as $en) {
echo $en->getName(), PHP_EOL;
}
RarArchive 대상 의 getEntries()방법 을 직접 사용 합 니 다.이 방법 을 통 해 RarEntry 대상 의 배열 을 얻 을 수 있 습 니 다.그 안에 포 함 된 것 은 이 rar 압축 가방 의 모든 내용 입 니 다.이 코드 에서 저 희 는 RarEntry 대상 의 다른 속성 방법 도 인쇄 했 습 니 다.이름 에 따라 이 방법 들 은 모두 파일 에 관 한 각종 정 보 를 얻 는 것 이 므 로 여러분 이 스스로 테스트 할 수 있 습 니 다.예외 처리
마지막 으로 파일 을 잘못 열 었 거나 압축 파일 내부 에 없 는 파일 을 가 져 왔 을 때 php-rar 확장 자 는 PHP 오류 로 오 류 를 보고 합 니 다.그러나 완전한 대상 을 대상 으로 쓰 는 방법 을 제공 한 이상 대상 을 대상 으로 하 는 이상 처리 체 제 를 제공 할 수 밖 에 없다.
// UsingExceptions PHP , PHP
RarException::setUsingExceptions(true);
var_dump(RarException::isUsingExceptions()); // bool(true)
try {
$arch = RarArchive::open("test1.rar");
$arch->getEntry('ttt.txt');
} catch (RarException $e) {
var_dump($e);
// object(RarException)#35 (7) {
// ["message":protected]=>
// string(91) "unRAR internal error: Failed to open /data/www/blog/test1.rar: ERAR_EOPEN (file open error)"
// ["string":"Exception":private]=>
// string(0) ""
// ["code":protected]=>
// int(15)
// ["file":protected]=>
// string(22) "/data/www/blog/rar.php"
// ["line":protected]=>
// int(93)
// ["trace":"Exception":private]=>
// array(1) {
// [0]=>
// array(6) {
// ["file"]=>
// string(22) "/data/www/blog/rar.php"
// ["line"]=>
// int(93)
// ["function"]=>
// string(4) "open"
// ["class"]=>
// string(10) "RarArchive"
// ["type"]=>
// string(2) "::"
// ["args"]=>
// array(1) {
// [0]=>
// string(9) "test1.rar"
// }
// }
// }
// ["previous":"Exception":private]=>
// NULL
// }
}
Rar Exception::setUsingExceptions()를 true 로 설정 하면 phop-rar 확장 이상 처리 체 제 를 열 수 있 습 니 다.이 때 잘못된 파일 을 열거 나 압축 패키지 에 있 는 오류 파일 경 로 를 가 져 오 면 오류 정 보 는 이상 한 형식 으로 던 집 니 다.총결산
이 확장 은 매우 인성 화 된 것 같 지 않 습 니까?즉,대상 을 대상 으로 하 는 방식 을 제공 하고 함수 조작 을 위주 로 하 는 과정 을 대상 으로 하 는 방식 도 제공 했다.그러나 이렇게 하 는 것 은 좋 은 점 이 많 지 않다.왜냐하면 오래된 코드 도 고려 해 야 하고 새로운 사상 도 고려 해 야 하기 때문에 그 자체 가 확 장 된 내부 실현 도 복잡 할 것 이다.우리 가 코드 를 쓸 때 는 되도록 이렇게 쓰 지 말고 재 구성 할 때 한 걸음 한 걸음 최신 형식 으로 옮 기 면 된다.
rar 의 압축 작업 에 대해 유용 한 자 료 를 많이 찾 지 못 했 습 니 다.물론 우 리 는 생산 환경 에서 압축 패 키 지 를 만 들 려 면 대부분 상황 에서 zip 형식 을 직접 생 성하 여 사용자 에 게 제공 합 니 다.대부분의 클 라 이언 트 소프트웨어 는 rar 와 zip 형식 파일 의 압축 해 제 를 동시에 지원 할 수 있 기 때문에 반드시 rar 생 성 을 지정 해 야 한다 면 제품 매니저 나 고객 과 많이 상의 할 수 있 습 니 다.어떤 때 는 기술 의 난점 은 업무 의 변통 을 통 해 해결 할 수 있 고 가장 중요 한 것 은 소통 에 있다.
테스트 코드:
https://github.com/zhangyue0503/dev-blog/blob/master/php/202007/source/PHP%E7%9A%84rar%E8%A7%A3%E5%8E%8B%E8%AF%BB%E5%8F%96%E6%89%A9%E5%B1%95%E5%8C%85%E5%AD%A6%E4%B9%A0.php
참고 문서:
https://www.php.net/manual/zh/book.rar.php
이상 은 PHP 의 rar 압축 해제 읽 기 확장 팩 학습 의 상세 한 내용 입 니 다.더 많은 PHP rar 압축 해제 읽 기 에 관 한 자 료 는 다른 관련 글 을 주목 하 십시오!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
laravel에 yo에서 angularJs&coffeescript를 사용할 수 있도록 한다.먼저 yo 명령을 사용할 수 있어야하므로 아래에서 설치 global에 설치한 곳에서 laravel의 프로젝트 루트로 이동. 클라이언트 코드를 관리하는 디렉토리를 만들고 이동합니다. 클라이언트 환경 만들기 이것으로 히...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.