рдПрдХ рдлрд╝рд╛рдЗрд▓ рдкреНрд░рдмрдВрдзрдХ рдХреА рдХрд╣рд╛рдиреА

рдореБрдЭреЗ рдЖрдкрдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдкрддрд╛ рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдореИрдВрдиреЗ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдореБрдлреНрдд рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд▓рд┐рдЦрдХрд░ рд╡реЗрдм рдФрд░ рдкреАрдПрдЪрдкреА рдХрд╛ рдЕрдзреНрдпрдпрди рд╢реБрд░реВ рдХрд┐рдпрд╛ред рдореИрдВрдиреЗ рдЕрдкрдиреЗ рд╕реАрдПрдордПрд╕ рдХреЗ 2, рдПрдХ рдЧреИрд▓рд░реА, рдПрдХ рдордВрдЪ, рдПрдХ рдЕрддрд┐рдерд┐ рдкреБрд╕реНрддрдХ рд▓рд┐рдЦрд╛ ... рдореЗрд░реА рдкрд╣рд▓реА рдкрд░рд┐рдпреЛрдЬрдирд╛ рдПрдХ рдлрд╝рд╛рдЗрд▓ рдкреНрд░рдмрдВрдзрдХ рдереА, рдФрд░ рдореИрдВ рдЗрд╕ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░рдирд╛ рдЪрд╛рд╣реВрдВрдЧрд╛ рдХрд┐ рдпрд╣ рд╡рд┐рдХрд╛рд╕ рдХреЗ рдХрд┐рди рдЪрд░рдгреЛрдВ рд╕реЗ рдЧреБрдЬрд░рд╛ рдФрд░ рдЖрдЦрд┐рд░ рдореЗрдВ рдХреНрдпрд╛ рдмрди рдЧрдпрд╛ред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдореИрдВрдиреЗ рдЙрд╕реЗ рдХрдИ рд╕реЗрдХрдВрдб рдХреЗ рдкреЗрдЬ рдЬрдирд░реЗрд╢рди рдЯрд╛рдЗрдо рдХреЗ рд╕рд╛рде 32 рдПрдордмреА рдореЗрдореЛрд░реА_рд▓реАрдореЗрдЯ рдХреЗ рд▓рд┐рдП рдХреНрд░реЙрд▓ рдХрд┐рдП рдмрд┐рдирд╛ 500k рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЗ рд╕рд╛рде рдлрд╝реЛрд▓реНрдбрд░реНрд╕ рдЦреЛрд▓рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рд┐рдЦрд╛рдпрд╛ред

рдореИрдВрдиреЗ рдЙрдирдХреЗ рдХрд╛рдо рдХрд╛ рдПрдХ рдЫреЛрдЯрд╛ рдбреЗрдореЛ рддреИрдпрд╛рд░ рдХрд┐рдпрд╛ , рдФрд░ рдЬреАрдердм рдкрд░ рд╕реНрд░реЛрдд рдлрд╝рд╛рдЗрд▓ рдкреНрд░рдмрдВрдзрдХ рднреА рд░рдЦрд╛ред рд╕реНрд░реЛрдд рдЧреНрд░рдВрде рдмрд╣реБрдд рдЙрдЪреНрдЪ рдЧреБрдгрд╡рддреНрддрд╛ рдХреЗ рдирд╣реАрдВ рд╣реИрдВ, рдХреНрдпреЛрдВрдХрд┐ рдореВрд▓ рд░реВрдк рд╕реЗ рдпрд╣ рдореЗрд░реЗ рджреНрд╡рд╛рд░рд╛ рдПрдХ рд╡рд░реНрд╖ 2007 рдореЗрдВ рд▓рд┐рдЦрд╛ рдЧрдпрд╛ рдерд╛, рдЕрд░реНрдерд╛рдд 5 рд╕рд╛рд▓ рдкрд╣рд▓реЗ :)ред

2002 рд╡рд░реНрд╖ред рдпрд╣ рд╕рдм рдХреИрд╕реЗ рд╢реБрд░реВ рд╣реБрдЖред PHPFM 1.0


рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдореИрдВрдиреЗ рдЬреЛ рдкрд╣рд▓реА рдкрд░рд┐рдпреЛрдЬрдирд╛ рд▓рд┐рдЦрдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛ рд╡рд╣ рдПрдХ рдлрд╝рд╛рдЗрд▓ рдкреНрд░рдмрдВрдзрдХ рдерд╛ред рдХрд╛рд░рдг рдмрд╣реБрдд рд╕рд░рд▓ рдерд╛: рддрдм рдореБрдЭреЗ рдирд╣реАрдВ рдкрддрд╛ рдерд╛ рдХрд┐ MySQL рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреИрд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛рдП, рд▓реЗрдХрд┐рди рдореИрдВрдиреЗ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЗ рд╕рд╛рде рдХрдо рдпрд╛ рдЬреНрдпрд╛рджрд╛ рд╕реАрдЦрд╛ рд╣реИ :)ред рдореИрдВрдиреЗ рдлрд╝рд╛рдЗрд▓ рдкреНрд░рдмрдВрдзрдХ PHPFM рдХреЛ рдлреЛрди рдХрд┐рдпрд╛ рдФрд░ рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рдирд╛рдо рдХреЗ рддрд╣рдд cgi.myweb.ru рдкрд░ рдкреЛрд╕реНрдЯ рдХрд┐рдпрд╛ ред PHPFM , рдФрд░ рдореИрдВрдиреЗ рдкрд╣рд▓реЗ рджреЛ рдЕрдХреНрд╖рд░ "a" рдХреЛ рд╕реВрдЪреА рдХреЗ рдмрд╣реБрдд рдКрдкрд░ рдЬреЛрдбрд╝рд╛ :)ред рдЗрд╕рдХреЗ рдХреБрдЫ рдЕрдВрд╢ рдЕрднреА рднреА рдиреЗрдЯрд╡рд░реНрдХ рдкрд░ рдкрд╛рдП рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВ , рд╣рд╛рд▓рд╛рдВрдХрд┐ рдЖрдк рдЕрдм рдФрд░ рдХреБрдЫ рднреА рдбрд╛рдЙрдирд▓реЛрдб рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ - "рдлреНрд░реА рд╕реЙрдлреНрдЯрд╡реЗрдпрд░" рд╡рд╛рд▓реА рд╕рд╛рдЗрдЯреЗрдВ рдЬрд╛рд╣рд┐рд░ рддреМрд░ рдкрд░ рдХреБрдЫ рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐рдпреЛрдВ рдкрд░ рд╕реНрд░реЛрдд рдХреЛрдб рд╕рдВрдЧреНрд░рд╣ рдЦреЛ рджреЗрддреА рд╣реИрдВред

рд╕рдм рдХреБрдЫ рдмрд╣реБрдд рд╕рд░рд▓рддрд╛ рд╕реЗ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ - рдлрд╝реЛрд▓реНрдбрд░реНрд╕ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдорд╛рди рдХреЛрдб рдХреБрдЫ рдЗрд╕ рддрд░рд╣ рдерд╛:
Govnokod!
// ,     PHP   ,  htmlspecialchars,      .. $dh = opendir($dir); while ($f = readdir($dh)) { if ($f == '.' || $f == '..') continue; $fullpath = $dir . '/' . $f; $is_dir = is_dir($fullpath); ?><tr><td><input type="checkbox" name="files[]" value="<?=$f?>" /></td><td><img src="..." /></td><td><a href="..."><?=$f?></a></td></tr><? } 

рдХреЛрдб PHP рдореЗрдВ рдПрдХ рдХреНрд▓рд╛рд╕рд┐рдХ govnokod рдерд╛, рдЬрд┐рд╕рдореЗрдВ PHP рдФрд░ HTML рдХреЗ рд▓рд┐рдП рдХреЛрдб рдорд┐рд▓рд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдХреБрдЫ рднреА рдирд╣реАрдВ рдмрдЪрддрд╛ рд╣реИ рдФрд░ PHP рдореЗрдВ рдЧрддрд┐рд╢реАрд▓ рдЯрд╛рдЗрдкрд┐рдВрдЧ рдХреА рдЧреИрд░-рд╕реНрдкрд╖реНрдЯ рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреА рдЕрдиреБрдорддрд┐ рд╣реИ (рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдХреЛ рдкрдврд╝рдирд╛ рдЪрд╛рд╣рд┐рдП, рдЬрдмрдХрд┐ (рдЧрд▓рдд! == $ f = readdir) $ dh)))) , рдХреНрдпреЛрдВрдХрд┐ рдЕрдиреНрдпрдерд╛ рд░реАрдбрд┐рдВрдЧ "0" рдирд╛рдо рдХреЗ рд╕рд╛рде рдПрдХ рдлрд╝рд╛рдЗрд▓ рдкрд░ рд╕рдорд╛рдкреНрдд рд╣реЛ рдЬрд╛рдПрдЧреАред рдлрд┐рд░ рднреА, рдЗрд╕рдиреЗ рдХрд╛рдлреА рдЕрдЪреНрдЫрд╛ рдХрд╛рдо рдХрд┐рдпрд╛ рдФрд░ 0.5 рд╕реЗрдХрдВрдб рдореЗрдВ рдХрд╣реАрдВ 1,000 рдлрд╛рдЗрд▓реЛрдВ рдореЗрдВ рднреА рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдЙрддреНрдкрдиреНрди рдХреА, рд▓реЗрдХрд┐рди рд░реЗрдВрдбрд░ рдХрд░рдиреЗ рдореЗрдВ рдХрд╛рдлреА рд╕рдордп рд▓рдЧрд╛ред

рдЗрд╕ рдлрд╝рд╛рдЗрд▓ рдкреНрд░рдмрдВрдзрдХ рдореЗрдВ рдХрдИ рдХрдорд┐рдпрд╛рдВ рдереАрдВ: рдпрд╣ рд╡реЗрдм 1.0 рдерд╛, рдпрд╣ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛ рдерд╛ рдФрд░ рд╡реЗрдм рд╕рд░реНрд╡рд░ рдЪрд▓рд╛рдиреЗ рд╡рд╛рд▓реЗ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рдкрд╛рд╕ рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЗ рд▓рд┐рдП рд▓рд┐рдЦрдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рдирд╣реАрдВ рд╣реЛрдиреЗ рдкрд░ рдХреБрдЫ рднреА рд╕рдВрдкрд╛рджрд┐рдд рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛ рдерд╛ред рдпрд╣, рд╡реИрд╕реЗ, рд╕рд╛рдЭрд╛ рд╣реЛрд╕реНрдЯрд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рджреГрд╖реНрдЯрд┐рдХреЛрдг рд╣реИ - рдПрдХ рд╡реЗрдм рд╕рд░реНрд╡рд░ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП www-рдбреЗрдЯрд╛) рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдПрдХ рдЕрд▓рдЧ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдпреБрд░рд┐) рд╕реЗ рдПрдлрд╝рдЯреАрдкреА рдПрдХреНрд╕реЗрд╕ред

2003 рд╡рд░реНрд╖ред рд╕рдВрд╕реНрдХрд░рдг рджреЛ, рд╕реБрдзрд╛рд░ рд╣реБрдЖ


рдлрд╝рд╛рдЗрд▓ рдкреНрд░рдмрдВрдзрдХ рдХреЗ рдкрд╣рд▓реЗ рд╕рдВрд╕реНрдХрд░рдг рдХреЛ рдлрд┐рд░ рд╕реЗ рд▓рд┐рдЦрдиреЗ рдХрд╛ рдореБрдЦреНрдп рдХрд╛рд░рдг рдЗрд╕реЗ рдФрд░ рдЕрдзрд┐рдХ "рд╡реЗрдм 2.0" рдмрдирд╛рдиреЗ рдХреА рдореЗрд░реА рдЗрдЪреНрдЫрд╛ рдереА, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдРрд╕рд╛ рдХреЛрдИ рд╢рдмреНрдж рддрдм рдореМрдЬреВрдж рдирд╣реАрдВ рдерд╛ред рдореИрдВ рдПрдХ рдлрд╝рд╛рдЗрд▓ рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░рдХреЗ рдлрд╝рд╛рдЗрд▓реЛрдВ рдХрд╛ рдЪрдпрди рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рдерд╛, рдЬреИрд╕рд╛ рдХрд┐ рдПрдХ рдирд┐рдпрдорд┐рдд рд╡рд┐рдВрдбреЛрдЬ рдПрдХреНрд╕рдкреНрд▓реЛрд░рд░ рдореЗрдВ, рдФрд░ рд╕рдВрджрд░реНрдн рдореЗрдиреВ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рднреАред рдЗрд╕ рд╕рдВрд╕реНрдХрд░рдг рдХреЛ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдХреБрдЫ рд╕реНрдерд╛рдиреЛрдВ рдкрд░ рд╕рдВрд░рдХреНрд╖рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ (рдЗрд╕реЗ рдПрдХ рд╕реАрдзрд╛ рд▓рд┐рдВрдХ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдбрд╛рдЙрдирд▓реЛрдб рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдкрдВрдЬреАрдХрд░рдг рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рдирд╣реАрдВ рд╣реИ)ред рд╡реИрд╕реЗ, рдпрд╣ рдЕрднреА рднреА рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ (рдХрдо рд╕реЗ рдХрдо PHP 5.3 :) рдореЗрдВ, рд▓реЗрдХрд┐рди рд▓реЗрдЖрдЙрдЯ рдФрд░ рдЬреЗрдПрд╕ рдХреЛ IE 6 рдХреЗ рддрд╣рдд рддреЗрдЬ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рдЗрд╕рд▓рд┐рдП рд╕рднреА рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдЖрдзреБрдирд┐рдХ рдмреНрд░рд╛рдЙрдЬрд╝рд░реЛрдВ рдореЗрдВ рдЙрдкрд▓рдмреНрдз рдирд╣реАрдВ рд╣реЛрдВрдЧреАред рджрд░рдЕрд╕рд▓, рдпрд╣ рдЕрднреА рднреА рд░рд╛рдЗрдЯ-рдХреНрд▓рд┐рдХ рд╕рдВрджрд░реНрдн рдореЗрдиреВ рдЦреЛрд▓рдХрд░ рдФрд░ "рд╡рд┐рд╡рд░рдг" рдЯреИрдм рдореЗрдВ рдЪрдпрдирд┐рдд рдлрд╝рд╛рдЗрд▓ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдХрд╛рд░реА рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рддрд╛ рд╣реИ (рдЖрдЗрдлреНрд░реЗрдо рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рджреБрдирд┐рдпрд╛ рдХреЛ XMLHttpRequest рдХреЗ рдЕрд╕реНрддрд┐рддреНрд╡ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЕрднреА рддрдХ рдкрддрд╛ рдирд╣реАрдВ рдерд╛)ред

рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдХреЛ рд╣рдЯрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рд╣реИ, рдЬреЛ рдореЗрд░реЗ рдлрд╝рд╛рдЗрд▓ рдкреНрд░рдмрдВрдзрдХ рдореЗрдВ рдПрдХ рд╕рдорд╛рди рд░реВрдк рдореЗрдВ рдореМрдЬреВрдж рд╣реИ, рд▓рдЧрднрдЧ рд╕рдорд╛рди рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЗ рд╕рд╛рде :)ред рд╡рд░реНрддрдорд╛рди рд╕рдВрд╕реНрдХрд░рдг рдореЗрдВ, рдЗрди рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЛ рдареАрдХ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдореИрдВ рд╕рднреА рдХреЛ рдлрд┐рд░ рд╕реЗ рдЦрд░реЛрдВрдЪ рд╕реЗ рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реЛрдЪ рд░рд╣рд╛ рд╣реВрдВ рдФрд░ рдЕрдВрдд рдореЗрдВ рдПрдХ рд╕рднреНрдп рд╕рдВрд╕реНрдХрд░рдг рд▓рд┐рдЦ рд░рд╣рд╛ рд╣реВрдВ рдЬреЛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдХрд╛рдо рдХрд░реЗрдЧрд╛ рдФрд░ рдЗрд╕рдореЗрдВ рд╕реНрдкрд╖реНрдЯ рд╕реБрд░рдХреНрд╖рд╛ рддреНрд░реБрдЯрд┐рдпрд╛рдВ рдирд╣реАрдВ рд╣реЛрдВрдЧреА, рдФрд░ рдПрдХ рдЕрдЪреНрдЫреА рд╕рдВрд░рдЪрдирд╛ рднреА рд╣реЛрдЧреАред
 //  ,    function removedir($dir) { $dh=opendir($dir); while ($file=readdir($dh)) { if($file!="." && $file!="..") { $fullpath=$dir."/".$file; if(!is_dir($fullpath)) { unlink($fullpath); }else { removedir($fullpath); } } } closedir($dh); if(rmdir($dir)) { return true; }else { return false; } } 


рдпрд╣рд╛рдВ рдХрдо рд╕реЗ рдХрдо 3 рдЪреАрдЬреЗрдВ рдЧрд▓рдд рд╣реИрдВ:
1) рдУрдкреЗрдВрдбрд┐рд░ рдкрд░рд┐рдгрд╛рдо рдХрд╛ рдХреЛрдИ рд╕рддреНрдпрд╛рдкрди рдирд╣реАрдВ рд╣реИ
2) рдкреНрд░рддреАрдХрд╛рддреНрдордХ рд▓рд┐рдВрдХ рдХреЗ рд▓рд┐рдП рдХреЛрдИ рдЬрд╛рдБрдЪ рдирд╣реАрдВ рд╣реИ (рдЬрд┐рд╕рдХрд╛ рдЕрд░реНрде рд╣реИ рдХрд┐ рдпрджрд┐ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдореЗрдВ "/" рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рд┐рдорд▓рд┐рдВрдХ рд╣реИ, рддреЛ рдлрд╝рдВрдХреНрд╢рди рд░реВрдЯ рдлрд╝рд╛рдЗрд▓ рд╕рд┐рд╕реНрдЯрдо рдХреЛ рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐ рд╕реЗ рд╣рдЯрд╛рдирд╛ рд╢реБрд░реВ рдХрд░ рджреЗрдЧрд╛, рдЬрдм рддрдХ рдХрд┐ рдкрд░реНрдпрд╛рдкреНрдд рдЕрдзрд┐рдХрд╛рд░ рди рд╣реЛрдВ :))
3) рдЕрдорд╛рдиреНрдп рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдкрдарди рдХреЛрдб: рдлрд╝рдВрдХреНрд╢рди "0" рдирд╛рдо рд╡рд╛рд▓реА рдлрд╝рд╛рдЗрд▓ рдкрд░ рд░реБрдХ рдЬрд╛рдПрдЧрд╛

2004-2005 рд╡рд░реНрд╖ред рддреАрд╕рд░рд╛ рд╕рдВрд╕реНрдХрд░рдг рдмрдирд╛рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕


рдореБрдЭреЗ "рд╡реЗрдм 2.0" рдХрд╛ рд╡рд┐рдЪрд╛рд░ рдЗрддрдирд╛ рдкрд╕рдВрдж рдЖрдпрд╛ рдХрд┐ рдореИрдВрдиреЗ рдЖрдЧреЗ рдмрдврд╝рдиреЗ рдФрд░ рдлрд╝реНрд░реЗрдо рдкрд░ рд╕рдм рдХреБрдЫ рдХрд░рдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛, рдЬреИрд╕рд╛ рдХрд┐ рдЗрд╕ рд╡рд┐рдВрдбреЛрдЬ рдПрдХреНрд╕рдкреНрд▓реЛрд░рд░ рдореЗрдВ рд╣реИ, рдФрд░ рдЕрдВрдд рдореЗрдВ рдПрдХ рд╕реВрдЪреА рдореЗрдВ "рдЖрдЗрдХрди" рдХрд╛ рдПрдХ рдкреНрд░рдХрд╛рд░ рдЬреЛрдбрд╝реЗрдВред рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдореИрдВрдиреЗ рдЦреЛрдЬрдХрд░реНрддрд╛ рдХреЗ рдЕрдзрд┐рдХрд╛рдВрд╢ рд╡реНрдпрд╡рд╣рд╛рд░ рдХреА рдирдХрд▓ рдХреА, рдЬрд┐рд╕рдХреЗ рдмрд╛рдж рдореЗрд░рд╛ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛрдб рдЗрд╕ рддрд░рд╣ рдХреА рдЧрдбрд╝рдмрдбрд╝реА рдореЗрдВ рдмрджрд▓ рдЧрдпрд╛ рдХрд┐ рдореИрдВ рд╕рд┐рд░реНрдл рдЗрд╕рдХрд╛ рд╕рдорд░реНрдерди рдирд╣реАрдВ рдХрд░ рд╕рдХрд╛, рдмрд┐рд▓реНрдХреБрд▓ :)ред

рдпрд╣рд╛рдБ рд╣реИ рдХрд┐ рдореИрдВ рдХреНрдпрд╛ рдордВрдЪ рдкрд░ рд▓рд┐рдЦрд╛ рд╣реИ, рддреЛ рдХреЗ рд░реВрдк рдореЗрдВ рдирд╣реАрдВ рд╣реИ:
рд╕рдВрджреЗрд╢ рдкрд╛рда
рд╕рдЬреНрдЬрдиреЛрдВ, рдореИрдВрдиреЗ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛ (рдореБрдЭреЗ рдпрд╣ рднреА рдкрддрд╛ рдирд╣реАрдВ рдерд╛ рдХрд┐ рдХрд┐рддрдирд╛ рд╕рдордп ...) рдПрдХ рдмрд╛рд░ рдлрд┐рд░ рд╕реЗ рд╕рднреА рдЗрдЪреНрдЫрд╛рдУрдВ рдХреЛ рдзреНрдпрд╛рди рдореЗрдВ рд░рдЦрдирд╛ рд╣реИ ... рдФрд░ рдлрд╝реНрд░реЗрдореЛрдВ (рдПрдХреНрд╕рдкреНрд▓реЛрд░рд░ рдХреА рдЫрд╡рд┐ рдореЗрдВ) рдкрд░ рдПрдХ рдирдпрд╛ рдкреАрдПрдЪрдкреАрдПрдлрдПрдо 3.0 рдмрдирд╛рдПрдВред + рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рди рдХреЗрд╡рд▓ рдПрдХ рд╕реВрдЪреА, рдмрд▓реНрдХрд┐ рдЖрдЗрдХрди рдХреЗ рд░реВрдк рдореЗрдВ рднреА рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдорд░реНрдерди рдХрд░реЗрдВред рд╡рд░реНрддрдорд╛рди рдореЗрдВ рд╡рд┐рдХрд╕рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд░рд╣рд╛ рд╕рдВрд╕реНрдХрд░рдг рдмрд╣реБрдд рдореБрд╢реНрдХрд┐рд▓ рд╣реИ, рд▓реЗрдХрд┐рди рдХреНрд░реЙрд╕-рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ (рдпрд╛рдиреА, рдпрд╣ рдУрдкреЗрд░рд╛ рдореЗрдВ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ (рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдореЗрдВ рдЖрдкрдХреЛ рджрд╛рдПрдВ рдорд╛рдЙрд╕ рдмрдЯрди рдкрд░ рдХреНрд▓рд┐рдХ рдХреЗ рдЕрд╡рд░реЛрдзрди рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ), рдореЛрдЬрд╝рд┐рд▓рд╛ рдФрд░ IE рдореЗрдВред рдЕрднреА рддрдХ рд╡рд┐рдХрд╛рд╕ рдХреЗ рд╕реНрддрд░ рдкрд░, рдпрд╣рд╛рдБ рд╡рд╣реА рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ:

1) рдлреНрд░реЗрдо рд╕рдВрд░рдЪрдирд╛, рд░рдмрд░ рдбрд┐рдЬрд╛рдЗрди!
2) рдкрддрд╛ рдмрд╛рд░ ("рд╕рдВрдХреНрд░рдордг" рдмрдЯрди рд╕рдЬрд╛рд╡рдЯреА рд╣реИ!) рдФрд░ рдКрдкрд░реА рдлреНрд░реЗрдо рдореЗрдВ "рдКрдкрд░" рдмрдЯрди рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ
3) рдмрд╛рдПрдВ рдлреНрд░реЗрдо рдореЗрдВ, рджреЗрдЦреЗрдВ, рдЬреИрд╕рд╛ рдХрд┐ "рдлреЛрд▓реНрдбрд░реНрд╕" рдореЛрдб рдХреЗ рд╕рд╛рде рдПрдХреНрд╕рдкреНрд▓реЛрд░рд░ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реИред рдпрд╣ JSHTTPRequest рдкрд░ рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ (рдпрд╣ рдЗрд╕рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдЗрд╕реЗ рдлрд┐рд░ рд╕реЗ рдмрдирд╛рдиреЗ рдХреА рдпреЛрдЬрдирд╛ рд╣реИ - рдПрдХ рдмрд╣реБрдд рд╣реА рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рдЪреАрдЬ), рд▓реЗрдХрд┐рди рд╕рднреА рдлрд╝реЛрд▓реНрдбрд░реЛрдВ рдХреЛ рдЧрддрд┐рд╢реАрд▓ рд░реВрдк рд╕реЗ (рдПрдХ рдЕрджреГрд╢реНрдп IFRAME рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ) рдЦреЛрд▓рд╛ рдЬрд╛рддрд╛ рд╣реИред рдлреЛрд▓реНрдбрд┐рдВрдЧ рдФрд░ рдлреЛрд▓реНрдбрд┐рдВрдЧ рдлреЛрд▓реНрдбрд░ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ - NO рд╕рдВрджрд░реНрдн рдореЗрдиреВ!
4) рдкреНрд░рддреАрдХ рдХреЗ рд░реВрдк рдореЗрдВ рдореБрдЦреНрдп рдлреНрд░реЗрдо рдореЗрдВ (рдпрд╣ рд╕рд┐рджреНрдзрд╛рдВрдд рд░реВрдк рдореЗрдВ, рдПрдХ рд╕реВрдЪреА рдХреЗ рд░реВрдк рдореЗрдВ рднреА рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдХреБрдЫ рднреА рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ), рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЗ рд╕рд╛рде рддреИрдпрд╛рд░ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдФрд░ рдЬрдм рдПрдХ рдлреНрд░реЗрдо рдХрд╛ рдЖрдХрд╛рд░ рдмрджрд▓ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдкреГрд╖реНрда рдХреЛ рдлрд┐рд░ рд╕реЗ рд▓реЛрдб рдХрд░рдиреЗ рдкрд░ рдЗрд╕рдХреА рд╕рд╛рдордЧреНрд░реА рдХреЛ рдлрд┐рд░ рд╕реЗ рддреИрдпрд╛рд░ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдлрд╝рд╛рдЗрд▓ рдЪрдпрди рдХрд╛рд░реНрдп (рдЕрдм рддрдХ рдПрдХрд╛рдзрд┐рдХ рдЪрдпрди рдбрд┐рдмрдЧ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ) рдорд╛рдЙрд╕ рдХреЗ рд╕рд╛рде, рдЬрдм рдЖрдк рдереЛрдбрд╝реА рджреЗрд░ рдХреЗ рдмрд╛рдж рдлрд╝рд╛рдЗрд▓ рдкрд░ рд╣реЛрд╡рд░ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдлрд╝рд╛рдЗрд▓ рдЬрд╛рдирдХрд╛рд░реА рд╡рд╛рд▓рд╛ рдПрдХ рд╢реАрд░реНрд╖рдХ рдЗрд╕рдХреЗ рдКрдкрд░ рдкреЙрдк рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ (рдкрд╣рд▓реЗ рдпрд╣ рдлрд╝реЛрд▓реНрдбрд░ рдХреЗ рд▓рд┐рдП рднреА рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛)ред рдирд╛рдо рдЬреЛ рдмрд╣реБрдд рд▓рдВрдмреЗ рд╣реИрдВ, рдЙрдиреНрд╣реЗрдВ рдХрд╛рдЯ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬрдм рдЖрдк рдХрд┐рд╕реА рдлрд╝рд╛рдЗрд▓ рдпрд╛ рдлрд╝реЛрд▓реНрдбрд░ рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдЙрд╕рдХрд╛ рдирд╛рдо рдЙрд╕рдХреЗ рдкреВрд░реНрдг рдЖрдХрд╛рд░ рдореЗрдВ рдкреБрдирд░реНрд╕реНрдерд╛рдкрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ (рд╣рд╛рд▓рд╛рдВрдХрд┐ рдЕрдм рддрдХ рдмрд┐рдирд╛ рд▓рд╛рдЗрди рдмреНрд░реЗрдХ рдХреЗ)ред рдпрджрд┐ рдлрд╝рд╛рдЗрд▓ рдпрд╛ рдлрд╝реЛрд▓реНрдбрд░ рдПрдХ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдЕрдВрддрд░рд╛рд▓ рдХреЗ рд╕рд╛рде рджреЛ рдмрд╛рд░ рдХреНрд▓рд┐рдХ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рддреЛ рдлрд╝реЛрд▓реНрдбрд░ рдЦреБрд▓рдиреЗ рд╕реЗ рдлрд╝реЛрд▓реНрдбрд░ рдЦреБрд▓ рдЬрд╛рддрд╛ рд╣реИ, рдлрд╝рд╛рдЗрд▓ рдХрд╛ рдирд╛рдо рдмрджрд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╡рд┐рдВрдбреЛ рдкреЙрдк рдЕрдк рд╣реЛрддреА рд╣реИ (рдпрд╣ рдореЗрд░реЗ рд▓рд┐рдП <рдЗрдирдкреБрдЯ рдкреНрд░рдХрд╛рд░ = рдкрд╛рда ... рдХреЗ рд▓рд┐рдП рдПрдХ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрди рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ)ред рдлрд╝рд╛рдЗрд▓реЛрдВ рдФрд░ рдлрд╝реЛрд▓реНрдбрд░реЛрдВ рдХреЗ рд▓рд┐рдП, рд╕рдВрджрд░реНрдн рдореЗрдиреВ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред рдЕрдм рддрдХ, рдХрдИ рдФрд░ рдЪреАрдЬреЛрдВ рдХреЛ рд▓рд╛рдЧреВ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдХреГрдкрдпрд╛ рдХрдо рд╕реЗ рдХрдо рд╡рд┐рдЪрд╛рд░ рджрд░ рдХрд░реЗрдВред

рдкреНрд░рджрд░реНрд╢рди рдХрд╛ рдкрддрд╛: <рдЧреИрд░-рдХрд╛рдо рдХрд╛ рдкрддрд╛, рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ>, рдкрд╛рд╕рд╡рд░реНрдб рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рдореБрдЭреЗ рдПрдХ рд▓реИрди рд▓рд┐рдЦреЗрдВ, рдореИрдВ рдЖрдкрдХреЛ рдПрдХ рдкрд╛рд╕рд╡рд░реНрдб (рдПрд╣рддрд┐рдпрд╛рдд) рднреЗрдЬреВрдВрдЧрд╛ред

2006 рд╡рд░реНрд╖ред рдбреЙрд▓реНрдлрд┐рди (Dolphin.php)


рдХреБрдЫ рд╕рдордп рдмрд╛рдж, рдореБрдЭреЗ рдПрд╣рд╕рд╛рд╕ рд╣реБрдЖ рдХрд┐ рдореИрдВрдиреЗ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдХрдо рдпрд╛ рдЬреНрдпрд╛рджрд╛ рдЕрдиреБрднрд╡ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд▓рд┐рдпрд╛ рд╣реИ (рдФрд░ рдЕрднреА рднреА рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ рдХреБрдЫ рд╕рдордЭрдирд╛ рд╢реБрд░реВ рдХрд░ рджрд┐рдпрд╛ рд╣реИ) рдФрд░ рдЕрдм рдореИрдВ рд╡рд╣реА рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ рдЬреЛ рдореИрдВрдиреЗ рд╕рдкрдиреЗ рдореЗрдВ рджреЗрдЦрд╛ рдерд╛ - рдПрдХреНрд╕рдкреНрд▓реЛрд░рд░ рдХреА рдПрдХ рдкреВрд░реА рдкреНрд░рддрд┐рд▓рд┐рдкрд┐, рдХреЗрд╡рд▓ PHP рдореЗрдВ: )ред рдпрд╣рд╛рдБ рдЙрд╕ рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рд╕реНрдХреНрд░реАрдирд╢реЙрдЯ рдореЗрдВ рд╕реЗ рдПрдХ рд╣реИ:



рдореЗрдиреВ рдЖрдЗрдЯрдо рд╕рдЬрд╛рд╡рдЯреА рдереЗ, рд▓реЗрдХрд┐рди рдмрдЯрди "рдкреАрдЫреЗ", "рдЖрдЧреЗ", рдЖрджрд┐ред рдПрдХреНрд╕рдкреНрд▓реЛрд░рд░ рдХреЗ рдХрд░реАрдм рдХреЗ рд░реВрдк рдореЗрдВ рдПрдирд┐рдореЗрдЯреЗрдб рдереЗ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рд╡реЗрдм рдкрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдордЭ рдореЗрдВ рдЖрдпрд╛ рдФрд░ рдореЗрд░реЗ рдкрд╛рд╕ рдХрд┐рддрдирд╛ рдХреМрд╢рд▓ рдерд╛ред рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ PHPFM 3.0 рдЬрд┐рд╕реЗ рдореИрдВрдиреЗ рддреНрдпрд╛рдЧ рджрд┐рдпрд╛ рдерд╛, рдЙрд╕рдиреЗ рдПрдХреНрд╕рдкреНрд▓реЛрд░рд░ рдХреА рддрд░рд╣ рдЗрддрдирд╛ рдХрд╛рдо рдХрд┐рдпрд╛ рдХрд┐ рдХрд┐рд╕реА рдиреЗ рдЗрд╕реЗ "рдЕрдВрддрд┐рдо рд░реВрдк рджрд┐рдпрд╛" ("рдХрд╛рдо рдХрд░рдиреЗ рд╡рд╛рд▓реЗ" рдХреЗ рд╕реНрддрд░ рдореЗрдВ рд▓рд╛рдкрддрд╛ рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХреЛ рдЬреЛрдбрд╝рддреЗ рд╣реБрдП) рдФрд░ рдЗрд╕реЗ рдХрд┐рд╕реА рд╕рдВрд╕реНрдерд╛рди рдореЗрдВ рдлрд╝рд╛рдЗрд▓ рд╣реЛрд╕реНрдЯрд┐рдВрдЧ рд╕реЗрд╡рд╛ рдХреЗ рд░реВрдк рдореЗрдВ рд╕реНрдерд╛рдкрд┐рдд рдХрд┐рдпрд╛ред рдХрд┐рд╕реА рдиреЗ рд╕реНрдерд╛рдиреАрдп рдиреЗрдЯрд╡рд░реНрдХ рдкрд░ PHPFM рдХреЗ рдкрд┐рдЫрд▓реЗ рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдХреЛ рд▓реЗрдЦрд╛рдВрдХрди рдХреЗ рд▓рд┐рдП рдлрд╝рд╛рдЗрд▓-рд╕рд╣рд╛рдпрддрд╛ рдХреЗ рд░реВрдк рдореЗрдВ рд╕реНрдерд╛рдкрд┐рдд рдХрд┐рдпрд╛, рдХреНрдпреЛрдВрдХрд┐ рд╕рдм рдХреБрдЫ рдПрдХреНрд╕рдкреНрд▓реЛрд░рд░ рдХреЗ рд╕рдорд╛рди рдерд╛ рдФрд░ рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдЗрд╕реЗ рдиреЗрд╡рд┐рдЧреЗрдЯ рдХрд░рдирд╛ рдмрд╣реБрдд рдЖрд╕рд╛рди рдерд╛ред

2007 рд╡рд░реНрд╖ Microsoft рд╕реЗ рдХреЙрдкреАрд░рд╛рдЗрдЯрд░реЛрдВ рдХреА рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХреЗ рдбрд░ рдХреЗ рдХрд╛рд░рдг рдбрд┐рдЬрд╛рдЗрди рдХрд╛ рдмрджрд▓рд╛рд╡ :)


рдореИрдВ 2006 рд╕реЗ 2007 рддрдХ рд╕рдХреНрд░рд┐рдп рд░реВрдк рд╕реЗ "рдбреЙрд▓реНрдлрд┐рди" рд╡рд┐рдХрд╕рд┐рдд рдХрд░ рд░рд╣рд╛ рдерд╛, рдФрд░ рдХреБрдЫ рдмрд┐рдВрджреБ рдкрд░ рдпрд╣ рдореБрдЭ рдкрд░ рд╣рд╛рд╡реА рд╣реЛ рдЧрдпрд╛ рдХрд┐ рдХрд┐рд╕реА рдФрд░ рдХреЗ рдбрд┐рдЬрд╛рдЗрди рдХреА рдирдХрд▓ рдХрд░рдирд╛ рдЕрдЪреНрдЫрд╛ рдирд╣реАрдВ рд╣реИ, рдФрд░ рд╕реИрджреНрдзрд╛рдВрддрд┐рдХ рд░реВрдк рд╕реЗ рдХреЙрдкреАрд░рд╛рдЗрдЯ рдореБрдЭ рдкрд░ рд╣рдорд▓рд╛ рдХрд░реЗрдЧрд╛ рдпрджрд┐ рдореИрдВ рдПрдХреНрд╕рдкреНрд▓реЛрд░рд░ :) рдХреЗ рд╕рд╛рде рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рддрддреНрд╡ рд▓реЗрдирд╛ рдЬрд╛рд░реА рд░рдЦрддрд╛ рд╣реВрдВред рдЗрд╕рд▓рд┐рдП, рдореИрдВрдиреЗ рдбрд┐рдЬрд╝рд╛рдЗрди рдХреЛ рдмрджрд▓рдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛, рдЬрд┐рд╕рдХреЗ рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк рдлрд╝рд╛рдЗрд▓ рдкреНрд░рдмрдВрдзрдХ рдЕрднреА рднреА рдЕрдкреВрд░реНрдг рд╕реНрдерд┐рддрд┐ рдореЗрдВ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдореИрдВрдиреЗ рдЗрд╕рдХреЗ рдкрд░рд┐рд╡рд░реНрддрди рд╕реЗ рдЬреБрдбрд╝реЗ рд╕рднреА рдмрдЧреЛрдВ рдХреЛ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдирд╣реАрдВ рдкрдХрдбрд╝рд╛ рд╣реИред рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдореИрдВрдиреЗ рдЗрд╕реЗ рдЬреНрдпрд╛рджрд╛ рдирд╣реАрдВ рдХрд┐рдпрд╛ред

рдЕрдм рдлрд╝рд╛рдЗрд▓ рдкреНрд░рдмрдВрдзрдХ рдХреБрдЫ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрддрд╛ рд╣реИ:


рдкреНрд░рджрд░реНрд╢рди рдЕрдиреБрдХреВрд▓рди


рдореИрдВ рдИрдорд╛рдирджрд╛рд░реА рд╕реЗ рдЙрди рд▓реЛрдЧреЛрдВ рдХреА рд╢реНрд░реЗрдгреА рдореЗрдВ рдЖрддрд╛ рд╣реВрдВ рдЬреЛ рдЙрддреНрдкрд╛рджрдХрддрд╛ рдХреА рдкрд░рд╡рд╛рд╣ рдХрд░рддреЗ рд╣реИрдВред рдореБрдЭреЗ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдпрд╣ рдкрд╕рдВрдж рд╣реИ рдЬрдм рд╕рдм рдХреБрдЫ рдЬрд▓реНрджреА рд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рдФрд░ рдореЗрд░реЗ рдлрд╝рд╛рдЗрд▓ рдкреНрд░рдмрдВрдзрдХ рдХреЗ рд▓рд┐рдП рдореИрдВрдиреЗ рд╣рдореЗрд╢рд╛ рдЕрдкрдиреЗ рдХрд╛рдо рдХреЛ рдЧрддрд┐ рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП рдирдП рддрд░реАрдХреЛрдВ рдХреЗ рд╕рд╛рде рдЖрдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХреАред рдореБрдЦреНрдп рдЪреАрдЬ рдЬрд┐рд╕реЗ рдореИрдВ рдЧрддрд┐ рджреЗрдирд╛ рдЪрд╛рд╣рддрд╛ рдерд╛ рд╡рд╣ рдПрдХ рдлрд╝рд╛рдЗрд▓ рд╕реВрдЪреА рдЦреЛрд▓ рд░рд╣реА рдереА - рдлрд╝рд╛рдЗрд▓ рдкреНрд░рдмрдВрдзрдХ рдореЗрдВ рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд┐рдпрд╛ рдЬрд╛рдиреЗ рд╡рд╛рд▓рд╛ рдлрд╝рдВрдХреНрд╢рдиред рдпрд╣рд╛рдБ рдХрд╛рдо рдХреА рдЧрддрд┐ рдмрдврд╝рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рд╡рд┐рдЪрд╛рд░ рджрд┐рдП рдЧрдП рд╣реИрдВ:

1. рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдкрдврд╝рдиреЗ рдХреЗ рдЪрдХреНрд░ рдореЗрдВ рдХрд┐рдП рдЧрдП рд╕рдВрдЪрд╛рд▓рди рдХреА рд╕рдВрдЦреНрдпрд╛ рдХреЛ рдиреНрдпреВрдирддрдо рдХрд░рдирд╛
рд╡рд┐рд╡рд░рдг
рдХреЛрдб:
 <?php function d_filelist_fast($dir) { setreadable($dir,true); if(!(@$dh=opendir($dir)) && !(@$ftp_list=d_ftplist($dir))) return false; if($dh) { $dirs = $files = $fsizes = array(); /* chdir($dir); */ while(false!==(@$file=readdir($dh))) { if($file=='.' || $file=='..') continue; if(is_dir($dir.'/'.$file)) $dirs[]=$dir.'/'.$file; else $files[]=$dir.'/'.$file; $fsizes[$dir.'/'.$file] = filesize($dir.'/'.$file); } closedir($dh); }else return $ftp_list; return array('dirs'=>$dirs,'files'=>$files,'fsizes'=>$fsizes); } 

50,000 рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЗ рдлрд╝реЛрд▓реНрдбрд░ рдкрд░ рдкреНрд░рджрд░реНрд╢рди рдореВрд▓реНрдпрд╛рдВрдХрди:
488 рдПрдордПрд╕ рдкреАрдврд╝реА
33.51 рдПрдордмреА рдореЗрдореЛрд░реА
246 KB рдЗрди gzip (+ 500 ms рдкреНрд░рддрд┐ рдбрд╛рдЙрдирд▓реЛрдб)
рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдореЗрдВ 305 рдорд┐
= 1300 рдорд┐

+ рдХреЛрдИ рдбреЗрдЯрд╛ рдбрд╛рдЙрдирд▓реЛрдб (рд╕рд╛рдорд╛рдиреНрдп рд░реВрдк рд╕реЗ)
- рд╕рдмрд╕реЗ рдзреАрдорд╛ рд╡рд┐рдХрд▓реНрдк
- рдореЗрдореЛрд░реА рдХреА рдмрд╣реБрдд рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ


2. рд╡рд┐рдВрдбреЛрдЬ рдХреЗ рддрд╣рдд i386 рдлрд╝реЛрд▓реНрдбрд░ рдЦреЛрд▓рдиреЗ рдкрд░ рдкреНрд░рджрд░реНрд╢рди рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдиреЗ рдпрд╣ рд╕реНрдкрд╖реНрдЯ рдХрд░ рджрд┐рдпрд╛ рдХрд┐ рд╡рд┐рдВрдбреЛрдЬ рдХреЗ рддрд╣рдд рдХреЙрд▓рд┐рдВрдЧ рд╕реНрдЯреЗрдЯ () рдХреЛ рдПрдХ рдмрд╣реБрдд рдорд╣рдВрдЧрд╛ рдСрдкрд░реЗрд╢рди рд╣реИред рдпрджрд┐ рдЖрдк рдкрд░рд┐рдгрд╛рдо рдХреЛ рдкреГрд╖реНрдареЛрдВ рдореЗрдВ рддреЛрдбрд╝рддреЗ рд╣реИрдВ рдФрд░ рдХреЗрд╡рд▓ рд╡рд░реНрддрдорд╛рди рдкреГрд╖реНрда рдкрд░ рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЗ рд▓рд┐рдП рд╕реНрдЯреЗрдЯ () рдХрд╣рддреЗ рд╣реИрдВ, рддреЛ рдЖрдк рдмрд╣реБрдд рдХреБрдЫ рдмрдЪрд╛ рд╕рдХрддреЗ рд╣реИрдВред рдореИрдВрдиреЗ "рдордХреНрдЦреА рдкрд░" рдХреЛрдб рдЙрддреНрдкрдиреНрди рдХрд░рдХреЗ рдФрд░ рдЗрд╕реЗ рдирд┐рд╖реНрдХрд╛рд╕рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдореИрдЪреЛрдВ рдХреЛ рдмрдЪрд╛рдиреЗ рдХреА рднреА рдХреЛрд╢рд┐рд╢ рдХреА, рдЗрд╕рд▓рд┐рдП рдХреЛрдб рдмрд╣реБрдд рдЬрдЯрд┐рд▓ рд╣реЛ рдЧрдпрд╛, рд▓реЗрдХрд┐рди рдХрд╛рдлреА рддреЗрдЬред
рд╡рд┐рд╡рд░рдг
рдХреЛрдб:
 /* extremely complicated :), extremely fast (on huge directories) and extremely customizable sorted filelist :) $dir -- directory from which to get filelist $params -- array with optional parameters (see beginning of function for details) RETURN: array( 'pages' => array( $pagemin => array( 'files' => array('field1' => $list1, ..., 'fieldN' => $listN), 'dirs' => ... (array of the same format) ), ... (the intermediate pages) $pagemax => array( 'files' => ..., 'dirs' => ... ) ), 'pages_num' => ..., 'items_num' => ... ) where field1, ..., fieldN -- requested fields (default 'name' and 'size') $list1, ..., $listN -- a list of values (array('value1', 'value2', ...,'valueN')), $pagemin and $pagemax -- the page numbers of the specified range (default 1) pages_num -- filtered number of pages (returns 1 if you do not ask not to split to pages) items_num -- filtered number of files + total number of folders EXAMPLE: $res = d_filelist_exteme('/home/yourock'); print_r($res); this will result in: Array ( [pages] => Array ( [1] => Array ( [files] => Array ( [name] => Array ( [0] => file1 [1] => file3 [2] => file20 ) [size] => Array ( [0] => 1000 [1] => 2000 [2] => 300000 ) ) [dirs] => Array ( [name] => Array ( [0] => dir1 ) [size] => Array ( [0] => 512 ) ) ) ) [pages_num] => 1 [items_num] => 4 ) */ /* TODO: move it to config.php in some time */ define('LIGHT_PERPAGE', 30); function d_filelist_extreme($dir, $params=array()) { /* set defaults: $key = ''; is equal to default value for $params['key'] */ $fields = array('name', 'size'); // name, chmod or any field of stat(): (size, mtime, uid, gid, ...) $filt=''; // filename filter $sort='name'; // what field to sort (see $fields) $order='asc'; // sorting order: "asc" (ascending) or "desc" (descending) $fast=true; // use some optimizations (eg can allow to get some range from a filelist of 5000 files in 0.1 sec) $maxit=defined('JS_MAX_ITEMS') ? JS_MAX_ITEMS : 200; // how many items is enough to enable optimization? $split=true; // split result to pages and return only results for pages from $pagemin to $pagemax (including both) $pagemin=1; $pagemax=1; // see description for $split $perpage=LIGHT_PERPAGE; // how many files per page $ftp=true; // try to get filelist through FTP also (can affect performance) /* read parameters, overwriting default values */ extract($params,EXTR_OVERWRITE); if($sort!='name') { /*return d_error('Not supported yet');*/ $fast = false; if(array_search('mode', $fields) === false) $fields[] = 'mode'; } if($pagemax < $pagemin) $pagemax = $pagemin; if(array_search($sort, $fields)===false) $fields[] = $sort; if($order != 'asc') $order = 'desc'; $filt = strtolower($filt); /* check required fields */ $st = stat(__FILE__); foreach($fields as $k=>$v) { if($v == 'name' || $v=='chmod') continue; if(!isset($st[$v])) { $keys = array_filter(array_keys($st), 'is_string'); return d_error('Unknown field: '.$v.'. Use the following: name, chmod, '.implode(', ', $keys)); } } setreadable($dir, true); if(!@$dh = opendir($dir)) { if(!$ftp) return d_error('Directory not readable'); if(!@$ftp_list=d_ftplist($dir)) return d_error('Directory not readable'); } if($dh) { $it = array(); /* items */ if(!$filt) { while(false!==(@$f=readdir($dh))) { if($f=='.' || $f=='..') continue; $it[] = $f; } }else { while(false!==(@$f=readdir($dh))) { if($f=='.' || $f=='..') continue; if(strpos(strtolower($f),$filt)!==false) $it[] = $f; } } closedir($dh); if(!$split) $perpage = sizeof($it); $old_dir = getcwd(); chdir($dir); $l = sizeof($it); if($l < $maxit) $fast = false; /* $fast means do not sort "folders first" */ if($fast) /* $sort = 'name' and $split = true */ { if($order=='asc') sort($it); else rsort($it); }else { $dirs = $files = array(); if($sort=='name') { for($i = 0; $i < $l; $i++) { if(is_dir($it[$i])) $dirs[] = $it[$i]; else $files[] = $it[$i]; } if($order=='asc') { sort($dirs); sort($files); $it = array_merge($dirs, $files); }else { rsort($files); rsort($dirs); $it = array_merge($files, $dirs); } } } /* array_display($it); */ $res = array('pages_num' => ceil($l / $perpage), 'items_num' => $l); $all = $pages = array(); /* fix invalid page range, if it is required */ if($pagemin > $res['pages_num']) { $pagemin = //max(1, $pagemin + ($pagemax - $res['pages_num']) ); $pagemax = $res['pages_num']; } $cd = $cf = $ci = ''; /* Code for Directories, Code for Files and Code for Items */ foreach($fields as $v) { $t = '[\''.$v.'\'][] = '; if ($v == 'name') $t .= '$n'; else if ($v == 'chmod') $t .= 'decoct($s[\'mode\'] & 0777)'; else $t .= '$s[\''.$v.'\']'; if($sort == 'name') { $cd .= '$pages[$page][\'dirs\']'.$t.";\n"; $cf .= '$pages[$page][\'files\']'.$t.";\n"; }else { $ci .= '$all'.$t.";\n"; } } /* we cannot optimize sorting, if sorted field is not name: we will have to call expensive stat() for every file, not only $perpage files. */ if($sort == 'name') { eval(' for($i = 0; $i < '.$l.'; $i++) { $page = floor($i / '.$perpage.') + 1; if( $page < '.$pagemin.' || $page > '.$pagemax.' ) continue; $n = $it[$i]; $s = stat($n); // is a directory? if(($s[\'mode\'] & 0x4000) == 0x4000) { '.$cd.' }else { '.$cf.' } } '); } if($sort!='name') { eval(' for($i = 0; $i < '.$l.'; $i++) { $n = $it[$i]; $s = stat($n); '.$ci.' } '); $code = 'array_multisort($all[\''.$sort.'\'], SORT_NUMERIC, SORT_'.strtoupper($order); foreach($fields as $v) { if($v != $sort) $code .= ', $all[\''.$v.'\']'; } $code .= ');'; /* code is evalled to prevent games with links to arrays */ eval($code); $pages = array(); $cf = $cd = ''; foreach($fields as $k => $v) { $cf .= '$pages[$page][\'files\'][\''.$v.'\'][] = $all[\''.$v.'\'][$i];'; $cd .= '$pages[$page][\'dirs\'][\''.$v.'\'][] = $all[\''.$v.'\'][$i];'; } eval(' for($i = 0; $i < $l; $i++) { $page = floor($i / '.$perpage.') + 1; if( $page < '.$pagemin.' || $page > '.$pagemax.' ) continue; if(($all[\'mode\'][$i] & 0x4000) == 0x4000) { '.$cd.' }else { '.$cf.' } } '); } if($res) $res['pages'] = $pages; chdir($old_dir); return $res; }else { extract($ftp_list); if($fields !== array('name', 'size') || $sort!='name') return d_error('Custom fields and sorting not by name are not currently supported in FTP mode'); $files = array_map('basename', $files); $dirs = array_map('basename', $dirs); $fl = sizeof($files); $dl = sizeof($dirs); if($filt) { $files_c = $dirs_c = array(); for($i=0; $i<$fl; $i++) if(strpos(strtolower($files[$i]),$filt)!==false) $files_c[]=$files[$i]; for($i=0; $i<$dl; $i++) if(strpos(strtolower($dirs[$i]),$filt)!==false) $dirs_c[]=$dirs[$i]; $dirs = $dirs_c; $files = $files_c; $fl = sizeof($files); $dl = sizeof($dirs); } if(!$split) $perpage = $fl + $dl; $pages = array(); for($i=0,$arr='files'; $arr=='files'||$i<$dl; $i++) { if($arr=='files' && $i>=$fl) { $arr='dirs'; $i=0; } $page = floor($i / $perpage) + 1; if( $page < $pagemin || $page > $pagemax ) continue; $pages[$page][$arr]['name'][] = ${$arr}[$i]; $pages[$page][$arr]['size'][] = @$fsizes[$dir.'/'.${$arr}[$i]]; } return array('items_num' => ($fl+$dl), 'pages_num' => ceil(($fl+$dl) / $perpage), 'pages' => $pages); } } 

рдкреНрд░рджрд░реНрд╢рди рд╡рд┐рд╢реНрд▓реЗрд╖рдг:
169 рдПрдордПрд╕ рдкреАрдврд╝реА
13.48 рдПрдордмреА рдореЗрдореЛрд░реА
2 kb рд╕реЗ gzip рддрдХ
рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдореЗрдВ 7 рдПрдордПрд╕ рдкреНрд░рддрд┐ рдЕрдиреБрд░реЛрдз
= 200 рдорд┐

+ рддреНрд╡рд░рд┐рдд рд╢реБрд░реБрдЖрдд
- рдореЗрдореЛрд░реА рдХреА рдмрд╣реБрдд рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ
- рд▓рдВрдмреА рдФрд░ рд╕рдВрд╕рд╛рдзрди-рдЧрд╣рди рдбреЗрдЯрд╛ рд▓реЛрдбрд┐рдВрдЧ: рдлрд╝реЛрд▓реНрдбрд░ рдХреЛ рдлрд┐рд░ рд╕реЗ рд╕реНрдХреИрди рдХрд░рдирд╛


3. рдЕрдЧрд▓реЗ рдЕрдиреБрдХреВрд▓рди рдХрд╛ рд╡рд┐рдЪрд╛рд░ рдореЗрд░реЗ рджрд┐рдорд╛рдЧ рдореЗрдВ рддрдм рдЖрдпрд╛ рдЬрдм рдореИрдВрдиреЗ рдЕрдкрдирд╛ DBMS рд▓рд┐рдЦрд╛, рдЬрд┐рд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдореИрдВрдиреЗ рдкрд╣рд▓реЗ рд╣реА рд╣рдмреЗрд░реЗ рдкрд░ рдмрд╛рдд рдХреА рдереА (рд╣рд╛рдБ, рд╡рд╣ рдкрд╛рдЧрд▓ рдореИрдВ рд╣реВрдВ :))ред рдкрд┐рдЫрд▓рд╛ рддрдВрддреНрд░ рдареАрдХ рдерд╛, рд╕рд┐рд╡рд╛рдп рдЗрд╕рдХреЗ рдХрд┐ рдореБрдЭреЗ рдкрджрдпрд╛рддреНрд░рд╛ рдХрд░рдиреА рдереА, рдФрд░ рдкреНрд░рддреНрдпреЗрдХ рдкреГрд╖реНрда рдХреЗ рд▓рд┐рдП рдореБрдЭреЗ рдлрд┐рд░ рд╕реЗ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдХреЛ рджрд░рдХрд┐рдирд╛рд░ рдХрд░рдирд╛ рдерд╛ред рдЗрд╕рд▓рд┐рдП, рдореИрдВрдиреЗ рдХреЛрдб рд▓рд┐рдЦрдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛ рдЬреЛ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рд╕рдВрд░рдЪрдирд╛ рдХреЛ рдЗрд╕ рддрд░рд╣ рд╕реЗ рдХреИрд╢ рдХрд░реЗрдЧрд╛ рдХрд┐ рдЖрдк рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЬрд▓реНрджреА рд╕реЗ рдлрд╝рд╛рдЗрд▓ рд░реЗрдВрдЬ рдХрд╛ рдЪрдпрди рдХрд░ рд╕рдХреЗрдВ, рддрд╛рдХрд┐ рдЖрдк рдЬрд▓реНрджреА рд╕реЗ 1000 рд╕реЗ 1100 рддрдХ рдлрд╛рдЗрд▓реЗрдВ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХреЗрдВред
рд╡рд┐рд╡рд░рдг
 /* the cached version of filelist especially made for JS GGGR returns: array( 'items' => array( start: array( 'name' => ..., 'size' => ..., 'is_dir' => true|false, ), ... start+length-1: array( 'name' => ..., 'size' => ..., 'is_dir' => true|false, ), ), 'cnt' => N ) */ function d_filelist_cached($dir, $start, $length, $filter = '') { //sleep(1); $tmpdir = is_callable('get_tmp_dir') ? get_tmp_dir() : '/tmp'; $cache_prefix = $tmpdir.'/dolphin'.md5(__FILE__); $cache_dat = $cache_prefix.'.dat'; $cache_idx = $cache_prefix.'.idx'; $new = false; if(!file_exists($cache_dat) || filemtime($dir) > filemtime($cache_dat)) { $new = true; $fp = fopen($cache_dat, 'w+b'); $ifp = fopen($cache_idx, 'w+b'); }else { $fp = fopen($cache_dat, 'r+b'); $ifp = fopen($cache_idx, 'r+b'); list(, $l) = unpack('n', fread($fp, 2)); $cached_dir = fread($fp, $l); list(, $l) = unpack('n', fread($fp, 2)); $cached_filter = fread($fp, $l); if($cached_dir != $dir || $cached_filter != $filter) { ftruncate($fp, 0); ftruncate($ifp, 0); fseek($fp, 0, SEEK_SET); fseek($ifp, 0, SEEK_SET); $new = true; } } $items = array(); $cnt = 0; $old_cwd = getcwd(); try { if(!@chdir($dir)) throw new Exception('Could not chdir to the folder'); if($new) { fwrite($fp, pack('n', strlen($dir)).$dir); fwrite($fp, pack('n', strlen($filter)).$filter); $pos = ftell($fp); $dh = opendir('.'); if(!$dh) throw new Exception('Could not open directory for reading'); $filter = strtolower($filter); while( false !== ($f = readdir($dh)) ) { if($f == '.' || $f == '..') continue; if(strlen($filter) && !substr_count(strtolower($f), $filter)) continue; fwrite($ifp, pack('NN', $pos, strlen($f))); fwrite($fp, $f); $pos += strlen($f); // ftell is not as fast as it should be, sadly } fflush($ifp); fflush($fp); } fseek($ifp, $start * 8 /* length(pack('NN')) */); $first = true; $curr_idx = $start; while( $curr_idx < $start + $length ) { list(, $pos, $l) = unpack('N2', fread($ifp, 8)); if($first) { fseek($fp, $pos); $first = false; } $f = fread($fp, $l); if(!strlen($f)) break; if(strlen($f) != $l) { throw new Exception('Consistency error'); } $items[$curr_idx++] = array( 'name' => $f, 'size' => filesize($f), 'is_dir' => is_dir($f), ); } $cnt = filesize($cache_idx) / 8; }catch(Exception $e) { fclose($fp); fclose($ifp); unlink($cache_dat); unlink($cache_idx); @chdir($old_cwd); return is_callable('d_error') ? d_error($e->getMessage()) : false; } if($cnt < 500 && $length >= 500) { usort($items, 'd_filelist_cached_usort_cmp'); } @chdir($old_cwd); return array( 'items' => $items, 'cnt' => $cnt ); } function d_filelist_cached_usort_cmp($it1, $it2) { return strcmp( $it1['name'], $it2['name'] ); } 

рдкреНрд░рджрд░реНрд╢рди рд╡рд┐рд╢реНрд▓реЗрд╖рдг:
460 рдПрдордПрд╕ рдкреАрдврд╝реА
1.18 рдПрдордмреА рдореЗрдореЛрд░реА
2 kb рд╕реЗ gzip рддрдХ
рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдореЗрдВ 8 рдПрдордПрд╕ рдкреНрд░рддрд┐ рдЕрдиреБрд░реЛрдз
= 500 рдорд┐

+ рдЖрд╕рд╛рди рдФрд░ рддреЗрдЬреА рд╕реЗ рд▓реЛрдб рд╣реЛ рд░рд╣рд╛ рд╣реИ
+ рдмрд╣реБрдд рдореЗрдореЛрд░реА рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ
- рдзреАрдореА рд╢реБрд░реБрдЖрдд
- рдорд╣рддреНрд╡рдкреВрд░реНрдг рдЖрдХрд╛рд░ рдХреА рдордзреНрдпрд╡рд░реНрддреА рдлрд╝рд╛рдЗрд▓реЛрдВ рдХрд╛ рд╕рдВрдЧреНрд░рд╣рдг (1.6 рдПрдордмреА рдХреА рдбрд╛рдпрд░реЗрдХреНрдЯрд░реА рдлрд╝рд╛рдЗрд▓ рдЖрдХрд╛рд░ рд╡рд╛рд▓реА 800 рдХреЗрдмреА 50,000 рдлрд╛рдЗрд▓реЗрдВ)


4. рдпрджрд┐ рдЖрдк рдКрдкрд░ рджрд┐рдП рдЧрдП рдХреЛрдб рдХреЛ рдкрдврд╝рддреЗ рд╣реИрдВ, рддреЛ рдЖрдкрдиреЗ рджреЗрдЦрд╛ рдХрд┐ рдХреЛрдб рдкрд╣рд▓реЗ рдмрд╣реБрдд рд╕рд░рд▓ рдерд╛, рдлрд┐рд░ рдпрд╣ рдмрд╣реБрдд рдЬрдЯрд┐рд▓ рд╣реЛ рдЧрдпрд╛ (рдЗрд╕ рд╣рдж рддрдХ рдХрд┐ рдЗрд╕реЗ рдмрдирд╛рдП рд░рдЦрдирд╛ рдЕрд╕рдВрднрд╡ рд╣реИ), рдлрд┐рд░ рдпрд╣ рдЖрд╕рд╛рди рд╣реЛ рдЧрдпрд╛ ... рдФрд░ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ, рд╕рдмрд╕реЗ рд╕рд░рд▓ рд╡рд┐рдЪрд╛рд░ рдХрд┐рд╕реА рддрд░рд╣ рдореЗрд░реЗ рдкрд╛рд╕ рдЖрдпрд╛ рдЙрддреНрддрд░рд╛рд░реНрджреНрдз рдХрд╛ рдкреНрд░рдореБрдЦ: рд╕рдмрд╕реЗ рддреЗрдЬрд╝ рдХреЛрдб рд╡рд╣ рд╣реИ рдЬреЛ рдпрдерд╛рд╕рдВрднрд╡ рдХрдо рдХрд░рддрд╛ рд╣реИ, рдФрд░ PHP рдХреЗ рд▓рд┐рдП рдпрд╣ рдмрд╣реБрдд рдкреНрд░рд╛рд╕рдВрдЧрд┐рдХ рд╣реИред рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдкреНрд░рддреАрдХ "/" рдХрднреА рднреА рдлрд╛рдЗрд▓реЛрдВ рдФрд░ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛рдУрдВ рдХреЗ рдирд╛рдореЛрдВ рдореЗрдВ рдореМрдЬреВрдж рдирд╣реАрдВ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдлрд╛рдЗрд▓реЛрдВ рдХреА рд╕реВрдЪреА рдХреЛ рдПрдХ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреЗ рд░реВрдк рдореЗрдВ рдмрдирд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:
 function d_filelist_simple($dir) { $dh = opendir($dir); if (!$dh) return d_error("Cannot open $dir"); // use as little memory as possible using strings $files = ''; // assuming that first two entries are always "." and ".." or (in case of root dir) it is only "." // we can read first two entries separately and skip check for "." and ".." in main cycle for // maximum possible performance for ($i = 0; $i < 2; $i++) { $f = readdir($dh); if ($f === false) return array('res' => '', 'cnt' => 0); if ($f === "." || $f === "..") continue; $files .= "$f/"; } while (false !== ($f = readdir($dh))) $files .= "$f/"; closedir($dh); return array('res' => $files, 'cnt' => substr_count($files, '/')); } 

рдЪреВрдВрдХрд┐ рдкреАрдПрдЪрдкреА рдореЗрдВ рдХреЙрдиреНрд╕реЗрдкреНрдЯреЗрд╢рди рдУ (1) рд╣реИ, рдпрд╣ PHP рдХреЛрдб, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ, рдЬрд┐рддрдиреА рдЬрд▓реНрджреА рд╣реЛ рд╕рдХреЗ (рдЗрд╕ рд╕реНрдерд┐рддрд┐ рдореЗрдВ) рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ рдФрд░ рд░реИрдо рдХреА рдХрдо рд╕реЗ рдХрдо рд╕рдВрднрд╡ рдорд╛рддреНрд░рд╛ рдореЗрдВ рдЦрдкрдд рдХрд░рддрд╛ рд╣реИ: рдХрдо (рд╕рдВрдкреАрдбрд╝рди рдХреЗ рдмрд┐рдирд╛) рдХрд░рдирд╛ рдмрд╣реБрдд рдореБрд╢реНрдХрд┐рд▓ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдЖрдкрдХреЛ рдЬрд╝рд░реВрд░рдд рд╣реИ рдХрд┐рд╕реА рддрд░рд╣ рдлрд╝рд╛рдЗрд▓ рдирд╛рдо рдЕрд▓рдЧ рдХрд░реЗрдВред
рдЗрд╕ рддрд░рд╣ рдХреЗ рдХреЛрдб, рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдЖрдкрдХреЛ 500k рдлрд╝рд╛рдЗрд▓реЛрдВ рдХрд╛ рдПрдХ рдлрд╝реЛрд▓реНрдбрд░ рдЦреЛрд▓рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ, 32 рдПрдордмреА рд╕реЗ рдХрдо рдЦрдкрдд рд╣реЛрддреА рд╣реИ, рдФрд░ рдпрд╣ json_encode рдХреЛ рдзреНрдпрд╛рди рдореЗрдВ рд░рдЦ рд░рд╣рд╛ рд╣реИред рдЪреВрдВрдХрд┐ рд╣рдо рдПрдХ рдмрд╣реБрдд рд╣реА рд╕рд░рд▓ рдбреЗрдЯрд╛ рд╕рдВрд░рдЪрдирд╛ рдмрдирд╛рддреЗ рд╣реИрдВ - рдмрд╕ рдПрдХ рд╕реНрдЯреНрд░рд┐рдВрдЧ, json_encode рд░рдирдЯрд╛рдЗрдо рднреА рдмрд╣реБрдд рдЫреЛрдЯрд╛ рд╣реЛрдЧрд╛, рд╕рд╛рде рд╣реА рд╕рд╛рде рдмреНрд░рд╛рдЙрдЬрд╝рд░ рд╕реЗ рдкрд╛рд░реНрд╕ рдХрд░рдиреЗ рдХреА рд▓рд╛рдЧрдд рднреА рд╣реЛрдЧреАред рд▓рд╛рдЗрди рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рд╡рд┐рднрд╛рдЬрди ('/') рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рд╣рдореЗрдВ рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреА рдкреВрд░реА рд╕реВрдЪреА рдорд┐рд▓рддреА рд╣реИред рдЙрд╕рдХреЗ рдмрд╛рдж, рдЖрдк рдХреЗрд╡рд▓ рджреВрд╕рд░реЗ AJAX рдЕрдиреБрд░реЛрдз рдХреЗ рд╕рд╛рде рджреГрд╢реНрдпрдорд╛рди рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЗ рд▓рд┐рдП рдЬрд╛рдирдХрд╛рд░реА рдорд╛рдВрдЧ рд╕рдХрддреЗ рд╣реИрдВ (рдЖрдк рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдореЗрдВ рдкрд╣рд▓реА рдХреБрдЫ рд╕реМ рдлрд╛рдЗрд▓реЗрдВ рднреА рд╢рд╛рдорд┐рд▓ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ)ред рдЗрд╕ рдкреНрд░рдХрд╛рд░, рд╣рдо рдЙрди рд╕рднреА рд╕рдорд╕реНрдпрд╛рдУрдВ рдХрд╛ рд╕рдорд╛рдзрд╛рди рдХрд░рддреЗ рд╣реИрдВ рдЬреЛ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдкрд╣рд▓реЗ рдереАрдВ: рдлрд╛рдЗрд▓реЛрдВ рдХреА рд╕реВрдЪреА рдХреА рд▓рдВрдмреА рдкреАрдврд╝реА, рдЕрдиреМрдкрдЪрд╛рд░рд┐рдХ рдореЗрдореЛрд░реА рдХреА рдЦрдкрдд рдФрд░ рдЕрдиреНрдп рдЗрдВрдЯрд░рдиреЗрдЯ рд╕реНрдХреНрд░реЙрд▓рд┐рдВрдЧ рдХреЗ рд╕рд╛рде рдЕрд╕реБрд╡рд┐рдзрд╛ред
рдЗрд╕ рдпреЛрдЬрдирд╛ рдХрд╛ рдкреНрд░рджрд░реНрд╢рди рд╡рд┐рд╢реНрд▓реЗрд╖рдг (50,000 рдлрд╛рдЗрд▓реЗрдВ)
48 рдПрдордПрд╕ рдкреАрдврд╝реА
1.92 рдПрдордмреА рдореЗрдореЛрд░реА
107 Kb рд╕реЗ gzip (рдкреНрд░рддрд┐ рдбрд╛рдЙрдирд▓реЛрдб 200 рдПрдордПрд╕)
рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдореЗрдВ 56 рдорд┐
= 300 рдорд┐

+ рддреНрд╡рд░рд┐рдд рд╢реБрд░реБрдЖрдд
+ рдлрд╝рд╛рдЗрд▓ рдирд╛рдореЛрдВ рдХреЗ рд▓рд┐рдП рдХреЛрдИ рдбреЗрдЯрд╛ рдЕрдкрд▓реЛрдб рдирд╣реАрдВ
+ рдХрдо CPU рд▓рд╛рдЧрдд
- рдХрд╛рдлреА рдЯреНрд░реИрдлрд┐рдХ рдЦрд░реНрдЪ рдХрд░рддрд╛ рд╣реИ
- рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдореЗрдВ рдмрд╣реБрдд рд╕рд╛рд░реА рдореЗрдореЛрд░реА рдЦрд░реНрдЪ рдХрд░рддрд╛ рд╣реИ


рд╕рдВрджрд░реНрдн


рдореЗрд░реЗ рдлрд╝рд╛рдЗрд▓ рдкреНрд░рдмрдВрдзрдХ рдХреЗ рдирд╡реАрдирддрдо рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рдХрд╛рдо рдХрд╛ рдкреНрд░рджрд░реНрд╢рди рдХрд░рдиреЗ рд╡рд╛рд▓рд╛ рд╡реАрдбрд┐рдпреЛ (рд╕рдВрд╕реНрдХрд░рдг рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреЗ рдмрд┐рдирд╛ рдирд╣реАрдВ рд╣реИ): www.youtube.com/watch?v=XSvY9joxQqI
рд╕реНрд░реЛрдд: github.com/YuriyNasretdinov/Dolphin.php
рдмрдЪреЗ рд╣реБрдП рдкреБрд░рд╛рдиреЗ рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рд╕рд╛рде рдлрд╝реЛрд░рдо рдереНрд░реЗрдб: forum.dklab.ru/viewtopic.php?t=9504

Source: https://habr.com/ru/post/In146408/


All Articles