rar://

rar://RAR

Açıklama

Sarmalayıcı, arşivde depolandığı şekliyle, RAR arşivi için URL kodlu yol (göreli veya mutlak), isteğe bağlı bir yıldız işareti (*), isteğe bağlı bir diyez işareti (#) ve isteğe bağlı bir url kodlu girdi adı alır. Bir girdi adı belirtmek, numara işaretini gerektirir; girdi adında önde bir eğik çizgi isteğe bağlıdır.

Bu sarmalayıcı hem dosyaları hem de dizinleri açabilir. Dizinleri açarken, yıldız işareti dizin girdilerinin adlarını kodlanmamış olarak döndürülmeye zorlar. Belirtilmezse, URL olarak kodlanmış biçimde döndürülür - bunun nedeni, URL kodlu veriler gibi görünen dosya adlarının varlığında sarmalayıcının RecursiveDirectoryIterator gibi yerleşik işlevsellik ile doğru şekilde kullanılmasını sağlamaktır.

Diyez işareti ve girdi adı kısmı dahil edilmemişse, arşivin kökü gösterilir. Bu, kök dizin arşivdeki tek bir girdide depolanmadığından normal dizinlerden farklıdır, çünkü ortaya çıkan akım değişiklik zamanı gibi bilgileri içermez. RecursiveDirectoryIterator ile sarmalayıcının kullanımı, alt öğelerin URL'lerinin doğru bir şekilde yapılandırılabilmesi için, köke erişirken diyez işaretinin URL'ye dahil edilmesini gerektirir.

Bilginize: Bu sarmalayıcı öntanımlı olarak etkin değildir
rar:// sarmalayıcısını kullanmak için, » PECL'de bulunan » rar eklentisinin kurulması gerekir.

rar:// PECL rar 3.0.0'dan beri kullanılabilmektedir.

Kullanımı

  • rar://<url kodlu arşiv ismi>[*][#[<url kodlu girdi ismi>]]

Seçenekler

Sarmalayıcı Özeti
ÖzellikDestek
allow_url_fopen ile sınırlıHayır
allow_url_include ile sınırlıHayır
Okuma izniEvet
Yazma izniHayır
Ekleme izniHayır
Aynı anda okuma ve yazma izniHayır
stat() desteğiEvet
unlink() desteğiHayır
rename() desteğiHayır
mkdir() desteğiHayır
rmdir() desteğiHayır

Bağlam Seçenekleri
İsimKullanımÖntanımlı
open_password Varsa, arşivin başlıklarını şifrelemek için kullanılan parola. WinRAR, daha sonra mevcut olduğunda başlık parolası ile aynı parolaya sahip tüm dosyaları şifreleyecektir, bu nedenle şifrelenmiş başlıklara sahip arşivler için file_password göz ardı edilecektir.  
file_password Varsa, bir dosyayı şifrelemek için kullanılan parola. Başlıklar da şifrelenmişse, bu seçenek open_password lehine göz ardı edilecektir. İki seçeneğin olmasının nedeni, arşivlerin ortaya çıkması durumunda farklı başlık ve dosya şifrelerine sahip arşivleri destekleme olasılığını elde tutmaktır. Arşivin başlıkları şifrelenmemişse, open_password'un yok sayılacağını ve onun yerine bu seçeneğin kullanılmasının gerektiği unutulmamalıdır.  
volume_callback Eksik bölümlerin yolunu belirlemek için bir geriçağırım. Daha fazla bilgi için bkz. RarArchive::open().  

Örnekler

Örnek 1 - Bir RAR arşinde gezinmek

<?php

class MyRecDirIt extends RecursiveDirectoryIterator {
function
current() {
return
rawurldecode($this->getSubPathName()) .
(
is_dir(parent::current())?" [DIR]":"");
}
}

$f = "rar://" . rawurlencode(dirname(__FILE__)) .
DIRECTORY_SEPARATOR . 'dirs_and_extra_headers.rar#';

$it = new RecursiveTreeIterator(new MyRecDirIt($f));

foreach (
$it as $s) {
echo
$s, "\n";
}
?>

Yukarıdaki örnek şuna benzer bir çıktı üretir:

|-allow_everyone_ni [DIR] |-file1.txt |-file2_אּ.txt |-with_streams.txt \-אּ [DIR] |-אּ\%2Fempty%2E [DIR] | \-אּ\%2Fempty%2E\file7.txt |-אּ\empty [DIR] |-אּ\file3.txt |-אּ\file4_אּ.txt \-אּ\אּ_2 [DIR] |-אּ\אּ_2\file5.txt \-אּ\אּ_2\file6_אּ.txt

Örnek 2 - Şifreli bir dosyanın açılması (başlık şifreleme)

<?php
$stream
= fopen("rar://" .
rawurlencode(dirname(__FILE__)) . DIRECTORY_SEPARATOR .
'encrypted_headers.rar' . '#encfile1.txt', "r", false,
stream_context_create(
array(
'rar' =>
array(
'open_password' => 'samplepassword'
)
)
)
);
var_dump(stream_get_contents($stream));

var_dump(fstat($stream));
?>

Yukarıdaki örnek şuna benzer bir çıktı üretir:

string(26) "Encrypted file 1 contents." Array ( [0] => 0 [1] => 0 [2] => 33206 [3] => 1 [4] => 0 [5] => 0 [6] => 0 [7] => 26 [8] => 0 [9] => 1259550052 [10] => 0 [11] => -1 [12] => -1 [dev] => 0 [ino] => 0 [mode] => 33206 [nlink] => 1 [uid] => 0 [gid] => 0 [rdev] => 0 [size] => 26 [atime] => 0 [mtime] => 1259550052 [ctime] => 0 [blksize] => -1 [blocks] => -1 )
To Top