Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В. PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В. Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Как работать с RAR
 
 автор: oliss   (07.05.2010 в 17:24)   письмо автору
 
 

В php-5.3.1 ( полная версия ) нет никакого намёка на работу с RARом
в ехt нет библиотеки php_rar.dll ,
в ini даже намёка на ее активацию
phpinfo(); показывает наличие только zip
естественно, не работают RARовские функции rar_open( ) и тд
Что RAR стал полностью платным что его уже не комплектуют или надо как-то по другому его инсталлировать?

  Ответить  
 
 автор: sim5   (07.05.2010 в 17:34)   письмо автору
 
   для: oliss   (07.05.2010 в 17:24)
 

Данное расширение позволяет читать Rar архивы, однако не дает возможности их записывать так как эта операция не поддерживается библиотекой UnRar и напрямую запрещена условиями ее лицензии.

Информация о Rar и UnRar: http://www.rarlabs.com/.
Расширение Rar доступно в PECL: http://pecl.php.net/package/rar.

  Ответить  
 
 автор: oliss   (07.05.2010 в 17:55)   письмо автору
 
   для: sim5   (07.05.2010 в 17:34)
 

А как инсталлировать Package на сервере?

  Ответить  
 
 автор: sim5   (07.05.2010 в 18:04)   письмо автору
 
   для: 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/.

  Ответить  
 
 автор: oliss   (08.05.2010 в 03:37)   письмо автору
 
   для: 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($id7);
    if (
bin2hex($markHead) != "526172211a0700")
        return 
false;

    
// Пытаемся прочесть MAIN_HEAD блок
    
$mainHead fread($id7);
    if (
ord($mainHead[2]) != 0x73)
        return 
false;
    
$headSize temp_getBytes($mainHead52);

    
// Сдвигаемся на позицию первого "значащего" блока в файле
    
fseek($id$headSize 7SEEK_CUR);

    
$files = array();
    while(!
feof($id)) {
        
// Читаем загловок блока
        
$block fread($id7);
        
$headSize temp_getBytes($block52);
        if (
$headSize <= 7)
            break;

        
// Дочитываем остаток блока исходя из длины заголовка по 
        // соответствующему смещению
        
$block .= fread($id$headSize 7);
        
// Если это файловый блок, то начинаем его обрабатывать
        
if (ord($block[2]) == 0x74) {
            
// Смотрим сколько занимает в архиве запакованный файл и
            // смещаемся к следующей позиции.
            
$packSize temp_getBytes($block74);
            
fseek($id$packSizeSEEK_CUR);

            
// Читаем атрибуты файла: r - read only, h - hidden,
            // s - system, d - directory, a - archived
            
$attr temp_getBytes($block284);
            
$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($block32temp_getBytes($block262)),
                
"size_compressed" => $packSize,
                
"size_uncompressed" => temp_getBytes($block114),
                
"crc" => temp_getBytes($block164),
                
"attributes" => $attributes,
            );
        } else {
            
// Если данный блок не файловый, то пропускаем с учётом возможного
            // дополнительного смещения ADD_SIZE
            
$flags temp_getBytes($block32);
            if (
$flags 0x8000) {
                
$addSize temp_getBytes($block74);
                
fseek($id$addSizeSEEK_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/

  Ответить  
 
 автор: sim5   (08.05.2010 в 04:06)   письмо автору
 
   для: oliss   (08.05.2010 в 03:37)
 

Ни в том, ни в другом я не виновен. )
Вы же о библиотеке спрашивали, а вот "народное творчество", так такого много, вот вам паковщик: http://www.phpclasses.org/package/3556-PHP-Pack-files-in-compressed-RAR-archives.html

  Ответить  
 
 автор: oliss   (08.05.2010 в 04:18)   письмо автору
 
   для: sim5   (08.05.2010 в 04:06)
 

А разве был хоть где то намёк о виновности :) ,
наоборот спасибо, не так оказывается всё просто..

  Ответить  
 
 автор: verg   (13.05.2010 в 01:11)   письмо автору
 
   для: oliss   (08.05.2010 в 04:18)
 

Мне помог 7z, http://softtime.ru/forum/read.php?id_forum=1&id_theme=69833&page=1 может найдете что-нибудь полезное...

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования