рдПрдореНрдмреЗрдбреЗрдб PHP рд╕рд░реНрд╡рд░ рдХрд╛ рд▓рд╛рдн рдЙрдард╛рддреЗ рд╣реБрдП

Php 5.4 рдореЗрдВ рд╕рдмрд╕реЗ рдЕрдЪреНрдЫреЗ рдирд╡рд╛рдЪрд╛рд░реЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдПрдХ рдПрдХреАрдХреГрдд рд╕рд░реНрд╡рд░ рд╣реИ рдЬрд┐рд╕реЗ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рд╡рд┐рдХрд╛рд╕ рдФрд░ рдкрд░реАрдХреНрд╖рдг рдХреЗ рд▓рд┐рдП рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рд╣реИред рдЕрдм рдЖрдк рдПрдХ рдкреВрд░реНрдг рд╡реЗрдм рд╕рд░реНрд╡рд░ рдХреЗ рдмрд┐рдирд╛ рдЕрдкрдиреЗ рдХреЛрдб рдХреЛ рд▓рд┐рдЦ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдкрд░реАрдХреНрд╖рдг рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ - рдмрд╕ рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рд╕рд░реНрд╡рд░ рдХреЛ рд╢реБрд░реВ рдХрд░реЗрдВ, рдЕрдкрдиреЗ рдХреЛрдб рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд░реЗрдВ, рдФрд░ рдЬрдм рдЖрдк рдХрд╛рдо рдХрд░ рд▓реЗрдВ рддреЛ рдЗрд╕реЗ рдмрдВрдж рдХрд░ рджреЗрдВред
рд╕рд░реНрд╡рд░ рд░рдЪрдирд╛рддреНрдордХ рдЙрдкрдпреЛрдЧ рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрд╡рд╕рд░ рднреА рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЖрдк рд╕реАрдбреАрдЖрд░ рдпрд╛ рдпреВрдПрд╕рдмреА рдкрд░ рдкреЛрд░реНрдЯреЗрдмрд▓ рд╡реЗрдм рдПрдкреНрд▓реАрдХреЗрд╢рди рдпрд╛ рдЬреАрдЯреАрдХреЗ рдпрд╛ рдЕрдиреНрдп рдЧреНрд░рд╛рдлрд┐рдХреНрд╕ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдмрд┐рдирд╛ рдкреАрдПрдЪрдкреА рдореЗрдВ рдмрдирд╛рдП рдЧрдП рдбреЗрд╕реНрдХрдЯреЙрдк рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ рд░реВрдк рдореЗрдВ рднреА рд╡рд┐рддрд░рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

PHP рдореИрдиреБрдЕрд▓ рдЗрд╕ рдмрд╛рдд рдкрд░ рдЬреЛрд░ рджреЗрддрд╛ рд╣реИ рдХрд┐ рдПрдореНрдмреЗрдбреЗрдб рд╕рд░реНрд╡рд░ рдХреЛ рд╡рд┐рдХрд╛рд╕ рдХреЗ рд▓рд┐рдП рдбрд┐рдЬрд╝рд╛рдЗрди рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рдФрд░ рдпрд╣ рд╕рд▓рд╛рд╣ рджреА рдЬрд╛рддреА рд╣реИ рдХрд┐ рдЗрд╕реЗ рд▓рдбрд╝рд╛рдХреВ рд╕рд░реНрд╡рд░ рдкрд░ рдЙрдкрдпреЛрдЧ рди рдХрд┐рдпрд╛ рдЬрд╛рдПред рд╕рд░реНрд╡рд░ рдХреЗ рд▓рд┐рдП рдХреЛрдИ INI рдирд┐рд░реНрджреЗрд╢ рдЬрд┐рдореНрдореЗрджрд╛рд░ рдирд╣реАрдВ рд╣реИрдВ (рдХрдВрд╕реЛрд▓ рдореЗрдВ рдЖрдЙрдЯрдкреБрдЯ рдХреЛ рд░рдВрдЧ рджреЗрдиреЗ рдХреЗ рдЕрдкрд╡рд╛рдж рдХреЗ рд╕рд╛рде), рдФрд░ рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдкреНрд░рд▓реЗрдЦрди рдХрд╛ рдореБрдЦреНрдп рд╡рд┐рдЪрд╛рд░ рд╣реИ: "рдЕрдм рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдПрдХ рд╡реЗрдм рд╕рд░реНрд╡рд░ рднреА рд╣реИ, рд╣рдореЗрдВ рдЕрдХреЗрд▓рд╛ рдЫреЛрдбрд╝ рджреЗрдВред"
рдЗрд╕рдХреЗ рдмрд╛рд╡рдЬреВрдж, рдореЗрд░рд╛ рдорд╛рдирдирд╛ тАЛтАЛрд╣реИ рдХрд┐ рдПрдХ рдПрдореНрдмреЗрдбреЗрдб рд╕рд░реНрд╡рд░ рд╡рд┐рдХрд╛рд╕ рдФрд░ рдкрд░реАрдХреНрд╖рдг рдХреЗ рд▓рд┐рдП рдПрдХ рдореВрд▓реНрдпрд╡рд╛рди рдЙрдкрдХрд░рдг рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдореЗрд░реА рдорд╢реАрди рдкрд░, рдореИрдВ рдЕрдкрдиреЗ рд▓рд┐рдП рдЙрдкрдпреБрдХреНрдд рдХрд╕реНрдЯрдо рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХреЗ рд╕рд╛рде рдкреВрд░реНрд╡-рд╕реНрдерд╛рдкрд┐рдд рдЕрдкрд╛рдЪреЗ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдВ, рд▓реЗрдХрд┐рди рдХрднреА-рдХрднреА рдореИрдВ рдХреБрдЫ рдирдП рд╡реЗрдм рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдЖрдЬрд╝рдорд╛рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВред рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рд╡реЗрдм рд╕рд░реНрд╡рд░ рдХреЗ рд╕рд╛рде, рдореИрдВ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ "рдбрд╛рдЙрдирд▓реЛрдб" рдлрд╝реЛрд▓реНрдбрд░ рдпрд╛ рдЕрд╕реНрдерд╛рдпреА рдлрд╝реЛрд▓реНрдбрд░ рд╕реЗ рд╕реАрдзреЗ рдкрд░реАрдХреНрд╖рдг рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ рдФрд░ рдЗрд╕реЗ рдХреЗрд╡рд▓ рд╕рд╛рдорд╛рдиреНрдп рд╡рд╛рддрд╛рд╡рд░рдг рдореЗрдВ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ рдЬрдм рдпрд╣ рдЖрд╡рд╢реНрдпрдХ рд╣реЛред
рд▓реЗрдХрд┐рди рд╢реБрд░реБрдЖрдд рдХреЗ рд▓рд┐рдП, рдпрд╣ рдЗрддрдирд╛ рд╕рд░рд▓ рдирд╣реАрдВ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдХрдИ рд▓рд┐рдЦрд┐рдд рдПрдкреНрд▓рд┐рдХреЗрд╢рди .htaccess рдФрд░ mod_rewrite рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдпрдХреАрди рд╣реИ рдХрд┐ рдХреЛрдИ (рд╢рд╛рдпрдж рдЖрдк рдореЗрдВ рд╕реЗ рдПрдХ, рдХреНрдпреЛрдВ рдирд╣реАрдВ?) рдЗрд╕рдХреЗ рд▓рд┐рдП рдПрдХ рдПрдбреЗрдкреНрдЯрд░ рд▓рд┐рдЦреЗрдЧрд╛, рдФрд░ рдореИрдВ рдЗрд╕реЗ рдЯреЗрд╕реНрдЯ рдХрд░рдиреЗ рд╡рд╛рд▓рд╛ рдкрд╣рд▓рд╛ рдмрдирдирд╛ рдЪрд╛рд╣реВрдВрдЧрд╛ред
рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ, рдореИрдВ рдПрдореНрдмреЗрдбреЗрдб рд╕рд░реНрд╡рд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рдХреБрдЫ рдмреБрдирд┐рдпрд╛рджреА рдЙрджрд╛рд╣рд░рдгреЛрдВ рдХреА рд╡реНрдпрд╛рдЦреНрдпрд╛ рдХрд░реВрдВрдЧрд╛ рдФрд░ рдЖрдкрдХреЛ рджрд┐рдЦрд╛рдКрдВрдЧрд╛ рдХрд┐ рдЗрд╕реЗ рд╡рд┐рдХрд╛рд╕ рдФрд░ рдкрд░реАрдХреНрд╖рдг рдХреЗ рд▓рд┐рдП рдХреИрд╕реЗ рдЙрдкрдпреЛрдЧреА рдмрдирд╛рдпрд╛ рдЬрд╛рдПред

рд╣рдо рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рд╕рд░реНрд╡рд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ


рдЗрд╕рд▓рд┐рдП, рд╕рд░реНрд╡рд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╣рдореЗрдВ php 5.4 рдпрд╛ рдЙрдЪреНрдЪрддрд░ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред PHP рдХреЗ рд╕рдВрд╕реНрдХрд░рдг рдХреА рдЬрд╛рдБрдЪ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЪрд▓рд╛рдПрдБ:
php -v 

рдЖрдк рдпрд╣ рднреА рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рд╕рд░реНрд╡рд░ рдЖрдкрдХреА рд╡рд┐рдзрд╛рдирд╕рднрд╛ рдореЗрдВ рдЙрдкрд▓рдмреНрдз рд╣реИ рдпрд╛ рдирд╣реАрдВ:
 php -h 

рдФрд░ рд╡рд╣рд╛рдВ "-S" рдФрд░ "-t" рдорд╛рдкрджрдВрдбреЛрдВ рдХрд╛ рд╡рд░реНрдгрди рдорд┐рд▓рддрд╛ рд╣реИ, рдЬреЛ рдХреЗрд╡рд▓ рд╕рд░реНрд╡рд░ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВред
рд╕рд░реНрд╡рд░ рдХреА рдЬрд╛рдВрдЪ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдк рд╡рд░реНрддрдорд╛рди рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдореЗрдВ index.php рдлрд╝рд╛рдЗрд▓ рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ, рдЬрд┐рд╕рдореЗрдВ phpinfo () рдлрд╝рдВрдХреНрд╢рди рдкрд░ рдХреЙрд▓ рд╣реЛрдЧреА рдФрд░ рдлрд┐рд░ рд╕рд░реНрд╡рд░ рд╢реБрд░реВ рд╣реЛрдЧрд╛:
 [ec2-user@ip-10-229-67-156 ~]$ php -S 127.0.0.1:8080 PHP 5.4.0RC7 Development Server started at Fri Feb 26 18:49:29 2012 Listening on 127.0.0.1:8080 Document root is /home/ec2-user Press Ctrl-C to quit. 

рдФрд░ рдЕрдм рдЖрдк рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рд╡реЗрдм рд╕рд░реНрд╡рд░ рджреНрд╡рд╛рд░рд╛ рджреА рдЧрдИ рд╕рд╛рдордЧреНрд░реА рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ:
рдЫрд╡рд┐
рдкреНрд░рддреНрдпреЗрдХ рдХреНрд▓рд╛рдЗрдВрдЯ рдЕрдиреБрд░реЛрдз рдХреЛ рдХрдВрд╕реЛрд▓ рдкрд░ рд▓рд┐рдЦрд╛ рдЬрд╛рдПрдЧрд╛:
 [Sun Feb 26 18:55:30 2012] 80.180.55.37:36318 [200]: / [Sun Feb 26 18:56:23 2012] 80.180.55.37:36584 [200]: / 

рд╡рд╛рдкрд╕ рдЬрд╛ рд░рд╣реЗ рд╣реИрдВ, рд╣рдо рдХрдорд╛рдВрдб рд▓рд╛рдЗрди рдкреИрд░рд╛рдореАрдЯрд░ "-S" рдХрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд░реЗрдВрдЧреЗ, рдЬрд┐рд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдЙрд╕ рдкрддреЗ рдХреЛ рдЗрдВрдЧрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬрд┐рд╕рд╕реЗ рд╕рд░реНрд╡рд░ рдЙрдкрд▓рдмреНрдз рд╣реЛрдЧрд╛ред рд╕рдВрднрд╛рд╡рд┐рдд рдореВрд▓реНрдп:
рд▓реЛрдХрд▓рд╣реЛрд╕реНрдЯ - рд╕рд░реНрд╡рд░ рд╕реНрдерд╛рдиреАрдп рдорд╢реАрди рд╕реЗ рд╣реА рдПрдХреНрд╕реЗрд╕ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХреЗрдЧрд╛,
0.0.0.0 - рдХрд┐рд╕реА рднреА рдорд╢реАрди рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдкрд░,
рдХрд┐рд╕реА рднреА рдмрд╛рд╣рд░реА рдпрд╛ рдЧреНрд░реЗ рдЖрдИрдкреА - рдХреЗрд╡рд▓ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдЖрдИрдкреА рдкрд░
"-T" рдкреИрд░рд╛рдореАрдЯрд░ рдирд┐рд░реНрджрд┐рд╖реНрдЯ "рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рд░реВрдЯ" рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рд╕реЗрдЯ рдХрд░рддрд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП:
 [ec2-user@ip-10-229-67-156 ~]$ php -S <localhost or your public IP>:8090 -t /home/ec2-user/public 

рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛ред рдЖрдк рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рд░рд╛рдЙрдЯрд░ рдлрд╝рд╛рдЗрд▓ рдХрд╛ рдирд╛рдо рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП:
 [ec2-user@ip-10-229-67-156 ~]$ php -S >localhost or your public IP>:8080 -t /home/ec2-user/public public/index.php 

рдЗрд╕ рд░рд╛рдЙрдЯрд░ рдХреЗ рдЖрдЙрдЯрдкреБрдЯ рдХреЛ рд╕рд░реНрд╡рд░ рджреНрд╡рд╛рд░рд╛ рдкрд╛рд░реНрд╕ рдФрд░ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рдПрдХ рд╕рд░рд▓ рдЙрджрд╛рд╣рд░рдг:
 <?php $extensions = array("php", "jpg", "jpeg", "gif", "css"); $path = parse_url($_SERVER["REQUEST_URI"], PHP_URL_PATH); $ext = pathinfo($path, PATHINFO_EXTENSION); if (in_array($ext, $extensions)) { // let the server handle the request as-is return false; } echo "<p>Welcome to PHP</p>"; 

рдпрджрд┐ рд╕реНрдХреНрд░рд┐рдкреНрдЯ FALSE рд▓реМрдЯрд╛рддреА рд╣реИ, рддреЛ рдЕрдиреБрд░реЛрдзрд┐рдд URI рдЙрд╕ рд╕рд░реНрд╡рд░ рджреНрд╡рд╛рд░рд╛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ рдЬреЛ рдЕрдиреБрд░реЛрдзрд┐рдд рд╕рдВрд╕рд╛рдзрди рдЬрд╛рд░реА рдХрд░реЗрдЧрд╛, рдпрд╛ рдпрд╣ 404 рддреНрд░реБрдЯрд┐ рд▓реМрдЯрд╛рдПрдЧрд╛ред рдпрджрд┐ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреБрдЫ рдФрд░ рд▓реМрдЯрд╛рддреА рд╣реИ, рддреЛ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдЖрдЙрдЯрдкреБрдЯ рдХреНрд▓рд╛рдЗрдВрдЯ рдХреЛ рднреЗрдЬрд╛ рдЬрд╛рдПрдЧрд╛ред
рдпрджреНрдпрдкрд┐ рдпрд╣ рджреГрд╖реНрдЯрд┐рдХреЛрдг рд╣рдореЗрдВ рдЕрдзрд┐рдХ рдирд┐рдпрдВрддреНрд░рдг рджреЗрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдХреБрдЫ рдЪреАрдЬреЗрдВ рд╣реИрдВ рдЬреЛ рдЖрдкрдХреЛ рдкрддрд╛ рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдПред рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, PHP рд╕рд░реНрд╡рд░ рдХреЗрд╡рд▓ HTTP рд╣реЗрдбрд░ рдХрд╛ рдПрдХ рдиреНрдпреВрдирддрдо рд╕реЗрдЯ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ:
 Connection: closed Content-Type: text/html Host: aws-dev-01.vtardia.com X-Powered-By: PHP/5.4.0RC7 
рдбреА
рдЗрд╕рдХреА рддреБрд▓рдирд╛ рдЕрдкрд╛рдЪреЗ рд╕рд░реНрд╡рд░ рджреНрд╡рд╛рд░рд╛ рд▓реМрдЯрд╛рдП рдЧрдП рд╣реЗрдбрд░ рд╕реЗ рдХрд░реЗрдВ:
 Accept-Ranges: bytes Connection: Keep-Alive Content-Length: 631 Content-Type: text/html Date: Sat, 04 Feb 2012 18:24:42 GMT Etag: "bbb99-277-4ace8c5470a40" Keep-Alive: timeout=15, max=100 Last-Modified: Wed, 14 Sep 2011 15:54:09 GMT Server: Apache/2.2.21 (Unix) DAV/2 

рдпрджрд┐ рдЖрдкрдХрд╛ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд╣реЗрдбрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ, рддреЛ рдЙрд╕реЗ рд╡рд┐рдХрд╛рд╕ рдХреЗ рдорд╛рд╣реМрд▓ рдФрд░ рдЙрддреНрдкрд╛рджрди рдореЗрдВ рдЕрдВрддрд░ рдХреЛ рдзреНрдпрд╛рди рдореЗрдВ рд░рдЦрдирд╛ рдЪрд╛рд╣рд┐рдПред
рджреВрд╕рд░реЗ, рдПрдореНрдмреЗрдбреЗрдб рд╕рд░реНрд╡рд░ рдореЗрдВ рдПрдХ рдЕрд▓рдЧ SAPI (рд╕рд░реНрд╡рд░ API) рд╣реЛрддрд╛ рд╣реИред рдЗрд╕ рдкреНрд░рдХрд╛рд░, рдЗрдВрдбреЗрдХреНрд╕, php рдореЗрдВ рд░рд╛рдЙрдЯрд┐рдВрдЧ рдХрд░рдХреЗ, рдЖрдк рдпрд╣ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдХрд┐рд╕реА рдЯреЗрд╕реНрдЯ рдпрд╛ рдмреИрдЯрд▓ рд╕рд░реНрд╡рд░ рдкрд░ рдХреЛрдИ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдПрдХреНрд╕реЗрд╕ рд╣реЛ рд░рд╣реА рд╣реИ рдпрд╛ рдирд╣реАрдВред php_sapi_name () рдПрдореНрдмреЗрдбреЗрдб рд╕рд░реНрд╡рд░ рдкрд░ "cli-server" рд▓реМрдЯрд╛рдПрдЧрд╛:
 <?php if (php_sapi_name() == "cli-server") { // running under built-in server so // route static assets and return false $extensions = array("php", "jpg", "jpeg", "gif", "css"); $path = parse_url($_SERVER["REQUEST_URI"], PHP_URL_PATH); $ext = pathinfo($path, PATHINFO_EXTENSION); if (in_array($ext, $extensions)) { return false; } } 

рдПрдХ рд╡рд┐рд╢реЗрд╖ INI рдирд┐рд░реНрджреЗрд╢ рд╣реИ - "cli_server.color"ред рдпрд╣ рдирд┐рд░реНрджреЗрд╢ рдХрдВрд╕реЛрд▓ рдХреЛ рд░рдВрдЧреАрди рдЖрдЙрдЯрдкреБрдЯ рджреЗрддрд╛ рд╣реИред рдПрдХ рд░рд┐рдХреНрдд рдлрд╝рд╛рдЗрд▓ рдмрдирд╛рдПрдБ, рдЬрд┐рд╕реЗ cli-server.ini рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдЗрд╕ рдкрдВрдХреНрддрд┐ рдХреЛ рдЪрд┐рдкрдХрд╛рдПрдБ:
 cli_server.color = on 

рдЖрдк рдЕрдкрдиреЗ INI рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдЖрд╡рд╢реНрдпрдХ рдирд┐рд░реНрджреЗрд╢реЛрдВ рдХреЛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдХреЗ рдЕрдкрдиреЗ рд╕рд░реНрд╡рд░ рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрджреНрд╡рд┐рддреАрдп рд╡рд╛рддрд╛рд╡рд░рдг рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВред рдЧреИрд░-рдШреЛрд╖рд┐рдд рдирд┐рд░реНрджреЗрд╢ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд╣реЛрдВрдЧреЗред рдЕрдм рд╣рдордиреЗ рдХреЗрд╡рд▓ рдПрдХ рдирд┐рд░реНрджреЗрд╢ рджрд┐рдпрд╛ рд╣реИ - cli_server.color ред
INI рдлрд╝рд╛рдЗрд▓ рдХреЗ рд╕рд╛рде "-c" рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗ рд╕рд╛рде рд╕рд░реНрд╡рд░ рд╢реБрд░реВ рдХрд░реЗрдВ:
 [ec2-user@ip-10-229-67-156 ~]$ php -S localhost -c cli-server.ini 

рдпрджрд┐ рдЖрдкрдХрд╛ рдЯрд░реНрдорд┐рдирд▓ рд░рдВрдЧреЛрдВ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИ, рддреЛ рдЖрдк рдХрдВрд╕реЛрд▓ рдореЗрдВ "рд░рдВрдЧ" рдЖрдЙрдЯрдкреБрдЯ рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВред 200 рд╕реНрдерд┐рддрд┐ рдХреЛ рд╣рд░реЗ рд░рдВрдЧ рдореЗрдВ рд╣рд╛рдЗрд▓рд╛рдЗрдЯ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛, 404 - рдирд╛рд░рдВрдЧреА рдореЗрдВ, рдФрд░ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЛ рд▓рд╛рд▓ рд░рдВрдЧ рдореЗрдВ рд╣рд╛рдЗрд▓рд╛рдЗрдЯ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред

рдПрдХ рд╡реНрдпрдХреНрддрд┐рдЧрдд рд╕рд░реНрд╡рд░ рдмрдирд╛рдПрдБ


рдЕрдм рдЬрдм рдЖрдк рдПрдореНрдмреЗрдбреЗрдб рд╕рд░реНрд╡рд░ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдиреЗ рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рд╕рдм рдХреБрдЫ рдЬрд╛рдирддреЗ рд╣реИрдВ, рддреЛ рдЪрд▓рд┐рдП рдХреБрдЫ рдЕрдЪреНрдЫрд╛ рдХрд░рддреЗ рд╣реИрдВред рдЪрд▓реЛ рдЕрдкрдирд╛ рдЦреБрдж рдХрд╛ рдкреЛрд░реНрдЯреЗрдмрд▓ рд╕рд░реНрд╡рд░ рдмрдирд╛рдПрдВ!
рдореИрдВ рд╣рдорд╛рд░реЗ рдЖрд╡реЗрджрди рдХреА рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╕рдВрд░рдЪрдирд╛ рд╕реЗ рд╢реБрд░реВ рдХрд░реВрдВрдЧрд╛:

"рд▓рд╛рдЗрдмреНрд░реЗрд░реА" рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛрдб рд╣реЛрддрд╛ рд╣реИ, "рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ" рд░реВрдЯ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рд╣реИ, рдЗрд╕рдореЗрдВ index.php рдФрд░ рдХрдИ рд╕реНрдерд┐рд░ рдлрд╛рдЗрд▓реЗрдВ рд╢рд╛рдорд┐рд▓ рд╣реИрдВред рдЗрд╕ рдЧрд╛рдЗрдб рдореЗрдВ рд╡рд┐рд╢реЗрд╖ рдзреНрдпрд╛рди "рд╕рд░реНрд╡рд░" рдлрд╝реЛрд▓реНрдбрд░ рдХреЛ рджрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛, рдФрд░ рдЗрд╕рд▓рд┐рдП рд╣рдорд╛рд░реЗ рдЖрд╡реЗрджрди рдореЗрдВ рдПрдХ рд╕рд░рд▓ "рд╣реИрд▓реЛ рд╡рд░реНрдб!" рдФрд░ рдХреБрдЫ рдЪрд┐рддреНрд░ рдФрд░ рд╕реАрдПрд╕рдПрд╕ рд╢рд╛рдорд┐рд▓ рд╣реЛрдВрдЧреЗред
рд╣рдорд╛рд░рд╛ рд▓рдХреНрд╖реНрдп рдПрдХ рдЖрджреЗрд╢ рдХреЗ рд╕рд╛рде рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдбрд╛рдпрд░реЗрдХреНрдЯрд░реА рд╕реЗ рд╕рд░реНрд╡рд░ рдХреЛ рд╢реБрд░реВ рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдирд╛ рд╣реИ, рдФрд░ рд╣рдорд╛рд░рд╛ рд╕рд░реНрд╡рд░ рд░реВрдЯрд┐рдВрдЧ, рдПрдЪрдЯреАрдЯреАрдкреА рд╣реЗрдбрд░ рдФрд░ рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХрд╛ рдзреНрдпрд╛рди рд░рдЦреЗрдЧрд╛ред
 [ec2-user@ip-10-229-67-156 myapp]$ ./start.sh 

рдЖрдЗрдП рд╕реНрдЯрд╛рд░реНрдЯрдЕрдк рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛ рджреЗрдЦреЗрдВ:
 #! /bin/bash INIFILE="$(pwd)/server/server.ini" DOCROOT="$(pwd)/public" ROUTER="$(pwd)/server/router.php" HOST=0.0.0.0 PORT=8080 PHP=$(which php) if [ $? != 0 ] ; then echo "Unable to find PHP" exit 1 fi $PHP -S $HOST:$PORT -c $INIFILE -t $DOCROOT $ROUTER 

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдбрд╛рдпрд░реЗрдХреНрдЯрд░реА рд╕реЗ рдЪрд▓рд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП INIFILE, DOCROOT, ROUTER рдХреЛ pwd рдХреЗ рдЙрдкрдпреЛрдЧ рд╕реЗ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред Php рдХрд╛ рд░рд╛рд╕реНрддрд╛ рдХрд┐рд╕ рдХрдорд╛рдВрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдпрджрд┐ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ $ PATH рдореЗрдВ php рдирд╣реАрдВ рдорд┐рд▓рд╛, рддреЛ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдПрдХ рддреНрд░реБрдЯрд┐ рдХреЗ рд╕рд╛рде рдмрд╛рд╣рд░ рдирд┐рдХрд▓ рдЬрд╛рдПрдЧреАред
рдпрд╣ рд╡рд┐рдзрд┐ рдХрд╛рдлреА рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдХрд╛рдо рдХрд░рддреА рд╣реИ, рд▓реЗрдХрд┐рди рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рдХрдорд╛рдВрдб рд▓рд╛рдЗрди рд╕реЗ рджрд┐рдП рдЧрдП рдХрд┐рд╕реА рднреА рдкреИрд░рд╛рдореАрдЯрд░ рдХреЛ рдмрджрд▓рдиреЗ рдХрд╛ рдЕрд╡рд╕рд░ рджреЗрддреЗ рд╣реИрдВ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП:
 if [ ! -z $INIFILE ]; then    INIFILE="$(pwd)/server/server.ini" fi 

рдЬрд╛рд░реА рд░рдЦреЗрдВ, "рддреНрд░реБрдЯрд┐рдпреЛрдВ" рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ HTTP рддреНрд░реБрдЯрд┐ рд╕рдВрджреЗрд╢реЛрдВ рдХреЗ рд▓рд┐рдП рдлрд╛рдЗрд▓реЗрдВ рд╣реИрдВред рдпрд╣рд╛рдБ 403 рддреНрд░реБрдЯрд┐ рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ: рд╣рд╛рд▓рд╛рдБрдХрд┐ рдореИрдВрдиреЗ рдХреЗрд╡рд▓ HTML рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рд╣реИ, рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХрдиреЗрдХреНрдЯ рдХреА рдЬрд╛рдПрдЧреА, рдореИрдВ рдЗрд╕рдореЗрдВ рд╢рд╛рдорд┐рд▓ рд╣реВрдВ, рдЗрд╕рд▓рд┐рдП рдЖрдк рдХрд┐рд╕реА рднреА php рдХреЛрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
 <!doctype html>  <html lang="en"> <head>  <meta charset="utf-8"> <title>403</title>  </head> <body> <h1>403: Forbidden</h1> <p>Sorry, the requested resource is not accessible.</p> </body>  </html> 


рдЕрдм рд░рд╛рдКрдЯрд░ рдХреЛ рджреЗрдЦрддреЗ рд╣реИрдВред рдЗрд╕ рдлрд╝рд╛рдЗрд▓ рдХрд╛ рдХрд╛рд░реНрдп рд╕рднреА рдЕрдиреБрд░реЛрдзреЛрдВ рдХреЛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ рдФрд░ рдкреНрд░рдмрдВрдзрд┐рдд рдХрд░рдирд╛ рд╣реИ рдФрд░ рдЙрдиреНрд╣реЗрдВ рдХреЗрд╡рд▓ рд╕рд░реНрд╡рд░ рдореЗрдВ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рдирд╛ рд╣реИ рдпрджрд┐ рджреА рдЧрдИ рдлрд╝рд╛рдЗрд▓ рдореМрдЬреВрдж рд╣реИред рд╕рднреА рддреНрд░реБрдЯрд┐ рдкреГрд╖реНрда рдПрдХ рдЯреЗрдореНрдкрд▓реЗрдЯ рдХреЛ рдЬреЛрдбрд╝рдХрд░ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВред
 <?php // Set timezone date_default_timezone_set("UTC"); // Directory that contains error pages define("ERRORS", dirname(__FILE__) . "/errors"); // Default index file define("DIRECTORY_INDEX", "index.php"); // Optional array of authorized client IPs for a bit of security $config["hostsAllowed"] = array(); function logAccess($status = 200) { file_put_contents("php://stdout", sprintf("[%s] %s:%s [%s]: %s\n", date("DM j H:i:s Y"), $_SERVER["REMOTE_ADDR"], $_SERVER["REMOTE_PORT"], $status, $_SERVER["REQUEST_URI"])); } // Parse allowed host list if (!empty($config['hostsAllowed'])) { if (!in_array($_SERVER['REMOTE_ADDR'], $config['hostsAllowed'])) { logAccess(403); http_response_code(403); include ERRORS . '/403.php'; exit; } } // if requesting a directory then serve the default index $path = parse_url($_SERVER["REQUEST_URI"], PHP_URL_PATH); $ext = pathinfo($path, PATHINFO_EXTENSION); if (empty($ext)) { $path = rtrim($path, "/") . "/" . DIRECTORY_INDEX; } // If the file exists then return false and let the server handle it if (file_exists($_SERVER["DOCUMENT_ROOT"] . $path)) { return false; } // default behavior logAccess(404); http_response_code(404); include ERRORS . "/404.php"; 

рдкрд╣рд▓реА рдкрдВрдХреНрддрд┐рдпреЛрдВ рдореЗрдВ, рдореИрдВ рдХреБрдЫ рд╡реИрд╢реНрд╡рд┐рдХ рдорд╛рдкрджрдВрдбреЛрдВ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддрд╛ рд╣реВрдВ, рдЬреИрд╕реЗ рдХрд┐ DIRECTORY_INDEX, рдПрдХ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдЬрд┐рд╕рдореЗрдВ рддреНрд░реБрдЯрд┐ рдкреИрдЯрд░реНрди рд╣реИред Date_default_timezone_set () рдкреИрд░рд╛рдореАрдЯрд░ рдХреЛ рдУрдПрд╕ рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рд╕реЗ рдореЗрд▓ рдЦрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП, рдЕрдиреНрдпрдерд╛ рд▓реЙрдЧ рдореЗрдВ рдФрд░ рд╕рд░реНрд╡рд░ рдкрд░ рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐рдпреЛрдВ рдХреЗ рдмреАрдЪ рдЕрд╕рдВрдЧрддрддрд╛ рд╣реЛрдЧреАред рдореИрдВрдиреЗ рд╕реБрд░рдХреНрд╖рд╛ рдмрдврд╝рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдиреБрдордд IP рдкрддреЛрдВ рдХреА рдПрдХ рд╕реВрдЪреА рднреА рдЬреЛрдбрд╝реАред
LogAccess () рдлрд╝рдВрдХреНрд╢рди рдЖрд╡рд╢реНрдпрдХ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдЬрдм рд░реВрдЯрд┐рдВрдЧ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдЕрдиреБрд░реЛрдз рдкреНрд░рд╛рдкреНрдд рдХрд░рддреА рд╣реИ, рддреЛ рд▓реЙрдЧ рд╕рд░реНрд╡рд░ рдХреЛ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рдЕрдирджреЗрдЦрд╛ рдХрд░ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдлрд╝рдВрдХреНрд╢рди рдХреЗрд╡рд▓ рдПрдХ рд╕реНрдерд┐рддрд┐ рдХреЛрдб рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рддрд╛ рд╣реИ, рдФрд░ рдЖрдЙрдЯрдкреБрдЯ рдкреНрд░рд╛рд░реВрдк рд╕рд░реНрд╡рд░ рдкреНрд░рд╛рд░реВрдк рдХреЗ рд╕рд╛рде рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╕рдВрдЧрдд рд╣реИред
рд╣рдорд╛рд░рд╛ рдкрд╣рд▓рд╛ рдХрд╛рдо рдПрдХ рд╕реБрд░рдХреНрд╖рд╛ рдЬрд╛рдВрдЪ рд╣реИред рдпрджрд┐ рдХреНрд▓рд╛рдЗрдВрдЯ IP рдЕрдиреБрдордд IP рдХреА рд╕рд░рдгреА рдореЗрдВ рдирд╣реАрдВ рд╣реИ, рддреЛ рд╣рдо рдПрдХ рддреНрд░реБрдЯрд┐ рд╕рдВрджреЗрд╢ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд╕реЗ рдмрд╛рд╣рд░ рдирд┐рдХрд▓рддреЗ рд╣реИрдВред рд╣рдореЗрдВ 200 рдХреЗ рдЕрд▓рд╛рд╡рд╛ рдПрдХ рд╕реНрдерд┐рддрд┐ рдХреЛрдб рджреЗрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдФрд░ рд╣реЗрдбрд░ () рдлрд╝рдВрдХреНрд╢рди рдпрд╣рд╛рдВ рдХрд╛рдо рдирд╣реАрдВ рдХрд░реЗрдЧрд╛, рдЗрд╕рд▓рд┐рдП рд╣рдо рдПрдХ рдирдП рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ - http_response_codeред
рдпрджрд┐ рдХреНрд▓рд╛рдЗрдВрдЯ IP рдЕрдиреБрдордд IP рдХреА рд╕рд░рдгреА рдореЗрдВ рд╣реИ, рддреЛ рд╣рдорд╛рд░рд╛ рдЕрдЧрд▓рд╛ рдЪрд░рдг рдЕрдиреБрд░реЛрдзрд┐рдд рдкрде рдФрд░ рдлрд╝рд╛рдЗрд▓ рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ рд╣реИред рдпрджрд┐ рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдЦрд╛рд▓реА рд╣реИ, рддреЛ рд╣рдо рдорд╛рдирддреЗ рд╣реИрдВ рдХрд┐ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдлрд╝реЛрд▓реНрдбрд░ рдХрд╛ рдЕрдиреБрд░реЛрдз рдХрд░рддрд╛ рд╣реИ рдФрд░ рдкрд╣рд▓реЗ рдкрд░рд┐рднрд╛рд╖рд┐рдд DIRECTORY_INDEX рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдкрде рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдХрд░рддрд╛ рд╣реИред
рдЕрдВрдд рдореЗрдВ, рдпрджрд┐ рдЕрдиреБрд░реЛрдзрд┐рдд рдлрд╝рд╛рдЗрд▓ рдореМрдЬреВрдж рд╣реИ, рддреЛ FALSE рд▓реМрдЯреЗрдВ, рдФрд░ рд╕рд░реНрд╡рд░ рдХреЛ рдлрд╝рд╛рдЗрд▓ рддрдХ рдкрд╣реБрдБрдЪрдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдВред рдпрджрд┐ рдирд╣реАрдВ, рддреЛ 404 рддреНрд░реБрдЯрд┐ рд╕рдВрджреЗрд╢ рдкреНрд░рджрд░реНрд╢рд┐рдд рд╣реЛрддрд╛ рд╣реИред

рд╕рд╛рд░рд╛рдВрд╢


рд╡рд╣ рд╕рдм рд╣реИред рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, php рд╕рд░реНрд╡рд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЖрд╕рд╛рди рд╣реИред рд╣рдорд╛рд░рд╛ рд╡реНрдпрдХреНрддрд┐рдЧрдд рд╕рд░реНрд╡рд░ рдмрд╣реБрдд рд╕рд░рд▓ рд╣реИред рдХреЛрдб рдХреЛ рдФрд░ рдЕрдзрд┐рдХ рдЬрдЯрд┐рд▓ рдФрд░ рдХрд╛рд░реНрдпрд╛рддреНрдордХ рдХрдХреНрд╖рд╛рдУрдВ рдореЗрдВ рдЕрдиреБрдХреВрд▓рд┐рдд рдФрд░ рд╢рд╛рдорд┐рд▓ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рд╣реИрдкреНрдкреА рдХреЛрдбрд┐рдВрдЧ!

рдкреАрдПрд╕ рдореИрдВ рдкреАрдПрдо рдХреЗ рдЯреНрд░рд╛рдВрд╕рдлрд░ рдкрд░ рдЖрд▓реЛрдЪрдирд╛ рдФрд░ рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдХреЛ рд╕рд╣рд░реНрд╖ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░реВрдВрдЧрд╛ред


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


All Articles