rar:// — RAR
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.
Ö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));
/* çoğu dosyanın sahip olmadığı oluşturma ve
* son erişim tarihi WinRAR'a dahil edilmiştir
*/
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 )