codecamp
PHP8 RarArchive::open

rar_open

(PECL rar >= 2.0.0)

RarArchive::open -- rar_open — 打开 RAR 存档

说明 

面向对象风格 (method):

public static RarArchive::open(string $filename, string $password = NULL, callable $volume_callback = NULL): RarArchive|false

过程化风格:

rar_open(string $filename, string $password = NULL, callable $volume_callback = NULL): RarArchive|false

打开指定的 RAR 存档并返回表示它的 RarArchive 实例。

注意:如果打开多卷归档文件,则应将第一个卷的路径作为第一个参数传递。 否则,不会显示所有文件。这是设计使然。

参数 

filename

Rar 存档的路径。

password

一个普通的密码,如果需要解密标头。默认情况下也会使用它 如果找到加密文件。请注意,这些文件可能具有 关于标头和标头之间的不同密码。

volume_callback

接收一个参数的函数 – 卷的路径 未找到 – 并返回具有正确路径的字符串 对于此类卷,如果此类卷为 null,则为 null 不存在或未知。程序员应确保 传递的函数不会导致循环,因为此函数被调用 如果上一个调用中返回的路径未返回,则重复 对应于所需的体积。指定此参数将省略 每当卷 未找到;因此,仅返回 null 的实现可用于省略此类通知。

警告

在版本 2.0.0 之前,此函数不会处理相对 正确的路径。使用 realpath() 作为解决方法。

返回值 

Returns the requested RarArchive instance 或者在失败时返回 false.

更新日志 

版本说明
PECL rar 3.0.0volume_callback被添加。

示例 

示例 #1 面向对象风格

<?php
$rar_arch = RarArchive::open('encrypted_headers.rar', 'samplepassword');
if ($rar_arch === FALSE)
    die("Failed opening file");
    
$entries = $rar_arch->getEntries();
if ($entries === FALSE)
    die("Failed fetching entries");

echo "Found " . count($entries) . " files.\n";

if (empty($entries))
    die("No valid entries found.");
    
$stream = reset($entries)->getStream();
if ($stream === FALSE)
    die("Failed opening first file");

$rar_arch->close();

echo "Content of first one follows:\n";
echo stream_get_contents($stream);

fclose($stream);
?>

以上示例的输出类似于:

Found 2 files.
Content of first one follows:
Encrypted file 1 contents.

示例 #2 过程化风格

<?php
$rar_arch = rar_open('encrypted_headers.rar', 'samplepassword');
if ($rar_arch === FALSE)
    die("Failed opening file");
    
$entries = rar_list($rar_arch);
if ($entries === FALSE)
    die("Failed fetching entries");

echo "Found " . count($entries) . " files.\n";

if (empty($entries))
    die("No valid entries found.");
    
$stream = reset($entries)->getStream();
if ($stream === FALSE)
    die("Failed opening first file");

rar_close($rar_arch);

echo "Content of first one follows:\n";
echo stream_get_contents($stream);

fclose($stream);
?>

示例 #3 Volume Callback

<?php
/* In this example, there's a volume named multi_broken.part1.rar
 * whose next volume is named multi.part2.rar */
function resolve($vol) {
    if (preg_match('/_broken/', $vol))
        return str_replace('_broken', '', $vol);
    else
        return null;
}
$rar_file1 = rar_open(dirname(__FILE__).'/multi_broken.part1.rar', null, 'resolve');
$entry = $rar_file1->getEntry('file2.txt');
$entry->extract(null, dirname(__FILE__) . "/temp_file2.txt");
?>


PHP8 RarArchive::isSolid
PHP8 RarArchive::setAllowBroken
温馨提示
下载编程狮App,免费阅读超1000+编程语言教程
取消
确定
目录

PHP8 语言参考

PHP8 函数参考

PHP8 影响 PHP 行为的扩展

PHP8 Componere

PHP8 安装/配置

PHP8 外部函数接口

PHP8 选项和信息

PHP8 选项/信息 函数

PHP8 Windows Cache for PHP

PHP8 WinCache 函数

PHP8 Yac

PHP8 身份认证服务

PHP8 Radius 函数

PHP8 压缩与归档扩展

PHP8 Phar

PHP8 Zip

PHP8 ZipArchive 类

PHP8 加密扩展

PHP8 OpenSSL

PHP8 OpenSSL 函数

PHP8 Sodium 函数

PHP8 数据库扩展

PHP8 针对各数据库系统对应的扩展

PHP8 CUBRID 函数

PHP8 Firebird/InterBase

PHP8 Firebird/InterBase函数

PHP8 MongoDB介绍驱动程序体系结构和特殊功能

PHP8 MongoDB\Driver\Command 类

PHP8 MongoDB\Driver\Query 类

关闭

MIP.setData({ 'pageTheme' : getCookie('pageTheme') || {'day':true, 'night':false}, 'pageFontSize' : getCookie('pageFontSize') || 20 }); MIP.watch('pageTheme', function(newValue){ setCookie('pageTheme', JSON.stringify(newValue)) }); MIP.watch('pageFontSize', function(newValue){ setCookie('pageFontSize', newValue) }); function setCookie(name, value){ var days = 1; var exp = new Date(); exp.setTime(exp.getTime() + days*24*60*60*1000); document.cookie = name + '=' + value + ';expires=' + exp.toUTCString(); } function getCookie(name){ var reg = new RegExp('(^| )' + name + '=([^;]*)(;|$)'); return document.cookie.match(reg) ? JSON.parse(document.cookie.match(reg)[2]) : null; }