rar:// PECL rar 3.0.0'dan beri kullanılabilmektedir.
Bilginize: Bu sarmalayıcı öntanımlı olarak etkin değildir
rar:// sarmalayıcısını kullanabilmek için » PECL sitesinden alacağınız » rar eklentisini kurmalısınız.
Sarmalayıcı girdi olarak RAR arşivi için url kodlu (mutlak veya değil) yolun yanında isteğe bağlı olarak verilebilen bir yıldız imi (*), bir diyez imi (#) ve arşivde saklanmak üzere url kodlu bir girdi ismi alır. Girdi isminin belirtilmesi bir diyez imini gerektirir; girdi ismini başına isteğe bağlı olarak bir bölü çizgisi (/) konabilir.
Bu sarmalayıcı dosyalarla birlikte dizinleri de açabilir. Dizinleri açarken yıldız iminin varlığı girdi olan dizin isimlerinin kodlanmamasına sebep olur. Yıldız imi belirtilmezse dizin isimleri url kodlu olur. Bunun sebebi, url kodlu gibi görünen dosya isimlerinin varlığında RecursiveDirectoryIterator gibi yerleşik işlevselliklerin sarmalayıcı tarafından doğru olarak kullanılmasını sağlamaktır.
Diyez imi ve girdi ismi verilmezse arşivin kök dizini gösterilir. Kök dizin arşivde tek başına bir girdi olarak saklanmayacağından, sonuçlanan akımın değişiklik zamanı gibi bilgileri içermemesi bakımından, kök dizinin gösterimi diğer dizinlerden farklı olur. Samalayıcının RecursiveDirectoryIterator ile kullanımı kök dizine ulaşmak için URL içinde diyez iminin bulunmasını gerektirir. Böylece çocuk URL'ler doğru şekilde oluşturulabilir.
Örnek 1 - RAR arşivinde ilerleme
<?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ı
<?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));
/* WinRAR'da oluşturma ve son erişim zamanı isteğe bağlıdır.
* Bunun sebebi çoğu dosyanın bunları içermemesidir. */
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 )
Özellik | Destek |
---|---|
allow_url_fopen ile sınırlama | Yok |
allow_url_include ile sınırlama | Yok |
Okumaya İzin | Var |
Yazmaya izin | Yok |
Sona Eklemeye İzin | Yok |
Aynı anda okuma ve yazma izni | Yok |
stat() desteği | Var |
unlink() desteği | Yok |
rename() desteği | Yok |
mkdir() desteği | Yok |
rmdir() desteği | Yok |
İsim | Kullanım | Öntanımlı |
---|---|---|
open_password | Parola varsa, arşiv başlıklarını şifrelemek için kullanılır. WinRAR tüm dosyaları son bilinen başlık parolası ile şifreler, dolayısıyla şifreli başlıkları olan arşivler için file_password yoksayılır. | |
file_password | Parola varsa, bir dosyayı şifrelemek için kullanılır. Başlıklar zaten şifreliyse bu seçenek open_password yararına yoksayılır. İki seçenek olmasının sebebi, farklı başlık ve dosya parolaları içeren arşivleri destekleme olasılığını arttırmaktır. Ancak, eğer arşiv şifreli başlıklar içermiyorsa open_password yoksayılıp yerine bu seçeneğin kullanılması gerekir. | |
volume_callback | Kayıp bölümlerin yollarını saptamak için kullanılacak geriçağırım işlevi. Daha fazla bilgi için RarArchive::open() yöntemine bakınız. |