PHP8 RarArchive::open

2024-02-23 11:45 更新

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");
?>


以上内容是否对您有帮助:
在线笔记
App下载
App下载

扫描二维码

下载编程狮App

公众号
微信公众号

编程狮公众号