рдЬрд╝рд┐рдк рдЕрднрд┐рд▓реЗрдЦрд╛рдЧрд╛рд░ рдФрд░ PHP рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЪрдХреНрд░ рдХреА рдирд┐рд░рдВрддрд░рддрд╛ред рдкрд┐рдЫрд▓реЗ рд▓реЗрдЦ: рднрд╛рдЧ 1 , рднрд╛рдЧ 2 , рднрд╛рдЧ 3рдЕрдЪреНрдЫреЗ рджрд┐рди, рдкреНрд░рд┐рдп рдкрд╛рдардХреЛрдВред
рдЗрд╕ рдмрд╛рд░ рдореИрдВ рдкрд░рд┐рдЪрдп рджреЗрдирд╛ рдЪрд╛рд╣реВрдВрдЧрд╛, рд╢рд╛рдпрдж, рд╕рд╛рдЗрдХрд┐рд▓ рдЕрднрд┐рд▓реЗрдЦрд╛рдЧрд╛рд░ рдФрд░ PHP рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЪрдХреНрд░ рдХрд╛ рдЕрдВрддрд┐рдо рднрд╛рдЧред
рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ рдореИрдВ рджрд┐рдЦрд╛рдКрдВрдЧрд╛ рдХрд┐ рдореМрдЬреВрджрд╛ рд╕рдВрдЧреНрд░рд╣ рдХреЛ рдХреИрд╕реЗ рдкрдврд╝рд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдПрдХ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рд╣рдо рдПрдХ
рдкрд┐рдЫрд▓реЗ рд▓реЗрдЦ рд╕реЗ
рддрд╕реНрд╡реАрд░реЗрдВ рд▓реЗрдВрдЧреЗред
рдЬрд╝рд┐рдк ред рд╕рднреА рдкреНрд░рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреЛ рдирд╣реАрдВ рджреЛрд╣рд░рд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо рддреИрдпрд╛рд░ рдХрд┐рдП рдЧрдП рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗ -
https://github.com/userqq/images/raw/master/photos.zip ред
рдФрд░ рдЕрдм рдПрдХ рдкрд▓ рдХреЗ рд▓рд┐рдП рдкрдЪрд╛ рд▓реЗрддреЗ рд╣реИрдВ рдФрд░ рдпрд╛рдж рдХрд░рддреЗ рд╣реИрдВ рдХрд┐ рд╣рдорд╛рд░реЗ рд╕рдВрдЧреНрд░рд╣ рдореЗрдВ рдХреНрдпрд╛ рд╣реИ: рдкрд╣рд▓реЗ рдкреИрдХ рдХреА рдЧрдИ рдлрд╝рд╛рдЗрд▓ рдбреЗрдЯрд╛ рдХрд╛ рдПрдХ рд╕реЗрдЯ рд╣реЛрддрд╛ рд╣реИ, рдЬрд╣рд╛рдВ рдкреНрд░рддреНрдпреЗрдХ рдкреИрдХ рдХреА рдЧрдИ рдлрд╝рд╛рдЗрд▓ рд╕реНрдерд╛рдиреАрдп рдлрд╝рд╛рдЗрд▓ рд╣реИрдбрд░ (LFH) рд╕рдВрд░рдЪрдирд╛ рд╕реЗ рдкрд╣рд▓реЗ рд╣реЛрддреА рд╣реИ, рд╕рднреА рдбреЗрдЯрд╛ рдХреЗ рдмрд╛рдж рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рд╕реЗрдВрдЯреНрд░рд▓ рдбрд╛рдпрд░реЗрдХреНрдЯрд░реА рдлрд╝рд╛рдЗрд▓ рд╣реИрдбрд░ (CDFH) рд╕рдВрд░рдЪрдирд╛рдУрдВ рдХрд╛ рдПрдХ рд╕реЗрдЯ рд╣реЛрддрд╛ рд╣реИред - рдпрд╣ рд╣рдорд╛рд░реЗ рд╕рдВрдЧреНрд░рд╣ рдХреА рд╕рд╛рдордЧреНрд░реА рдХреА рдПрдХ рддрд╛рд▓рд┐рдХрд╛ рд╣реИ, рдЬреЛ рдлрд╝рд╛рдЗрд▓ рдХреЗ рдЖрд░рдВрдн рдХреЗ рд╕рд╛рдкреЗрдХреНрд╖ рд╕рднреА рддрддреНрд╡реЛрдВ рдФрд░ рдЙрдирдХреЗ рд╡рд┐рд╕реНрдерд╛рдкрди рдХреА рд╕реНрдерд┐рддрд┐ рдХреЛ рд╕реВрдЪреАрдмрджреНрдз рдХрд░рддреА рд╣реИред рдФрд░ рдХреЗрдВрджреНрд░реАрдп рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рд░рд┐рдХреЙрд░реНрдб рдХрд╛ рдЕрдВрдд (рдИрдУрд╕реАрдбреА) рд╕рдВрдЧреНрд░рд╣ рдкреВрд░рд╛ рд╣реЛрддрд╛ рд╣реИ - рдпрд╣рд╛рдВ рдмрд╛рдЗрдЯреНрд╕ рдореЗрдВ рд╕реАрдбреАрдПрдлрдПрдЪ рд╕рдВрд░рдЪрдирд╛рдУрдВ, рдЙрдирдХреА рд╕рдВрдЦреНрдпрд╛ рдФрд░ рдХреБрд▓ рд▓рдВрдмрд╛рдИ рдХреА рд╢реБрд░реБрдЖрдд рдХреА рд╕реНрдерд┐рддрд┐ рд╣реИред рдЗрд╕рд▓рд┐рдП, рд╕рдВрдЧреНрд░рд╣ рдХреЛ рдкрд╣рд▓реЗ рдИрдУрд╕реАрдбреА рдХреЛ рдЦреЛрдЬрдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдВрдд рд╕реЗ рдкрдврд╝рд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП, рдлрд┐рд░ рд╕реАрдбреАрдПрдлрдПрдЪ рд╕рдВрд░рдЪрдирд╛рдУрдВ рдХреЛ рдкрдврд╝реЗрдВ рдФрд░ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рд╕рдВрдЧреНрд░рд╣ рдореЗрдВ рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреА рдПрдХ рд╕реВрдЪреА рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВред
FYI рдХрд░реЗрдВ: рдФрд░ рдХреБрдЫ рдкреНрд░рд╛рд░реВрдк, рдЬреИрд╕реЗ JPEG, рд╢реБрд░реБрдЖрдд рд╕реЗ рдкрдврд╝реЗ рдЬрд╛рддреЗ рд╣реИрдВред рдЗрд╕рд▓рд┐рдП, рд╣рдо рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХреЛ рдЦреЛрдП рдмрд┐рдирд╛, рдЖрд░реНрдХ рдЗрдореЗрдЬ . jpeg рдЖрд░реНрдХрд╛рдЗрд╡.рдЬреАрдк> рдЗрдореЗрдЬрд┐рд╕реЗрдкреНрдЯрд┐рд╡.рдЬреЗрдкреАрдкреА рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╕рдВрдЧреНрд░рд╣ рдХреЗ рд╕рд╛рде рддрд╕реНрд╡реАрд░ рдХреЛ рднреА рдЧреЛрдВрдж рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЪрд┐рддреНрд░ рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдФрд░ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд╣рдореЗрдВ рдмрд┐рдирд╛ рдХрд┐рд╕реА рд╕рдорд╕реНрдпрд╛ рдХреЗ рдЪрд┐рддреНрд░ рджрд┐рдЦрд╛рдПрдВрдЧреЗред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдЬрд┐рдк рдЕрднрд┐рд▓реЗрдЦрд╛рдЧрд╛рд░ рдХреЛ рдкрдврд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдХреЛрдИ рднреА рдЖрд╡реЗрджрди, рдЪрд╛рд╣реЗ рд╡рд╣ 7z рд╣реЛ рдпрд╛ рдЕрдирдЬрд╝рд┐рдк, рдПрдХ рд╕рдВрдЧреНрд░рд╣ рдХреЗ рд░реВрдк рдореЗрдВ рдлрд╝рд╛рдЗрд▓ рдХреЗ рд╕рд╛рде рд╢рд╛рдВрддрд┐ рд╕реЗ рдХрд╛рдо рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдЧрд╛ред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдпрд╣рд╛рдБ - https://github.com/userqq/images/blob/master/jpegarchive.jpg (рд╕рд╛рд╡рдзрд╛рдиреА, рдЗрд╕ рдЪреАрдЬрд╝ рдХрд╛ рд╡рдЬрди рд▓рдЧрднрдЧ 20mb рд╣реИ, рдЗрд╕рд▓рд┐рдП рдореИрдВ рдлреЛрди рд╕реЗ рдЯреНрд░реИрдлрд╝рд┐рдХ рдЦреЛрд▓рдиреЗ рдпрд╛ рдЕрдЧрд░ рдЖрдк рдЯреНрд░реИрдлрд╝рд┐рдХ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдирд╣реАрдВ рд╕рд▓рд╛рд╣ рджреЗрддреЗ рд╣реИрдВ)ред рдЗрд╕ рдкреНрд░рдХрд╛рд░, рдпрджрд┐ рдЖрдк рдЙрди рдЪрд┐рддреНрд░реЛрдВ рдХреА рдореЗрдЬрд╝рдмрд╛рдиреА рдЬрд╛рдирддреЗ рд╣реИрдВ, рдЬрд┐рди рдкрд░ рдЪрд┐рддреНрд░реЛрдВ рдХреЛ рдкреБрди: рдирд╣реАрдВ рдбрд╛рд▓рд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдЙрдиреНрд╣реЗрдВ рдХреНрд░реЙрдк рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдЖрдк рди рдХреЗрд╡рд▓ рд╡рд╣рд╛рдБ рдЪрд┐рддреНрд░реЛрдВ рдХреЛ рдЕрдкрд▓реЛрдб рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ :) рд╣рд╛рд▓рд╛рдБрдХрд┐, рдпрд╣ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ, рдЕрдм рдЖрдкрдХреЛ рдпреЗ рдирд╣реАрдВ рдорд┐рд▓реЗрдВрдЧреЗредрд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рд╣рдо рдПрдХ рд╕рд╣рд╛рдпрдХ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддреЗ рд╣реИрдВ рдЬреЛ рд╣рдорд╛рд░реЗ рд▓рд┐рдП рдЕрдирдкреИрдХ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдирд╛ рдЖрд╕рд╛рди рдмрдирд╛ рджреЗрдЧрд╛ (рдореИрдВрдиреЗ рдореЛрдЬрд╝реЗ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдореЗрдВ рд╕реЗ рдПрдХ рдореЗрдВ
рд╕реБрд░рд╛рдЧ рдкрд░ рдЗрд╕ рд╡рд┐рдЪрд╛рд░ рдХреЛ рдЬрд╛рд╕реВрд╕реА рдХрд┐рдпрд╛ рдФрд░ рдЗрд╕реЗ рд╣рдорд╛рд░реЗ рдорд╛рдорд▓реЗ рдХреЗ рд▓рд┐рдП рдереЛрдбрд╝рд╛ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд┐рдпрд╛):
function readBytes($fh, $formatArray) {
рдЕрдм рдИрдУрд╕реАрдбреА рд╕рдВрд░рдЪрдирд╛ рдХреЛ рдЦреЛрдЬрдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рддреЗ рд╣реИрдВред рдЗрд╕рдХреА рдиреНрдпреВрдирддрдо рд▓рдВрдмрд╛рдИ, рдЕрдЧрд░ рдХреЛрдИ рдЯрд┐рдкреНрдкрдгреА рдирд╣реАрдВ рд╣реИ, рддреЛ 22 рдмрд╛рдЗрдЯреНрд╕ рд╣реЛрдВрдЧреЗ, рдЬрд┐рдирдореЗрдВ рд╕реЗ рдкрд╣рд▓реЗ 4 рдкрд░ рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рд╣реИрдВред рдЗрд╕рд▓рд┐рдП, рдкрд╣рд▓реЗ рд╣рдо рд╕реНрдерд┐рддрд┐ рдлрд╝рд╛рдЗрд▓ ($ рдлрд╝рд╛рдЗрд▓) - 22 рдкрд░ рдЬрд╛рддреЗ рд╣реИрдВ, рдЕрдЧрд▓реЗ 4 рдмрд╛рдЗрдЯреНрд╕ рдкрдврд╝рддреЗ рд╣реИрдВ, рдФрд░ рдпрджрд┐ рд╣рдо рднрд╛рдЧреНрдпрд╢рд╛рд▓реА рд╣реИрдВ рдФрд░ рдпреЗ рдмрд╛рдЗрдЯреНрд╕ рд╣рд╕реНрддрд╛рдХреНрд╖рд░ (0x06054b50) рдХреЗ рдмрд░рд╛рдмрд░ рд╣реИрдВ, рддреЛ рдпрд╣ рд╣рдорд╛рд░рд╛ EOCD рд╣реИред рдпрджрд┐ рдЖрдк рднрд╛рдЧреНрдпрд╢рд╛рд▓реА рдирд╣реАрдВ рд╣реИрдВ - рдмрд╛рдЗрдЯ-рдмрд╛рдп-рдмрд┐рдЯ рд╣рдо рдлрд╝рд╛рдЗрд▓ рдХреА рд╢реБрд░реБрдЖрдд рддрдХ рдЪрд▓реЗ рдЬрд╛рддреЗ рд╣реИрдВ рдЬрдм рддрдХ рдХрд┐ рд╣рдо рдлрд╝рд╛рдЗрд▓ рдХреЛ рдвреВрдВрдв рдпрд╛ рдЦрддреНрдо рдирд╣реАрдВ рдХрд░рддреЗ - рддрдм, рд╢рд╛рдпрдж, рдпрд╣ рдПрдХ рд╕рдВрдЧреНрд░рд╣ рдирд╣реАрдВ рд╣реИред
$fh = fopen('photos.zip', 'r'); for ($offset = 22, $length = fstat($fh)['size']; $offset <= $length; $offset++) { fseek($fh, $offset * -1, SEEK_END);
рдЕрдм рд╣рдореЗрдВ рдкрддрд╛ рд╣реИ рдХрд┐ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рд╕рдВрдЧреНрд░рд╣ рдореЗрдВ рдХрд┐рддрдиреЗ рддрддреНрд╡ рд╣реИрдВ рдФрд░ рдХрд╣рд╛рдБ "рд╕рд╛рдордЧреНрд░реА рдХреА рддрд╛рд▓рд┐рдХрд╛" рд╢реБрд░реВ рд╣реЛрддреА рд╣реИ - рд╕реАрдбреАрдПрдлрдПрдЪ рд╕рдВрд░рдЪрдирд╛рдУрдВ рдХреА рдПрдХ рд╕реВрдЪреАред рд╣рдо рдЙрди рдкрд░ рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рд╕рдВрдЧреНрд░рд╣ рдХреЗ рдкреНрд░рддреНрдпреЗрдХ рддрддреНрд╡реЛрдВ рдХреЗ рд▓рд┐рдП рдирд╛рдо, рдбреЗрдЯрд╛ рдХрд╛ рдЖрдХрд╛рд░ рдФрд░ LFH рдкреНрд░рд╛рд░рдВрдн рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
echo ' :' . PHP_EOL;
рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, рдкреНрд░рддреНрдпреЗрдХ рд░рд┐рдХреЙрд░реНрдб рдХреЗ рд▓рд┐рдП рдлрд╝рд╛рдЗрд▓ рдХреЛ рдЖрдЧреЗ рдФрд░ рдкреАрдЫреЗ рдЪрд▓рд╛рдирд╛ рдкреНрд░рджрд░реНрд╢рди рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рд╡рд┐рдЪрд╛рд░ рдирд╣реАрдВ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдореИрдВ рд╕рднреА CDFH рд╕рдВрд░рдЪрдирд╛рдУрдВ рдХреЛ рдкрдврд╝рдиреЗ рдХреА рд╕рд▓рд╛рд╣ рджреВрдВрдЧрд╛, рдФрд░ рдлрд┐рд░ рдЖрд╡рд╢реНрдпрдХ рд╣реЛрдиреЗ рдкрд░ LFH рдФрд░ рдбреЗрдЯрд╛ рдХреЛ рдкрдврд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП, рд▓реЗрдХрд┐рди рдпрд╣рд╛рдБ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ " рдЕрдкрд░рдВрдкрд░рд╛рдЧрдд рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ, "рддреЛ рд╣рдо рдХрд░ рд╕рдХрддреЗ рд╣реИрдВредрдкреВрд░реНрдг рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛрдб <?php function readBytes($fh, $formatArray) { static $lengths = ['L' => 4, 'l' => 4, 'i' => 4, 'I' => 4, 'S' => 2, 'a' => 1]; $totalLength = 0; $unpackFormat = []; $nullData = []; foreach ($formatArray as $name => $format) { $length = 1; if (is_array($format)) { [$format, $length] = $format; } if ($length < 1) { $nullData[] = $name; continue; } $totalLength += $lengths[$format] * $length; $unpackFormat[] = $format . (($length > 1) ? $length : '') . $name; } $packet = []; if ($totalLength > 0) { $packet = unpack(implode('/', $unpackFormat), fread($fh, $totalLength)); } foreach ($nullData as $empty) { $packet[$empty] = null; } return $packet; } $fh = fopen('photos.zip', 'r'); for ($offset = 22, $length = fstat($fh)['size']; $offset <= $length; $offset++) { fseek($fh, $offset * -1, SEEK_END); if ("\x50\x4b\x05\x06" === $bytes = fread($fh, 4)) { echo 'EOCD ' . ($length - $offset) . PHP_EOL; break; } } $EOCD = readBytes($fh, [ 'diskNumber' => 'S', 'startDiskNumber' => 'S', 'numberCentralDirectoryRecord' => 'S', 'totalCentralDirectoryRecord' => 'S', 'sizeOfCentralDirectory' => 'L', 'centralDirectoryOffset' => 'L', 'commentLength' => 'S', ]); echo ' : ' . $EOCD['numberCentralDirectoryRecord'] . PHP_EOL; echo ' CDFH: ' . $EOCD['centralDirectoryOffset'] . PHP_EOL; echo ' :' . PHP_EOL; $offset = $EOCD['centralDirectoryOffset']; for ($i = 0; $i < $EOCD['numberCentralDirectoryRecord']; $i++) { fseek($fh, $offset, SEEK_SET); if ("\x50\x4b\x01\x02" !== $bytes = fread($fh, 4)) { exit(' CDFH' . PHP_EOL); } $CDFH = readBytes($fh, [ 'versionMadeBy' => 'S', 'versionToExtract' => 'S', 'generalPurposeBitFlag' => 'S', 'compressionMethod' => 'S', 'modificationTime' => 'S', 'modificationDate' => 'S', 'crc32' => 'L', 'compressedSize' => 'L', 'uncompressedSize' => 'L', 'filenameLength' => 'S', 'extraFieldLength' => 'S', 'fileCommentLength' => 'S', 'diskNumber' => 'S', 'internalFileAttributes' => 'S', 'externalFileAttributes' => 'L', 'localFileHeaderOffset' => 'L', ]); $CDFH += readBytes($fh, [ 'filename' => ['a', $CDFH['filenameLength']], 'extraField' => ['a', $CDFH['extraFieldLength']], 'fileComment' => ['a', $CDFH['fileCommentLength']], ]); $offset = ftell($fh); fseek($fh, $CDFH['localFileHeaderOffset'], SEEK_SET); if ("\x50\x4b\x03\x04" !== $bytes = fread($fh, 4)) { exit(' LFH' . PHP_EOL); } $LFH = readBytes($fh, [ 'versionToExtract' => 'S', 'generalPurposeBitFlag' => 'S', 'compressionMethod' => 'S', 'modificationTime' => 'S', 'modificationDate' => 'S', 'crc32' => 'L', 'compressedSize' => 'L', 'uncompressedSize' => 'L', 'filenameLength' => 'S', 'extraFieldLength' => 'S', ]); $LFH += readBytes($fh, [ 'filename' => ['a', $LFH['filenameLength']], 'extraField' => ['a', $LFH['extraFieldLength']], ]); $dataOffset = ftell($fh); echo '> ' . $CDFH['filename'] . ' ' . $CDFH['compressedSize'] . ' , '; echo 'LFH: ' . $CDFH['localFileHeaderOffset'] . ', '; echo ' : ' . $dataOffset . ', '; echo ' : ' . ($dataOffset + $CDFH['compressedSize']); echo PHP_EOL; } fclose($fh);
рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЗ рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк, рд╣рдореЗрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХреА рддрд░рд╣ рд╕рдВрдЧреНрд░рд╣ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдХрд╛рд░реА рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреА рдЪрд╛рд╣рд┐рдП:
$ php readzip.php EOCD 18873702 : 172 CDFH: 18864696 : > 0.jpg 135021 , LFH: 0, : 35, : 135056 > 1.jpg 205686 , LFH: 135056, : 135091, : 340777 > 2.jpg 81393 , LFH: 340777, : 340812, : 422205 > 3.jpg 64892 , LFH: 422205, : 422240, : 487132 ... > 171.jpg 50465 , LFH: 18814194, : 18814231, : 18864696
рдФрд░, рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, рдЗрди рдЖрдВрдХрдбрд╝реЛрдВ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж, рд╣рдо рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд╕рдм рдХреБрдЫ рдпрд╛ рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдлрд╝рд╛рдЗрд▓ рдирд┐рдХрд╛рд▓ рд╕рдХрддреЗ рд╣реИрдВред
рд╣рдордиреЗ рдПрдиреНрдХреНрд░рд┐рдкреНрд╢рди рд╕рдВрдкреАрдбрд╝рди рдХреЛ рджрд░рдХрд┐рдирд╛рд░ рдХрд┐рдпрд╛ рдФрд░ рдХреЗрд╡рд▓ рдЙрд╕реА рд╕реНрдерд┐рддрд┐ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВ рдЬрдм рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рд╕рдВрдЧреНрд░рд╣ рдореЗрдВ рдбреЗрдЯрд╛ рд╣реИ рдЬреИрд╕рд╛ рдХрд┐ рд╣реИ, рд▓реЗрдХрд┐рди рд╕рдВрд░рдЪрдирд╛ рдХреЛ рд╕рдордЭрдиреЗ рдХреЗ рд▓рд┐рдП рдпрд╣ рдЖрд╡рд╢реНрдпрдХ рдирд╣реАрдВ рд╣реИ, рдФрд░ рдЬреЛ рднреНрд░рдорд┐рдд рд╣реЛрдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рдЙрдирдХреЗ рд▓рд┐рдП рд╡рд┐рдирд┐рд░реНрджреЗрд╢ рдкрдврд╝рдирд╛ рдФрд░ рд▓реЗрдЦреЛрдВ рдХреА рдЗрд╕ рд╢реНрд░реГрдВрдЦрд▓рд╛ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рд▓рд╛рдкрддрд╛ рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХреЛ рдЬреЛрдбрд╝рдирд╛ рдореБрд╢реНрдХрд┐рд▓ рдирд╣реАрдВ рд╣реЛрдЧрд╛ред
рдЗрд╕рд▓рд┐рдП, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╣рдо рд╕рдорд╛рдкреНрдд рдЪрдХреНрд░ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдпрджрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ рдЕрднреА рднреА рдкреНрд░рд╢реНрди рд╣реИрдВ рдпрд╛ рдореИрдВ рдкрд┐рдЫрд▓реЗ рд▓реЗрдЦреЛрдВ рдХреА рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдореЗрдВ рдХреБрдЫ рдЙрд▓реНрд▓реЗрдЦ рдпрд╛рдж рдХрд░рддрд╛ рд╣реВрдВ, рддреЛ рдХреБрдЫ рдЕрддрд┐рд░рд┐рдХреНрдд рд▓реЗрдЦ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВред
рд╕рдм рдХреБрдЫ рд╕рд┐рдо рдХреЗ рд▓рд┐рдПред
рдФрд░ рдореБрдЭреЗ рдЖрд╢рд╛ рд╣реИ рдХрд┐ рдпрджреНрдпрдкрд┐ рдпрд╣ рдЖрдкрдХреЗ рд▓рд┐рдП рдереЛрдбрд╝рд╛ рдерд╛, рдлрд┐рд░ рднреА рдпрд╣ рджрд┐рд▓рдЪрд╕реНрдк рдерд╛ :)