Войти через VK Войти через FB Войти через Google Войти через Яндекс
Поиск по сайту
rar://
rar:// — RAR
Описание
Эта обертка принимает URL-кодированный путь к RAR-архиву (относительный или абсолютный), необязательный символ звездочки (*), необязательный символ решетки (#) и необязательное URL-кодированное имя такое, как хранится в архиве. Для указания имени содержимого требуется символ решетки, начальный обратный слеш в названии содержимого необязателен.
Эта обертка может открывать файлы и директории. Когда открываются директории, знак звездочки требует, чтобы имена объектов директории были закодированы unencode. Если такой знак не указан, они будут возвращены в URL-кодировке. Смысл этого в том, чтобы позволить обертке корректно использовать встроенную функциональность, такую как RecursiveDirectoryIterator когда присутствуют имена файлов, которые кажутся как url-закодированные данные.
Если символ решетки и часть имени записи не включена, будет отображен корень архива. Это отличается от обычных директорий тем, что результирующий поток не будет содержать такую информацию, как время модификации, так как корневая директория не сохраняется как отдельная запись в архиве. Использование обертки с RecursiveDirectoryIterator требует, чтобы символ решетки был включен в URL, когда происходит доступ к корню, так чтобы URL потомков мог быть сконструирован правильно.
Замечание: Эта обертка не включена по умолчанию
Для того, чтобы использовать обертку rar://, вам необходимо установить расширение » rar, доступное из репозитория » PECL.
rar:// Доступно начиная с PECL rar 3.0.0
Опции
- rar://<url encoded archive name>[*][#[<url encoded entry name>]]
Опции
Примеры
Пример #1 Обход RAR-архива
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";
}
Результатом выполнения данного примера будет что-то подобное:
|-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
Пример #2 Открытие зашифрованного файла (шифрование заголовка)
$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, поэтому у
* большинства файлов их нет */
var_dump(fstat($stream));
Результатом выполнения данного примера будет что-то подобное:
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 )
Смотрите также:
Описание на ru2.php.net
Описание на php.ru