RarArchive::open

rar_open

(PECL rar >= 2.0.0)

RarArchive::open -- rar_open打开 RAR 档案

描述

面向对象风格(方法)

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 的实现可用于简单地省略这些通知。

警告

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

返回值

返回请求的 RarArchive 实例,或在失败时返回 false

变更日志

版本 描述
PECL rar 3.0.0 添加了 volume_callback

示例

示例 #1 面向对象风格

<?php
$rar_arch
= RarArchive::open('encrypted_headers.rar', 'samplepassword');
if (
$rar_arch === FALSE)
die(
"打开文件失败");

$entries = $rar_arch->getEntries();
if (
$entries === FALSE)
die(
"获取条目失败");

echo
"找到 " . count($entries) . " 个文件。\n";

if (empty(
$entries))
die(
"未找到有效条目。");

$stream = reset($entries)->getStream();
if (
$stream === FALSE)
die(
"打开第一个文件失败");

$rar_arch->close();

echo
"第一个文件的内容如下:\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(
"打开文件失败");

$entries = rar_list($rar_arch);
if (
$entries === FALSE)
die(
"获取条目失败");

echo
"找到 " . count($entries) . " 个文件。\n";

if (empty(
$entries))
die(
"未找到有效条目。");

$stream = reset($entries)->getStream();
if (
$stream === FALSE)
die(
"打开第一个文件失败");

rar_close($rar_arch);

echo
"第一个文件的内容如下:\n";
echo
stream_get_contents($stream);

fclose($stream);
?>

示例 #3 卷回调

<?php
/* 此示例中,有一个名为 multi_broken.part1.rar 的卷,
* 其下一个卷名为 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");
?>

另请参阅

添加说明

用户贡献说明

此页面没有用户贡献说明。
To Top