Vendor/phpspreadsheet/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Reader/Xls.php
private function readDocumentSummaryInformation()
    {
        if (!isset($this->documentSummaryInformation)) {
            return;
        }

        //    offset: 0;    size: 2;    must be 0xFE 0xFF (UTF-16 LE byte order mark)
        //    offset: 2;    size: 2;
        //    offset: 4;    size: 2;    OS version
        //    offset: 6;    size: 2;    OS indicator
        //    offset: 8;    size: 16
        //    offset: 24;    size: 4;    section count
        $secCount = self::getInt4d($this->documentSummaryInformation, 24);

        // offset: 28;    size: 16;    first section's class id: 02 d5 cd d5 9c 2e 1b 10 93 97 08 00 2b 2c f9 ae
        // offset: 44;    size: 4;    first section offset
        $secOffset = self::getInt4d($this->documentSummaryInformation, 44);

        //    section header
        //    offset: $secOffset;    size: 4;    section length
        $secLength = self::getInt4d($this->documentSummaryInformation, $secOffset);

        //    offset: $secOffset+4;    size: 4;    property count
        $countProperties = self::getInt4d($this->documentSummaryInformation, $secOffset + 4);

        // initialize code page (used to resolve string values)
        $codePage = 'CP1252';

        //    offset: ($secOffset+8);    size: var
        //    loop through property decarations and properties
        for ($i = 0; $i < $countProperties; ++$i) {
            //    offset: ($secOffset+8) + (8 * $i);    size: 4;    property ID
            $id = self::getInt4d($this->documentSummaryInformation, ($secOffset + 8) + (8 * $i));

            // Use value of property id as appropriate
            // offset: 60 + 8 * $i;    size: 4;    offset from beginning of section (48)
            $offset = self::getInt4d($this->documentSummaryInformation, ($secOffset + 12) + (8 * $i));

            $type = self::getInt4d($this->documentSummaryInformation, $secOffset + $offset);

            // initialize property value
            $value = null;

            // extract property value based on property type
            switch ($type) {
                case 0x02:    //    2 byte signed integer
                    $value = self::getUInt2d($this->documentSummaryInformation, $secOffset + 4 + $offset);

                    break;
                case 0x03:    //    4 byte signed integer
                    $value = self::getInt4d($this->documentSummaryInformation, $secOffset + 4 + $offset);

                    break;
                case 0x0B:  // Boolean
                    $value = self::getUInt2d($this->documentSummaryInformation, $secOffset + 4 + $offset);
                    $value = ($value == 0 ? false : true);

                    break;
                case 0x13:    //    4 byte unsigned integer
                    // not needed yet, fix later if necessary
                    break;
                case 0x1E:    //    null-terminated string prepended by dword string length
                    $byteLength = self::getInt4d($this->documentSummaryInformation, $secOffset + 4 + $offset);
                    $value = substr($this->documentSummaryInformation, $secOffset + 8 + $offset, $byteLength);
                    $value = StringHelper::convertEncoding($value, 'UTF-8', $codePage);
                    $value = rtrim($value);

                    break;
                case 0x40:    //    Filetime (64-bit value representing the number of 100-nanosecond intervals since January 1, 1601)
                    // PHP-Time
                    $value = OLE::OLE2LocalDate(substr($this->documentSummaryInformation, $secOffset + 4 + $offset, 8));

                    break;
                case 0x47:    //    Clipboard format
                    // not needed yet, fix later if necessary
                    break;
            }

            switch ($id) {
                case 0x01:    //    Code Page
                    $codePage = CodePage::numberToName($value);

                    break;
                case 0x02:    //    Category
                    $this->spreadsheet->getProperties()->setCategory($value);

                    break;
                case 0x03:    //    Presentation Target
                    //    Not supported by PhpSpreadsheet
                    break;
                case 0x04:    //    Bytes
                    //    Not supported by PhpSpreadsheet
                    break;
                case 0x05:    //    Lines
                    //    Not supported by PhpSpreadsheet
                    break;
                case 0x06:    //    Paragraphs
                    //    Not supported by PhpSpreadsheet
                    break;
                case 0x07:    //    Slides
                    //    Not supported by PhpSpreadsheet
                    break;
                case 0x08:    //    Notes
                    //    Not supported by PhpSpreadsheet
                    break;
                case 0x09:    //    Hidden Slides
                    //    Not supported by PhpSpreadsheet
                    break;
                case 0x0A:    //    MM Clips
                    //    Not supported by PhpSpreadsheet
                    break;
                case 0x0B:    //    Scale Crop
                    //    Not supported by PhpSpreadsheet
                    break;
                case 0x0C:    //    Heading Pairs
                    //    Not supported by PhpSpreadsheet
                    break;
                case 0x0D:    //    Titles of Parts
                    //    Not supported by PhpSpreadsheet
                    break;
                case 0x0E:    //    Manager
                    $this->spreadsheet->getProperties()->setManager($value);

                    break;
                case 0x0F:    //    Company
                    $this->spreadsheet->getProperties()->setCompany($value);

                    break;
                case 0x10:    //    Links up-to-date
                    //    Not supported by PhpSpreadsheet
                    break;
            }
        }
    }
private function readDocumentSummaryInformation()
    {
        if (!isset($this->documentSummaryInformation)) {
            return;
        }

        //    offset: 0;    size: 2;    must be 0xFE 0xFF (UTF-16 LE byte order mark)
        //    offset: 2;    size: 2;
        //    offset: 4;    size: 2;    OS version
        //    offset: 6;    size: 2;    OS indicator
        //    offset: 8;    size: 16
        //    offset: 24;    size: 4;    section count
        $secCount = self::getInt4d($this->documentSummaryInformation, 24);

        // offset: 28;    size: 16;    first section's class id: 02 d5 cd d5 9c 2e 1b 10 93 97 08 00 2b 2c f9 ae
        // offset: 44;    size: 4;    first section offset
        $secOffset = self::getInt4d($this->documentSummaryInformation, 44);

        //    section header
        //    offset: $secOffset;    size: 4;    section length
        $secLength = self::getInt4d($this->documentSummaryInformation, $secOffset);

        //    offset: $secOffset+4;    size: 4;    property count
        $countProperties = self::getInt4d($this->documentSummaryInformation, $secOffset + 4);

        // initialize code page (used to resolve string values)
        $codePage = 'CP1252';

        //    offset: ($secOffset+8);    size: var
        //    loop through property decarations and properties
        for ($i = 0; $i < $countProperties; ++$i) {
            //    offset: ($secOffset+8) + (8 * $i);    size: 4;    property ID
            $id = self::getInt4d($this->documentSummaryInformation, ($secOffset + 8) + (8 * $i));

            // Use value of property id as appropriate
            // offset: 60 + 8 * $i;    size: 4;    offset from beginning of section (48)
            $offset = self::getInt4d($this->documentSummaryInformation, ($secOffset + 12) + (8 * $i));

            $type = self::getInt4d($this->documentSummaryInformation, $secOffset + $offset);

            // initialize property value
            $value = null;

            // extract property value based on property type
            switch ($type) {
                case 0x02:    //    2 byte signed integer
                    $value = self::getUInt2d($this->documentSummaryInformation, $secOffset + 4 + $offset);

                    break;
                case 0x03:    //    4 byte signed integer
                    $value = self::getInt4d($this->documentSummaryInformation, $secOffset + 4 + $offset);

                    break;
                case 0x0B:  // Boolean
                    $value = self::getUInt2d($this->documentSummaryInformation, $secOffset + 4 + $offset);
                    $value = ($value == 0 ? false : true);

                    break;
                case 0x13:    //    4 byte unsigned integer
                    // not needed yet, fix later if necessary
                    break;
                case 0x1E:    //    null-terminated string prepended by dword string length
                    $byteLength = self::getInt4d($this->documentSummaryInformation, $secOffset + 4 + $offset);
                    $value = substr($this->documentSummaryInformation, $secOffset + 8 + $offset, $byteLength);
                    $value = StringHelper::convertEncoding($value, 'UTF-8', $codePage);
                    $value = rtrim($value);

                    break;
                case 0x40:    //    Filetime (64-bit value representing the number of 100-nanosecond intervals since January 1, 1601)
                    // PHP-Time
                    $value = OLE::OLE2LocalDate(substr($this->documentSummaryInformation, $secOffset + 4 + $offset, 8));

                    break;
                case 0x47:    //    Clipboard format
                    // not needed yet, fix later if necessary
                    break;
            }

            switch ($id) {
                case 0x01:    //    Code Page
                    $codePage = CodePage::numberToName($value);

                    break;
                case 0x02:    //    Category
                    $this->spreadsheet->getProperties()->setCategory($value);

                    break;
                case 0x03:    //    Presentation Target
                    //    Not supported by PhpSpreadsheet
                    break;
                case 0x04:    //    Bytes
                    //    Not supported by PhpSpreadsheet
                    break;
                case 0x05:    //    Lines
                    //    Not supported by PhpSpreadsheet
                    break;
                case 0x06:    //    Paragraphs
                    //    Not supported by PhpSpreadsheet
                    break;
                case 0x07:    //    Slides
                    //    Not supported by PhpSpreadsheet
                    break;
                case 0x08:    //    Notes
                    //    Not supported by PhpSpreadsheet
                    break;
                case 0x09:    //    Hidden Slides
                    //    Not supported by PhpSpreadsheet
                    break;
                case 0x0A:    //    MM Clips
                    //    Not supported by PhpSpreadsheet
                    break;
                case 0x0B:    //    Scale Crop
                    //    Not supported by PhpSpreadsheet
                    break;
                case 0x0C:    //    Heading Pairs
                    //    Not supported by PhpSpreadsheet
                    break;
                case 0x0D:    //    Titles of Parts
                    //    Not supported by PhpSpreadsheet
                    break;
                case 0x0E:    //    Manager
                    $this->spreadsheet->getProperties()->setManager($value);

                    break;
                case 0x0F:    //    Company
                    $this->spreadsheet->getProperties()->setCompany($value);

                    break;
                case 0x10:    //    Links up-to-date
                    //    Not supported by PhpSpreadsheet
                    break;
            }
        }
    }
private function readDocumentSummaryInformation ( ) { if ( ! isset ( $ this -> documentSummaryInformation ) ) { return ; } //    offset: 0;    size: 2;    must be 0xFE 0xFF (UTF-16 LE byte order mark) //    offset: 2;    size: 2; //    offset: 4;    size: 2;    OS version //    offset: 6;    size: 2;    OS indicator //    offset: 8;    size: 16 //    offset: 24;    size: 4;    section count $ secCount = self :: getInt4d ( $ this -> documentSummaryInformation , 24 ) ; // offset: 28;    size: 16;    first section's class id: 02 d5 cd d5 9c 2e 1b 10 93 97 08 00 2b 2c f9 ae // offset: 44;    size: 4;    first section offset $ secOffset = self :: getInt4d ( $ this -> documentSummaryInformation , 44 ) ; //    section header //    offset: $secOffset;    size: 4;    section length $ secLength = self :: getInt4d ( $ this -> documentSummaryInformation , $ secOffset ) ; //    offset: $secOffset+4;    size: 4;    property count $ countProperties = self :: getInt4d ( $ this -> documentSummaryInformation , $ secOffset + 4 ) ; // initialize code page (used to resolve string values) $ codePage = 'CP1252' ; //    offset: ($secOffset+8);    size: var //    loop through property decarations and properties for ( $ i = 0 ; $ i < $ countProperties ; ++ $ i ) { //    offset: ($secOffset+8) + (8 * $i);    size: 4;    property ID $ id = self :: getInt4d ( $ this -> documentSummaryInformation , ( $ secOffset + 8 ) + ( 8 * $ i ) ) ; // Use value of property id as appropriate // offset: 60 + 8 * $i;    size: 4;    offset from beginning of section (48) $ offset = self :: getInt4d ( $ this -> documentSummaryInformation , ( $ secOffset + 12 ) + ( 8 * $ i ) ) ; $ type = self :: getInt4d ( $ this -> documentSummaryInformation , $ secOffset + $ offset ) ; // initialize property value $ value = null ; // extract property value based on property type switch ( $ type ) { case 0x02 : //    2 byte signed integer $ value = self :: getUInt2d ( $ this -> documentSummaryInformation , $ secOffset + 4 + $ offset ) ; break ; case 0x03 : //    4 byte signed integer $ value = self :: getInt4d ( $ this -> documentSummaryInformation , $ secOffset + 4 + $ offset ) ; break ; case 0x0B : // Boolean $ value = self :: getUInt2d ( $ this -> documentSummaryInformation , $ secOffset + 4 + $ offset ) ; $ value = ( $ value == 0 ? false : true ) ; break ; case 0x13 : //    4 byte unsigned integer // not needed yet, fix later if necessary break ; case 0x1E : //    null-terminated string prepended by dword string length $ byteLength = self :: getInt4d ( $ this -> documentSummaryInformation , $ secOffset + 4 + $ offset ) ; $ value = substr ( $ this -> documentSummaryInformation , $ secOffset + 8 + $ offset , $ byteLength ) ; $ value = StringHelper :: convertEncoding ( $ value , 'UTF-8' , $ codePage ) ; $ value = rtrim ( $ value ) ; break ; case 0x40 : //    Filetime (64-bit value representing the number of 100-nanosecond intervals since January 1, 1601) // PHP-Time $ value = OLE :: OLE2LocalDate ( substr ( $ this -> documentSummaryInformation , $ secOffset + 4 + $ offset , 8 ) ) ; break ; case 0x47 : //    Clipboard format // not needed yet, fix later if necessary break ; } switch ( $ id ) { case 0x01 : //    Code Page $ codePage = CodePage :: numberToName ( $ value ) ; break ; case 0x02 : //    Category $ this -> spreadsheet -> getProperties ( ) -> setCategory ( $ value ) ; break ; case 0x03 : //    Presentation Target //    Not supported by PhpSpreadsheet break ; case 0x04 : //    Bytes //    Not supported by PhpSpreadsheet break ; case 0x05 : //    Lines //    Not supported by PhpSpreadsheet break ; case 0x06 : //    Paragraphs //    Not supported by PhpSpreadsheet break ; case 0x07 : //    Slides //    Not supported by PhpSpreadsheet break ; case 0x08 : //    Notes //    Not supported by PhpSpreadsheet break ; case 0x09 : //    Hidden Slides //    Not supported by PhpSpreadsheet break ; case 0x0A : //    MM Clips //    Not supported by PhpSpreadsheet break ; case 0x0B : //    Scale Crop //    Not supported by PhpSpreadsheet break ; case 0x0C : //    Heading Pairs //    Not supported by PhpSpreadsheet break ; case 0x0D : //    Titles of Parts //    Not supported by PhpSpreadsheet break ; case 0x0E : //    Manager $ this -> spreadsheet -> getProperties ( ) -> setManager ( $ value ) ; break ; case 0x0F : //    Company $ this -> spreadsheet -> getProperties ( ) -> setCompany ( $ value ) ; break ; case 0x10 : //    Links up-to-date //    Not supported by PhpSpreadsheet break ; } } }
Read additional document summary information.
Read additional document summary information .