찾다
백엔드 개발PHP 튜토리얼PHP의 rar 압축해제 및 읽기 확장 패키지를 함께 배워보아요!

PHP의 rar 압축해제 및 읽기 확장 패키지를 함께 배워볼까요!

PHP의 rar 압축 해제 읽기 확장 패키지에 대해 알아보기

압축 및 압축 해제에 대한 확장 학습으로서 두 가지 ace 압축 형식인 rar 및 zip은 항상 컴퓨터 분야에서 압축의 종결자였습니다. rar 형식 압축 패키지는 Windows 시스템에서 거의 지배적입니다. 오늘 우리가 배우고 있는 PHP 확장은 rar 압축 패키지 작업을 위한 것입니다. 그러나 PHP의 rar 확장은 rar 형식 압축 패키지만 읽고 압축을 풀 수 있으며 압축 작업은 수행할 수 없습니다.

php-rar 확장의 pecl 설치 패키지는 오래되어 PHP7에서 사용할 수 없습니다. PHP7 환경에 성공적으로 설치하려면 github의 소스 코드를 사용하여 컴파일하고 설치해야 합니다.

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)

php-rar 확장에는 두 가지 형태의 쓰기가 있습니다. 하나는 객체 지향입니다. 즉, RarArchive 클래스를 사용하여 압축된 패키지를 작동하는 것입니다. 또 다른 방법은 rar_open 함수를 직접 사용하여 rar 파일의 핸들을 얻는 것입니다. 모두 __toString 메서드를 재정의하므로 핸들의 내용을 직접 인쇄하여 현재 핸들에서 작동하는 특정 파일을 볼 수 있습니다.

핸들을 닫으면 핸들 객체가 계속 출력될 수 있지만 나중에 닫힌 상태가 표시됩니다. 현재 핸들 개체는 더 이상 다른 작업을 수행할 수 없습니다.

$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() 메서드는 파일 이름을 얻는 데 사용됩니다. 이 파일 이름에는 경로가 있으며 이 경로는 압축된 패키지 내의 절대 경로입니다. getUnpackedSize() 메소드는 파일의 크기를 가져오는 데 사용되며, getStream()은 파일 스트림을 가져오는 데 사용됩니다. getStream() 메소드를 통해 파일의 내용을 직접 인쇄할 수 있습니다.

물론, 가장 중요한 것은 extract() 메소드를 통해 지정된 디렉터리에 파일을 직접 추출할 수 있다는 것입니다. php-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() 메서드를 직접 사용합니다. 이 메서드를 통해 rar 압축 패키지의 모든 내용이 포함된 RarEntry 개체의 배열을 얻을 수 있습니다. 이 코드에서는 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
    //   }
}

RarException::setUsingExceptions()가 true로 설정되어 있는 한, php-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

推荐:《PHP视频教程

위 내용은 PHP의 rar 압축해제 및 읽기 확장 패키지를 함께 배워보아요!의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명
이 기사는 segmentfault에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제
과대 광고 : 오늘 PHP의 역할을 평가합니다과대 광고 : 오늘 PHP의 역할을 평가합니다Apr 12, 2025 am 12:17 AM

PHP는 현대적인 프로그래밍, 특히 웹 개발 분야에서 강력하고 널리 사용되는 도구로 남아 있습니다. 1) PHP는 사용하기 쉽고 데이터베이스와 완벽하게 통합되며 많은 개발자에게 가장 먼저 선택됩니다. 2) 동적 컨텐츠 생성 및 객체 지향 프로그래밍을 지원하여 웹 사이트를 신속하게 작성하고 유지 관리하는 데 적합합니다. 3) 데이터베이스 쿼리를 캐싱하고 최적화함으로써 PHP의 성능을 향상시킬 수 있으며, 광범위한 커뮤니티와 풍부한 생태계는 오늘날의 기술 스택에 여전히 중요합니다.

PHP의 약한 참고 자료는 무엇이며 언제 유용합니까?PHP의 약한 참고 자료는 무엇이며 언제 유용합니까?Apr 12, 2025 am 12:13 AM

PHP에서는 약한 참조가 약한 회의 클래스를 통해 구현되며 쓰레기 수집가가 물체를 되 찾는 것을 방해하지 않습니다. 약한 참조는 캐싱 시스템 및 이벤트 리스너와 같은 시나리오에 적합합니다. 물체의 생존을 보장 할 수 없으며 쓰레기 수집이 지연 될 수 있음에 주목해야합니다.

PHP의 __invoke 마법 방법을 설명하십시오.PHP의 __invoke 마법 방법을 설명하십시오.Apr 12, 2025 am 12:07 AM

\ _ \ _ 호출 메소드를 사용하면 객체를 함수처럼 호출 할 수 있습니다. 1. 객체를 호출 할 수 있도록 메소드를 호출하는 \ _ \ _ 정의하십시오. 2. $ obj (...) 구문을 사용할 때 PHP는 \ _ \ _ invoke 메소드를 실행합니다. 3. 로깅 및 계산기, 코드 유연성 및 가독성 향상과 같은 시나리오에 적합합니다.

동시성에 대해 PHP 8.1의 섬유를 설명하십시오.동시성에 대해 PHP 8.1의 섬유를 설명하십시오.Apr 12, 2025 am 12:05 AM

섬유는 PHP8.1에 도입되어 동시 처리 기능을 향상시켰다. 1) 섬유는 코 루틴과 유사한 가벼운 동시성 모델입니다. 2) 개발자는 작업의 실행 흐름을 수동으로 제어 할 수 있으며 I/O 집약적 작업을 처리하는 데 적합합니다. 3) 섬유를 사용하면보다 효율적이고 반응이 좋은 코드를 작성할 수 있습니다.

PHP 커뮤니티 : 자원, 지원 및 개발PHP 커뮤니티 : 자원, 지원 및 개발Apr 12, 2025 am 12:04 AM

PHP 커뮤니티는 개발자 성장을 돕기 위해 풍부한 자원과 지원을 제공합니다. 1) 자료에는 공식 문서, 튜토리얼, 블로그 및 Laravel 및 Symfony와 같은 오픈 소스 프로젝트가 포함됩니다. 2) 지원은 StackoverFlow, Reddit 및 Slack 채널을 통해 얻을 수 있습니다. 3) RFC에 따라 개발 동향을 배울 수 있습니다. 4) 적극적인 참여, 코드에 대한 기여 및 학습 공유를 통해 커뮤니티에 통합 될 수 있습니다.

PHP vs. Python : 차이점 이해PHP vs. Python : 차이점 이해Apr 11, 2025 am 12:15 AM

PHP와 Python은 각각 고유 한 장점이 있으며 선택은 프로젝트 요구 사항을 기반으로해야합니다. 1.PHP는 간단한 구문과 높은 실행 효율로 웹 개발에 적합합니다. 2. Python은 간결한 구문 및 풍부한 라이브러리를 갖춘 데이터 과학 및 기계 학습에 적합합니다.

PHP : 죽어 가거나 단순히 적응하고 있습니까?PHP : 죽어 가거나 단순히 적응하고 있습니까?Apr 11, 2025 am 12:13 AM

PHP는 죽지 않고 끊임없이 적응하고 진화합니다. 1) PHP는 1994 년부터 새로운 기술 트렌드에 적응하기 위해 여러 버전 반복을 겪었습니다. 2) 현재 전자 상거래, 컨텐츠 관리 시스템 및 기타 분야에서 널리 사용됩니다. 3) PHP8은 성능과 현대화를 개선하기 위해 JIT 컴파일러 및 기타 기능을 소개합니다. 4) Opcache를 사용하고 PSR-12 표준을 따라 성능 및 코드 품질을 최적화하십시오.

PHP의 미래 : 적응 및 혁신PHP의 미래 : 적응 및 혁신Apr 11, 2025 am 12:01 AM

PHP의 미래는 새로운 기술 트렌드에 적응하고 혁신적인 기능을 도입함으로써 달성 될 것입니다. 1) 클라우드 컴퓨팅, 컨테이너화 및 마이크로 서비스 아키텍처에 적응, Docker 및 Kubernetes 지원; 2) 성능 및 데이터 처리 효율을 향상시키기 위해 JIT 컴파일러 및 열거 유형을 도입합니다. 3) 지속적으로 성능을 최적화하고 모범 사례를 홍보합니다.

See all articles

핫 AI 도구

Undresser.AI Undress

Undresser.AI Undress

사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover

AI Clothes Remover

사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool

Undress AI Tool

무료로 이미지를 벗다

Clothoff.io

Clothoff.io

AI 옷 제거제

AI Hentai Generator

AI Hentai Generator

AI Hentai를 무료로 생성하십시오.

인기 기사

R.E.P.O. 에너지 결정과 그들이하는 일 (노란색 크리스탈)
3 몇 주 전By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. 최고의 그래픽 설정
3 몇 주 전By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. 아무도들을 수없는 경우 오디오를 수정하는 방법
3 몇 주 전By尊渡假赌尊渡假赌尊渡假赌
WWE 2K25 : Myrise에서 모든 것을 잠금 해제하는 방법
4 몇 주 전By尊渡假赌尊渡假赌尊渡假赌

뜨거운 도구

메모장++7.3.1

메모장++7.3.1

사용하기 쉬운 무료 코드 편집기

SecList

SecList

SecLists는 최고의 보안 테스터의 동반자입니다. 보안 평가 시 자주 사용되는 다양한 유형의 목록을 한 곳에 모아 놓은 것입니다. SecLists는 보안 테스터에게 필요할 수 있는 모든 목록을 편리하게 제공하여 보안 테스트를 더욱 효율적이고 생산적으로 만드는 데 도움이 됩니다. 목록 유형에는 사용자 이름, 비밀번호, URL, 퍼징 페이로드, 민감한 데이터 패턴, 웹 셸 등이 포함됩니다. 테스터는 이 저장소를 새로운 테스트 시스템으로 간단히 가져올 수 있으며 필요한 모든 유형의 목록에 액세스할 수 있습니다.

DVWA

DVWA

DVWA(Damn Vulnerable Web App)는 매우 취약한 PHP/MySQL 웹 애플리케이션입니다. 주요 목표는 보안 전문가가 법적 환경에서 자신의 기술과 도구를 테스트하고, 웹 개발자가 웹 응용 프로그램 보안 프로세스를 더 잘 이해할 수 있도록 돕고, 교사/학생이 교실 환경 웹 응용 프로그램에서 가르치고 배울 수 있도록 돕는 것입니다. 보안. DVWA의 목표는 다양한 난이도의 간단하고 간단한 인터페이스를 통해 가장 일반적인 웹 취약점 중 일부를 연습하는 것입니다. 이 소프트웨어는

드림위버 CS6

드림위버 CS6

시각적 웹 개발 도구

WebStorm Mac 버전

WebStorm Mac 버전

유용한 JavaScript 개발 도구