Desteklenen Protokollerin ve Sarmalayıcıların Listesi
PHP Manual

Rar

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
)

Sarmalayıcıların Özellikleri
Ö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

Bağlamsal seçenekler
İ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.  


Desteklenen Protokollerin ve Sarmalayıcıların Listesi
PHP Manual