|
|
|
| В php-5.3.1 ( полная версия ) нет никакого намёка на работу с RARом
в ехt нет библиотеки php_rar.dll ,
в ini даже намёка на ее активацию
phpinfo(); показывает наличие только zip
естественно, не работают RARовские функции rar_open( ) и тд
Что RAR стал полностью платным что его уже не комплектуют или надо как-то по другому его инсталлировать? | |
|
|
|
|
|
|
|
для: oliss
(07.05.2010 в 17:24)
| | Данное расширение позволяет читать Rar архивы, однако не дает возможности их записывать так как эта операция не поддерживается библиотекой UnRar и напрямую запрещена условиями ее лицензии.
Информация о Rar и UnRar: http://www.rarlabs.com/.
Расширение Rar доступно в PECL: http://pecl.php.net/package/rar. | |
|
|
|
|
|
|
|
для: sim5
(07.05.2010 в 17:34)
| | А как инсталлировать Package на сервере? | |
|
|
|
|
|
|
|
для: oliss
(07.05.2010 в 17:55)
| | Все это есть в РНР мануале:
Вы можете воспользоваться установщиком PECL, чтобы установить расширение Rar. Для этого необходимо использовать команду: pecl -v install rar.
Также вы можете скачать архив tar.gz и установить Rar вручную:
Пример 1965. Установка Rar
gunzip rar-xxx.tgz
tar -xvf rar-xxx.tar
cd rar-xxx
phpize
./configure && make && make install
Пользователи Windows могут скачать расширение в виде библиотеки dll php_rar.dll здесь: http://snaps.php.net/win32/PECL_STABLE/. | |
|
|
|
|
|
|
|
для: sim5
(07.05.2010 в 18:04)
| | http://snaps.php.net/win32/PECL_STABLE/. -- 404
php_rar.dll под 5.3.1.0 -- нигде нет
RAR: получение списка файлов без PECL ( рабочий )
<?php
// Чтение списка файлов из RAR
// Версия 0.1
// Автор: Алексей Рембиш a.k.a Ramon
// E-mail: alex@rembish.ru
// Copyright 2009
// Функция чтения списка файлов из $filename без использования
// PECL-расширения rar.
function rar_getFileList($filename) {
// Функция для получения COUNT байтов из строки (little-endian).
// Чтобы не засорять глобальное пространство функций - отправляем её
// вовнуть материнской.
if (!function_exists("temp_getBytes")) {
function temp_getBytes($data, $from, $count) {
$string = substr($data, $from, $count);
$string = strrev($string);
return hexdec(bin2hex($string));
}
}
// Попытка открыть файл
$id = fopen($filename, "rb");
if (!$id)
return false;
// Проверка - является ли файл RAR-архивом
$markHead = fread($id, 7);
if (bin2hex($markHead) != "526172211a0700")
return false;
// Пытаемся прочесть MAIN_HEAD блок
$mainHead = fread($id, 7);
if (ord($mainHead[2]) != 0x73)
return false;
$headSize = temp_getBytes($mainHead, 5, 2);
// Сдвигаемся на позицию первого "значащего" блока в файле
fseek($id, $headSize - 7, SEEK_CUR);
$files = array();
while(!feof($id)) {
// Читаем загловок блока
$block = fread($id, 7);
$headSize = temp_getBytes($block, 5, 2);
if ($headSize <= 7)
break;
// Дочитываем остаток блока исходя из длины заголовка по
// соответствующему смещению
$block .= fread($id, $headSize - 7);
// Если это файловый блок, то начинаем его обрабатывать
if (ord($block[2]) == 0x74) {
// Смотрим сколько занимает в архиве запакованный файл и
// смещаемся к следующей позиции.
$packSize = temp_getBytes($block, 7, 4);
fseek($id, $packSize, SEEK_CUR);
// Читаем атрибуты файла: r - read only, h - hidden,
// s - system, d - directory, a - archived
$attr = temp_getBytes($block, 28, 4);
$attributes = "";
if ($attr & 0x01)
$attributes .= "r";
if ($attr & 0x02)
$attributes .= "h";
if ($attr & 0x04)
$attributes .= "s";
if ($attr & 0x10 || $attr & 0x4000)
$attributes = "d";
if ($attr & 0x20)
$attributes .= "a";
// Читаем имя файла, размеры до и после запаковки, CRC и аттрибуты
$files[] = array(
"filename" => substr($block, 32, temp_getBytes($block, 26, 2)),
"size_compressed" => $packSize,
"size_uncompressed" => temp_getBytes($block, 11, 4),
"crc" => temp_getBytes($block, 16, 4),
"attributes" => $attributes,
);
} else {
// Если данный блок не файловый, то пропускаем с учётом возможного
// дополнительного смещения ADD_SIZE
$flags = temp_getBytes($block, 3, 2);
if ($flags & 0x8000) {
$addSize = temp_getBytes($block, 7, 4);
fseek($id, $addSize, SEEK_CUR);
}
}
}
fclose($id);
// Возвращаем список файлов
return $files;
}
// Получение списка файлов изи архива RAR в виде древовидной структуры.
function rar_getFileTree($filename) {
// Получаем список файлов и директорий
$files = rar_getFileList($filename);
$tree = array();
// Начинаем обходить список из архива.
for ($i = 0; $i < count($files); $i++) {
// Если текущий файл, это не директория, то...
if (strpos($files[$i]["attributes"], "d") === false) {
// бъем путь к нему на части.
$file = explode("\\", $files[$i]["filename"]);
// Ставим C - как указатель на корень дерева
$c = &$tree;
// Обходим все директории до имени файла
for ($j = 0; $j < count($file) - 1; $j++) {
// Если нужно создаём директорию в дереве
if (!isset($c["/".$file[$j]]))
$c["/".$file[$j]] = array();
// Смещаем указатель C вовнутрь
$c = &$c["/".$file[$j]];
}
// Записываем файл, подкорректировав имя, по адресу в дереве.
$f = $files[$i];
unset($f["filename"]);
$c[$file[count($file) - 1]] = $f;
}
}
// Сортируем наше дерево, по алфавиту - директории сверху.
if (!function_exists("temp_ksort")) {
function temp_ksort($item, $key) {
if (is_array($item))
ksort($item);
}
} array_walk($tree, "temp_ksort");
// Возвращаем дерево файлов.
return $tree;
}
?>
|
http://habrahabr.ru/blogs/php/73637/ | |
|
|
|
|
|
|
|
для: oliss
(08.05.2010 в 03:37)
| | Ни в том, ни в другом я не виновен. )
Вы же о библиотеке спрашивали, а вот "народное творчество", так такого много, вот вам паковщик: http://www.phpclasses.org/package/3556-PHP-Pack-files-in-compressed-RAR-archives.html | |
|
|
|
|
|
|
|
для: sim5
(08.05.2010 в 04:06)
| | А разве был хоть где то намёк о виновности :) ,
наоборот спасибо, не так оказывается всё просто.. | |
|
|
|
|