рдХрдИ PHP рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдкрд░ рдХреЛрдб рдХреЗ рд╕реНрд╡рд╛рд╕реНрдереНрдп рдХреА рдЬрд╛рдБрдЪ рдХрд░рдирд╛

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

рдЙрдирдХреЗ рд╕рд╛рде рдкреВрд░рд╛ рд╡рд░реНрдХрдлрд╝реНрд▓реЛ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рд╣реИред рдЖрдк PHP рдХреЗ рд╕рднреА рдЖрд╡рд╢реНрдпрдХ рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдХреЛ рдПрдХ рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░рддреЗ рд╣реИрдВ, рдЙрдиреНрд╣реЗрдВ рдЕрдирдкреИрдХ рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдЙрдиреНрд╣реЗрдВ рдЗрдХрдЯреНрдард╛ рдХрд░рддреЗ рд╣реИрдВред рдпрд╣ рдЖрд╡рд╢реНрдпрдХ рд╣реИ рдХрд┐ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╕рдВрд░рдЪрдирд╛ рдкреНрд░рд╛рдкреНрдд рдХреА рдЬрд╛рдП:
/ some_dir /ред
/some_dir/php-5.1.6
/some_dir/php-5.2.17
/some_dir/php-5.3.1
/ some_dir / ...

рдЬрд╣рд╛рдБ php-5.1.6, php-5.2.17, рдЖрджрд┐ рджреБрднрд╛рд╖рд┐рдпрд╛ рдХреЗ рд╕рдВрдЧрдд рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдХреЗ рд╕рд╛рде рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рд╣реИрдВред рдЗрд╕рдХреЗ рдмрд╛рдж, рд╡рд╣рд╛рдВ 2 рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд░рдЦреЗрдВред рдкрд╣рд▓рд╛ рд░рди рд╣реИ
<?php # ,     . #       test.php. define('TEST_DONE_STR', 'TEST DONE'); define('TEST_PATH', dirname(__FILE__)); define('CLI_PATH', 'sapi/cli/php'); #   PHP    $dirs = array(); foreach(scandir('./') as $item) { if(preg_match("#^php-#", $item) AND is_dir($item)) { if(file_exists($item . "/sapi/cli/php")) $dirs[] = $item; else print "$item - php-cli not found\n"; } } #      test.php foreach($dirs as $dir) { $output = array(); exec(TEST_PATH . "/$dir/" . CLI_PATH . " " . TEST_PATH . "/test.php", $output); print "$dir - " . (implode("", $output) == TEST_DONE_STR ? "OK" : "FAILED") . "\n"; } 

рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рд╕реНрд░реЛрдд рд╕реЗ рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рд╡рд╣ рдкрд╣рд▓реЗ рд╣рд╕реНрддрд╛рдХреНрд╖рд░ "php-" рджреНрд╡рд╛рд░рд╛ рдЙрд╕рдХреЗ рдирд┐рдХрдЯрд╡рд░реНрддреА PHP рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛рдУрдВ рдХреЛ рдкрддрд╛ рдЪрд▓рддрд╛ рд╣реИ, рдФрд░ рдлрд┐рд░ cli / php рдХреА рдорджрдж рд╕реЗ рдЙрдирдореЗрдВ рд╕реЗ рдкреНрд░рддреНрдпреЗрдХ test.php рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдЪрд▓рд╛рддрд╛ рд╣реИред рдпрджрд┐ рдкрд░реАрдХреНрд╖рдг рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдЪрд▓рд╛рдиреЗ рдХреЗ рдмрд╛рдж рд╕реНрдерд┐рд░ "TEST_DONE_STR" рд╕реЗ рд▓рд╛рдЗрди рдХреЛ рд░реЛрдХ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ - рдкрд░реАрдХреНрд╖рдг рдкрд╛рд╕ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ run.php "php - *ред *ред *ред * -" рдареАрдХ рд╣реИред рдЕрдиреНрдпрдерд╛ - "php - *ред *ред * - FAILED"ред
test.php рдореЗрдВ рд╡рд╣ рдХреЛрдб рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП рдЬрд┐рд╕рдХреА рдЖрдкрдХреЛ рдЬрд╛рдБрдЪ рдХрд░рдиреА рд╣реИред рдпрд╣ рдХрд┐рд╕реА рднреА рд░реВрдк рдореЗрдВ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рдореБрдЦреНрдп рдмрд╛рдд рдпрд╣ рд╣реИ рдХрд┐ рд╕рдлрд▓ рдЦрдирди рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ рдЙрдкрд░реЛрдХреНрдд рд░реЗрдЦрд╛ рдкреНрд░рджрд░реНрд╢рд┐рдд рд╣реЛрддреА рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдореИрдВ рдЕрдкрдиреЗ рдПрдХ рдкрд░реАрдХреНрд╖рдг рдХреА рд╕рд╛рдордЧреНрд░реА рдкреЛрд╕реНрдЯ рдХрд░рддрд╛ рд╣реВрдВ:
 <?php # ,     . #       run.php. define('TEST_DONE_STR', 'TEST DONE'); #   ob_start(); include("/etc/passwd/../passwd"); $result = ob_get_contents(); ob_end_clean(); #      if(substr_count($result, 'root:')) print TEST_DONE_STR; 

Run.php рдЖрдЙрдЯрдкреБрдЯ рдЙрджрд╛рд╣рд░рдг:
user @ Comp: ~ / php $ php run.php
php-4.3.1 - php-cli рдирд╣реАрдВ рдорд┐рд▓рд╛
php-5.2.16 - php-cli рдирд╣реАрдВ рдорд┐рд▓рд╛
php-5.2.17-suhosin - php-cli рдирд╣реАрдВ рдорд┐рд▓рд╛
php-4.3.10 - рдареАрдХ рд╣реИ
php-4.4.9 - рдареАрдХ рд╣реИ
php-5.0.5 - рдареАрдХ рд╣реИ
php-5.1.6 - рдареАрдХ рд╣реИ
php-5.1.6-suhosin - рд╡рд┐рдлрд▓
php-5.2.0 - рдареАрдХ рд╣реИ
php-5.2.17 - рдареАрдХ рд╣реИ
php-5.2.2 - рдареАрдХ рд╣реИ
php-5.2.3 - рдареАрдХ рд╣реИ
php-5.2.4 - рдареАрдХ рд╣реИ
php-5.2.9 - рдареАрдХ рд╣реИ
php-5.3.0 - рд╡рд┐рдлрд▓
php-5.3.1 - рд╡рд┐рдлрд▓
php-5.3.10 - рд╡рд┐рдлрд▓
php-5.3.20 - рд╡рд┐рдлрд▓
php-5.3.5 - рд╡рд┐рдлрд▓


рдореБрдЭреЗ рдЖрд╢рд╛ рд╣реИ рдХрд┐ рд╡реЗ рдЖрдкрдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧреА рд╣реЛрдВрдЧреЗред рдореИрдВрдиреЗ рдкрд╣рд▓реЗ рд╣реА рдмрд╣реБрдд рд╕рдордп рдмрдЪрд╛ рд▓рд┐рдпрд╛ :)


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


All Articles