1. PHP / Говнокод #21946

    −41

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    13. 13
    14. 14
    15. 15
    16. 16
    17. 17
    18. 18
    19. 19
    20. 20
    21. 21
    22. 22
    23. 23
    24. 24
    25. 25
    26. 26
    27. 27
    28. 28
    29. 29
    30. 30
    31. 31
    32. 32
    33. 33
    34. 34
    35. 35
    36. 36
    37. 37
    38. 38
    39. 39
    40. 40
    <?php
    // init iso image
    $iso = new \CISOFile;
    $iso->open($filename);
    $iso->ISOInit();
    // get descriptor
    $usedDesc = $this->iso->GetDescriptor(SUPPLEMENTARY_VOLUME_DESC);
    if(!$usedDesc) $usedDesc = $this->iso->GetDescriptor(PRIMARY_VOLUME_DESC);
    // get block size
    $isoBlockSize = $usedDesc->iBlockSize;
    // traverse directories and create files table
    $files_locations = array();
    $files_sizes = array();
    $directories = $usedDesc->LoadMPathTable($this->iso);
    foreach ($directories as $Directory) {
        $directory = $Directory->GetFullPath($directories, false);
        $directory = trim($directory, '/');
        if ($directory != '') {
            $directory .= '/';
        }
        $files = $Directory->LoadExtents($this->iso, $usedDesc->iBlockSize, true);
        if ($files) {
            foreach ($files as $file) {
                if (in_array($file->strd_FileId, array('.', '..'))) continue;
                $files_locations[$file->Location] = $directory.$file->strd_FileId;
                $files_sizes[$directory.$file->strd_FileId] = $file->DataLen;
            }
        }
    }
    
    // find file position in iso image
    //  for example, let's use filename "README.txt"
    $Location = array_search('README.txt', $files_locations);
    $Location_Real = $Location * $isoBlockSize;
    
    // seek file
    $iso->Seek($Location_Real, SEEK_SET);
    
    // read file
    $content = $iso->Read($files_sizes['README.txt']);

    Example of extracting one file content from an iso image
    Пример распаковки одного файла из ISO-образа

    Запостил: dacave, 06 Января 2017

    Комментарии (5) RSS

    • Ничего смешного.
      Ответить
    • Что такое $this->iso и как оно связано с $iso?
      Ответить
      • Я бы спросил - откуда тут вообще $this.
        Ответить
        • Теоретически $this будет указывать на экземпляр класса, если этот файл подключается внутри одного из его методов. Может именно поэтому этот кусок выложили сюда :)
          Ответить
      • Ах да, $this->iso это экземпляр CISOFile, поэтому нужно просто заменить на $iso
        Ответить

    Добавить комментарий