PHP рдореЗрдВ ncurses рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛

рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рдФрд░ рд╡реЗрдм рдбреЗрд╡рд▓рдкрд░ рдХреЗ рд░реВрдк рдореЗрдВ, рдЖрдк рд╕рдВрднрд╡рддрдГ рдХрдВрд╕реЛрд▓ рд╕реЗ рд╕рд╛рдЗрдЯ рдХреЛ рдкреНрд░рд╢рд╛рд╕рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдордп-рд╕рдордп рдкрд░ php рдкреНрд░реЛрдЧреНрд░рд╛рдо рд▓рд┐рдЦрддреЗ рд╣реИрдВред рднрд╛рд╖рд╛ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ, рдЖрдк рдХреЗрд╡рд▓ рдПрдХ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ рдЬреЛ рдХрдВрд╕реЛрд▓ рд╕реЗ рдкрдврд╝рддрд╛ / рдкрдврд╝рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди ncurses рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЖрдк рдПрдХ рдЬрдЯрд┐рд▓ рдЙрдкрд╕реНрдерд┐рддрд┐ рдХреЗ рд╕рд╛рде рдХрдВрд╕реЛрд▓ рдЙрдкрдпреЛрдЧрд┐рддрд╛ рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ рдЬреЛ рд╡рд┐рднрд┐рдиреНрди рдкреНрд░рдХрд╛рд░ рдХреЗ рдЯрд░реНрдорд┐рдирд▓реЛрдВ рдореЗрдВ рд╕рдорд╛рди рджрд┐рдЦрд╛рдИ рджреЗрдЧрд╛ред

PHP рдмрд╣реБрдд рд╣реА рд▓рдЪреАрд▓реА рдФрд░ рдПрдХреНрд╕реНрдЯреЗрдВрд╕рд┐рдмрд▓ рд╣реИ, рдЗрд╕рдХреА рдорджрдж рд╕реЗ рдЖрдк рдРрд╕реА рд╕реНрдХреНрд░рд┐рдкреНрдЯреНрд╕ рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ рдЬрд┐рдиреНрд╣реЗрдВ рджреВрд╕рд░реА рднрд╛рд╖рд╛рдУрдВ (рдкрд░реНрд▓ / рдмреИрд╢ рд╕реНрдХреНрд░рд┐рдкреНрдЯреНрд╕ рдЖрджрд┐) рдореЗрдВ рд╕рдорд╛рди рдХреЗ рд╕рд╛рде рдмрджрд▓рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред Ncurses рдХреА рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдЕрджреНрднреБрдд рд╣реИ рдФрд░ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЯрд░реНрдорд┐рдирд▓ php рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреА рд╕рдВрднрд╛рд╡рдирд╛рдУрдВ рдХреЛ рдПрдХ рдирдП рд╕реНрддрд░ рдкрд░ рд▓реЗ рдЬрд╛рддреА рд╣реИред

рд▓реЗрдЦ рдХрд╛ рдЙрджреНрджреЗрд╢реНрдп рдЖрдкрдХреЛ php рдореЗрдВ рдХрдВрд╕реЛрд▓ рдпреВрдЯрд┐рд▓рд┐рдЯреА рд▓рд┐рдЦрдиреЗ рдХреЗ рдХреНрд╖реЗрддреНрд░ рдореЗрдВ "рдкреБрд╢" рджреЗрдирд╛ рд╣реИ рдЬреЛ рдЗрд╕ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХрд╛ рд▓рд╛рдн рдЙрдард╛рдПрдЧрд╛ред рдореИрдВ рдХреЗрд╡рд▓ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рд╕рдмрд╕реЗ рдорд╣рддреНрд╡рдкреВрд░реНрдг рджрд┐рдЦрд╛рдиреЗ рдЬрд╛ рд░рд╣рд╛ рд╣реВрдВ, рдФрд░ рдореИрдВ рдЖрдкрдХреЗ рдЖрд╡реЗрджрди рдореЗрдВ ncurses рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдкрдХреЛ рдЖрдзрд╛рд░ рджреЗрдиреЗ рдХреА рдЙрдореНрдореАрдж рдХрд░рддрд╛ рд╣реВрдВред

рдпрд╣ рд▓реЗрдЦ рдХрд┐рд╕рдХреЗ рд▓рд┐рдП рд╣реИ?

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

рд╕реАрдЦрдиреЗ рдХреЗ рд╡рд┐рд╖рдп


рдЗрд╕ рд▓реЗрдЦ рд╕реЗ рдЖрдк рд╕реАрдЦреЗрдВрдЧреЗ:

рдкрд░рд┐рднрд╛рд╖рд┐рдд



рд▓реЗрдЦрдХ рд╕реЗ


PHP рдореЗрдВ ncurses рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд▓рд┐рдП рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдмрд╣реБрдд рд╕реАрдорд┐рдд рд╣реИред рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рдХреБрдЫ рдХрд╛рд░реНрдп рдЖрдзрд┐рдХрд╛рд░рд┐рдХ рд╡реЗрдмрд╕рд╛рдЗрдЯ рдкрд░ рдЙрдкрд▓рдмреНрдз рдирд╣реАрдВ рд╣реИрдВред Ncurses рдХреЗ рд╕рд╛рде рдЕрдиреБрдкреНрд░рдпреЛрдЧ C рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рд╢реИрд▓реА рдХрд╛ рдЕрдиреБрд╕рд░рдг рдХрд░рддреЗ рд╣реИрдВ, рдЬреИрд╕реЗ рдХрд┐ рд╡реЗ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдХрд╛рд░реНрдпрдХреНрд░рдо рдереЗ, рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдирд╣реАрдВред

рдпрджрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ C рдпрд╛ C ++ рдореЗрдВ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдХрд╛ рдЕрдиреБрднрд╡ рд╣реИ, рддреЛ рдЖрдк рдкрд╣рд▓реЗ рд╕реЗ рд╣реА ncurses рд╕реЗ рдкрд░рд┐рдЪрд┐рдд рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдХрд▓реНрдкрдирд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ PHP рдЬреИрд╕реА рд╡реНрдпрд╛рдЦреНрдпрд╛ рдХреА рдЧрдИ рднрд╛рд╖рд╛ рдХреЗ рд╕рд╛рде рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдкрд░ ncurses рдХрд┐рддрдирд╛ рдЙрдкрдпреЛрдЧреА рд╣реЛ рд╕рдХрддрд╛ рд╣реИред

рдЖрдкрдХреЛ рдХреНрдпрд╛ рдЬрд╛рдирдирд╛ рдЪрд╛рд╣рд┐рдП


рдЖрдкрдХреЛ рдПрдХ рдпреВрдирд┐рдХреНрд╕ рдЬреИрд╕реА рдкреНрд░рдгрд╛рд▓реА рдкрд░ -with-ncurses рд╡рд┐рдХрд▓реНрдк рдХреЗ рд╕рд╛рде рд╕рдВрдХрд▓рд┐рдд PHP рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рд╕рднреА рдЯрд░реНрдорд┐рдирд▓ рд░рдВрдЧ рдЙрддреНрдкрд╛рджрди рдХрд╛ рд╕рдорд░реНрдерди рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рдореИрдВрдиреЗ рд▓реЗрдЦ рдореЗрдВ рд░рдВрдЧреЛрдВ рдХреЗ рдЙрдкрдпреЛрдЧ рдХреЛ рд╢рд╛рдорд┐рд▓ рдирд╣реАрдВ рдХрд┐рдпрд╛ред

рдзреНрдпрд╛рди рд░рдЦреЗрдВ рдХрд┐ рдЖрдкрдХреЛ рдЕрдкрдиреЗ рдЯрд░реНрдорд┐рдирд▓ рдХреЛ рд░реАрд╕реЗрдЯ рдХрдорд╛рдВрдб рдХреЗ рд╕рд╛рде "рд░реАрд╕реЗрдЯ" рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛ рд╕рдХрддреА рд╣реИред рдпрджрд┐ рдХреЛрдИ рддреНрд░реБрдЯрд┐ рд╣реЛрддреА рд╣реИ рдФрд░ ncurses_end() рдирд╣реАрдВ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдЖрдкрдХрд╛ рдЯрд░реНрдорд┐рдирд▓ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рдХрд╛рдо рдирд╣реАрдВ рдХрд░реЗрдЧрд╛ред

рдиреАрдЪреЗ рджрд┐рдП рдЧрдП рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рдирд┐рд╖реНрдкрд╛рджрди рдХрд╛ рдХреНрд░рдо рднреА рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИред рдпрджрд┐ рдЖрдк рдПрдХ рд╡рд┐рдВрдбреЛ рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░рддреЗ рд╣реИрдВ рддреЛ PHP рдПрдХ рддреНрд░реБрдЯрд┐ рджрд┐рдЦрд╛ рд╕рдХрддреА рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдПрдХ рд╕рдорд╛рди рд╣реИрдВрдбрд▓рд░ рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИред

рдЪрд▓реЛ рдПрдХ рдЬрдЯрд┐рд▓ рдПрдХ рдкрд░ рдЬрд╛рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдПрдХ рд╕рд░рд▓ рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдХреЗ рд╕рд╛рде рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВред

рдЦрд┐рдбрд╝рдХрд┐рдпреЛрдВ рдХреЗ рд╕рд╛рде рдПрдХ рд╕рд░рд▓ рдЙрджрд╛рд╣рд░рдг


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

рдЖрдкрдХреЛ ncurses_init(); рдХреЙрд▓ рдХрд░рдХреЗ рдкреНрд░рд╛рд░рдВрдн рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ ncurses_init(); ncurses рдореЛрдб рдореЗрдВ рдЬрд╛рдиреЗ рдХреЗ рд▓рд┐рдПред рдЗрд╕рдХреЗ рдмрд┐рдирд╛, рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдХреЙрд▓ рдХрд░рддреЗ рд╕рдордп, PHP рдПрдХ рддреНрд░реБрдЯрд┐ рдХреЗ рд╕рд╛рде рдХреНрд░реИрд╢ рд╣реЛ рдЬрд╛рдПрдЧрд╛ред

рд╕реНрдХреНрд░рд┐рдкреНрдЯ рджреЛ рд╡рд┐рдВрдбреЛ рдФрд░ рдПрдХ рд▓рд╛рдЗрди рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП
 <?php //     $ncurse = ncurses_init(); //    $fullscreen = ncurses_newwin ( 0, 0, 0, 0); //     ncurses_border(0,0, 0,0, 0,0, 0,0); //    $small = ncurses_newwin(10, 30, 7, 25); //    ncurses_wborder($small,0,0, 0,0, 0,0, 0,0); ncurses_refresh(); //   //     ncurses_mvwaddstr($small, 5, 5, " Test String "); //       ncurses_wrefresh($small); $pressed = ncurses_getch(); //    ncurses_end(); //    ncurses,   


рд╡рд┐рдВрдбреЛ рдХрд╛ рдЖрдХрд╛рд░ рдмрджрд▓рдиреЗ рдФрд░ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛ рдлрд┐рд░ рд╕реЗ рдЪрд▓рд╛рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВред рдореБрдЦреНрдп рдЦрд┐рдбрд╝рдХреА рдлрд┐рд░ рд╕реЗ рдкреВрд░реА рдЬрдЧрд╣ рдкрд░ рдХрдмреНрдЬрд╛ рдХрд░ рд▓реЗрдЧреАред

рдЕрдм рдЖрдк рдХрд┐рд╕реА рдХреБрдВрдЬреА рдХреЛ рджрдмрд╛рддреЗ рд╕рдордп рдХреБрдЫ рдХреНрд░рд┐рдпрд╛ рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рдпрд╛ рдЬрдм рдЖрдк рдПрдХ рдмрдЯрди рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░рддреЗ рд╣реИрдВ рддреЛ рдЕрдиреБрдкреНрд░рдпреЛрдЧ рд╕реЗ рдмрд╛рд╣рд░ рдирд┐рдХрд▓рдирд╛ рд╕рдВрднрд╡ рдмрдирд╛рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред рдореИрдВ рдЗрд╕рдХреЗ рд▓рд┐рдП esc (27 ascii рдХреЛрдб) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдкрд╕рдВрдж рдХрд░рддрд╛ рд╣реВрдВред
ESC рджрдмрд╛рдХрд░ рдмрд╛рд╣рд░ рдирд┐рдХрд▓рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП, $pressed = ncurses_getch(); рдХреЗ рдмрдЬрд╛рдп рдЗрд╕ рдХреЛрдб рдХреЛ рдЬреЛрдбрд╝реЗрдВ $pressed = ncurses_getch();
 while (true) { $pressed = ncurses_getch(); //    if ($pressed == 27) { break; } else { ncurses_mvwaddstr($small, 5, 5, $pressed); ncurses_wrefresh($small); } } 

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

рдЖрдк ncurses_refresh(); рдХреЙрд▓ рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдХреЛрдб рд░рдЦрдХрд░ рд╣реЗрдбрд░ рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВ ncurses_refresh(); :
 ncurses_attron(NCURSES_A_REVERSE); ncurses_mvaddstr(0,1,"My first ncurses application"); ncurses_attroff(NCURSES_A_REVERSE); 

рдЖрдк REVERSE рдореЛрдб (рд░рдВрдЧ рдФрд░ рдкреГрд╖реНрдарднреВрдорд┐ рдкрд░рд┐рд╡рд░реНрддрди рд╕реНрдерд╛рди) рддрдХ рд╕реАрдорд┐рдд рдирд╣реАрдВ рд╣реИрдВ, DIM, UNDERLINE рдФрд░ рдЕрдиреНрдп рднреА рд╣реИрдВред

рдЖрдк рдореЗрдиреВ рд╕реЗ рдПрдХ рдЗрдВрдЯрд░реИрдХреНрдЯрд┐рд╡ рдЪрдпрди рдЬреЛрдбрд╝рдХрд░ рдЖрд░рд╛рдо рдмрдврд╝рд╛ рд╕рдХрддреЗ рд╣реИрдВред

рдПрдХ рдореЗрдиреВ рдмрдирд╛рдПрдБ


рдХрдИ рдХрд╛рд░реНрдпрдХреНрд░рдореЛрдВ рдореЗрдВ рдПрдХ рдореЗрдиреВ рдФрд░ рдЙрд╕рдореЗрдВ рд╕реЗ рдЪреБрдирдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рд╣реЛрддреА рд╣реИред рдЕрддреАрдд рдореЗрдВ, "рд╢реБрджреНрдз" PHP рдореЗрдВ, рд╣рдо рдХреЗрд╡рд▓ рд╡рд┐рдХрд▓реНрдкреЛрдВ рдХреА рдПрдХ рд╕реВрдЪреА рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░ рд╕рдХрддреЗ рдереЗ, рдФрд░ рд╡рд╛рдВрдЫрд┐рдд рдХреА рд╕рдВрдЦреНрдпрд╛ рджрд░реНрдЬ рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рдкреНрд░рджрд╛рди рдХрд░рддреЗ рдереЗред рдПрдХ рд╡рд┐рдХрд▓реНрдк рдХрд╛ рдРрд╕рд╛ рдЕрд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╡рд┐рдХрд▓реНрдк рдЕрдзрд┐рдХ рд╕рд╣рдЬ рдЬреНрдЮрд╛рди рдпреБрдХреНрдд рджреНрд╡рд╛рд░рд╛ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
рдЫрд╡рд┐

рдЪрдпрди рдХрд░рдиреЗ рдпреЛрдЧреНрдп рдореЗрдиреВ рдкреНрд░рджрд░реНрд╢рди рд╕реНрдХреНрд░рд┐рдкреНрдЯ
 <?php define('ESCAPE_KEY', 27); $ncurse = ncurses_init(); $fullscreen = ncurses_newwin ( 0, 0, 0, 0); ncurses_border(0,0, 0,0, 0,0, 0,0); $small = ncurses_newwin(10, 30, 7, 25); ncurses_wborder($small,0,0, 0,0, 0,0, 0,0); ncurses_attron(NCURSES_A_REVERSE); ncurses_mvaddstr(0,1,"My first ncurses application"); ncurses_attroff(NCURSES_A_REVERSE); ncurses_refresh(); $currently_selected = 0; $menu = array('one', 'two', 'three', 'four'); while (true) { for($i=0; $i<count($menu); $i++){ $out = $menu[$i]; if($currently_selected == intval($i)){ ncurses_wattron($small,NCURSES_A_REVERSE); ncurses_mvwaddstr($small, 1+$i, 1, $out); ncurses_wattroff($small,NCURSES_A_REVERSE); } else { ncurses_mvwaddstr($small, 1+$i, 1, $out); } } ncurses_wrefresh($small); $pressed = ncurses_getch(); if ($pressed == NCURSES_KEY_UP) { $currently_selected--; if ($currently_selected < 0) $currently_selected = 0; } elseif ($pressed == NCURSES_KEY_DOWN) { $currently_selected++; if ($currently_selected >= count($menu)) $currently_selected = count($menu)-1; } elseif($pressed == ESCAPE_KEY) { break; } else { ncurses_mvwaddstr($small, 5, 5, $pressed); } } ncurses_end(); 

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

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

рд╕рднреА рдПрдХ рд╕рд╛рде


Php.net рдиреЗ ncurses рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреЗ 119 рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рд╕реВрдЪреАрдмрджреНрдз рдХрд┐рдпрд╛ рд╣реИред рдиреАрдЪреЗ рджреА рдЧрдИ рддрд╛рд▓рд┐рдХрд╛ рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЧрдП рдХрд╛рд░реНрдпреЛрдВ рдХреА рдПрдХ рд╕реВрдЪреА рдФрд░ рдкреНрд░рд▓реЗрдЦрди рдХреЗ рд▓рд┐рдВрдХ рд╢рд╛рдорд┐рд▓ рд╣реИрдВред рдореИрдВ рдиреЛрдЯ рдХрд░рддрд╛ рд╣реВрдВ рдХрд┐ рдЖрдзрд┐рдХрд╛рд░рд┐рдХ рджрд╕реНрддрд╛рд╡реЗрдЬ рдореЗрдВ рд╕реВрдЪреАрдмрджреНрдз рдХрд╛рд░реНрдпреЛрдВ рдореЗрдВ рд╕реЗ рдЪрд╛рд░ рдЧрд╛рдпрдм рд╣реИрдВред (рдЕрдиреБрд╡рд╛рджрдХ рдХрд╛ рдиреЛрдЯ: рдлрд┐рд▓рд╣рд╛рд▓, рд╕рднреА рдХрд╛рд░реНрдп php.net рдкрд░ рдкреНрд░рд▓реЗрдЦрди рдореЗрдВ рдирд┐рд╣рд┐рдд рд╣реИрдВ, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдПрдХ рд╡рд┐рд╕реНрддреГрдд рд╡рд┐рд╡рд░рдг рдХреЗ рдмрд┐рдирд╛)ред
рд╕рдорд╛рд░реЛрд╣рд╡рд┐рд╡рд░рдгрдкреНрд░рд▓реЗрдЦрди
ncurses_initрдкреНрд░рд╛рд░рдВрднрд┐рдХ ncurseswww.php.net/manual/en/function.ncurses-init.php
ncurses_newwinрдПрдХ рдирдИ рд╡рд┐рдВрдбреЛ рдмрдирд╛рддрд╛ рд╣реИwww.php.net/manual/en/function.ncurses-newwin.php
ncurses_getmaxyx (рд╕рдВрд╕рд╛рдзрди рд╡рд┐рдВрдбреЛ, рдЗрдВрдЯ
рд╡рд╛рдкрд╕реА рд╡рд╛рдИ, рдЗрдВрдЯ рд░рд┐рдЯрд░реНрди рдПрдХреНрд╕);
рдЪрд░ X рдФрд░ Y рдЯрд░реНрдорд┐рдирд▓ рдХрд╛ рдЕрдзрд┐рдХрддрдо рдЖрдХрд╛рд░ рд▓рд┐рдЦрддрд╛ рд╣реИ-
ncurses_borderрдореБрдЦреНрдп рдЦрд┐рдбрд╝рдХреА рдХреЗ рдЪрд╛рд░реЛрдВ рдУрд░ рдПрдХ рдлреНрд░реЗрдо рдЦреАрдВрдЪрддрд╛ рд╣реИwww.php.net/manual/en/function.ncurses-border.php
ncurses_refreshрдореБрдЦреНрдп рд╡рд┐рдВрдбреЛ рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд░рддрд╛ рд╣реИред рджреНрд╡рд┐рддреАрдпрдХ рд╡рд┐рдВрдбреЛ рдХреЛ рдлрд┐рд░ рд╕реЗ рддреИрдпрд╛рд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП ncurses_wrefresh рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВwww.php.net/manual/en/function.ncurses-refresh.php
ncurses_attronрдкреНрд░рджрд░реНрд╢рд┐рдд рдкрд╛рда рдкрд░ рдПрдХ рд╡рд┐рд╢реЗрд╖рддрд╛ рд▓рд╛рдЧреВ рдХрд░рддрд╛ рд╣реИредwww.php.net/manual/en/function.ncurses-attron.php
ncurses_attroffрд╡рд┐рд╢реЗрд╖рддрд╛ рдЙрдкрдпреЛрдЧ рдЕрдХреНрд╖рдо рдХрд░рддрд╛ рд╣реИwww.php.net/manual/en/function.ncurses-attroff.php
ncurses_mvaddstrрдкреНрд░рд┐рдВрдЯ рд╕реНрдЯреНрд░рд┐рдВрдЧwww.php.net/manual/en/function.ncurses-mvaddstr.php
ncurses_wborder (рд╕рдВрд╕рд╛рдзрди рд╡рд┐рдВрдбреЛ, рдЗрдВрдЯ
рдмрд╛рдпрд╛рдВ, рдЗрдВрдЯ рд░рд╛рдЗрдЯ, рдЗрдВрдЯ рдЯреЙрдк, рдЗрдВрдЯ рдмреЙрдЯрдо, рдЗрдиреНрдЯрд▓ tl_corner, int tr_corner, int
bl_corner, int br_corner);
рдПрдХ рдорд╛рдзреНрдпрдорд┐рдХ рдЦрд┐рдбрд╝рдХреА рдХреЗ рд▓рд┐рдП рдПрдХ рдлреНрд░реЗрдо рдЦреАрдВрдЪрддрд╛ рд╣реИред-
ncurses_wattron (рд╕рдВрд╕рд╛рдзрди рд╡рд┐рдВрдбреЛ, рдЗрдВрдЯ
рд╡рд┐рд╢реЗрд╖рддрд╛)
Ncurses_attron рдХреА рдкрд╣рдЪрд╛рди , рдХреЗрд╡рд▓ рд╡рд┐рдВрдбреЛ рд╡рд┐рдВрдбреЛ рдкрд░ рд▓рд╛рдЧреВ рд╣реЛрддреА рд╣реИ-
ncurses_mvwaddstrрдПрдХ рдорд╛рдзреНрдпрдорд┐рдХ рд╡рд┐рдВрдбреЛ рдореЗрдВ рдПрдХ рдкрдВрдХреНрддрд┐ рдбрд╛рд▓рддрд╛ рд╣реИwww.php.net/manual/en/function.ncurses-mvwaddstr.php
ncurses_wattroff (рд╕рдВрд╕рд╛рдзрди рд╡рд┐рдВрдбреЛ, рдЗрдВрдЯ
рд╡рд┐рд╢реЗрд╖рддрд╛)
Ncurses_wattroff рдХреЗ рд╕рдорд╛рди, рдХреЗрд╡рд▓ рд╡рд┐рдВрдбреЛ рд╡рд┐рдВрдбреЛ рдкрд░ рд▓рд╛рдЧреВ рд╣реЛрддрд╛ рд╣реИ-
ncurses_wrefreshрдкреГрд╖реНрдарднреВрдорд┐ рд╡рд┐рдВрдбреЛ рдХреЛ рдлрд┐рд░ рд╕реЗ рдмрдирд╛рддрд╛ рд╣реИредwww.php.net/manual/en/function.ncurses-wrefresh.php
ncurses_getchрдХреАрдмреЛрд░реНрдб рдпрд╛ рдорд╛рдЙрд╕ рдЗрдирдкреБрдЯ рдХреА рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░ рд░рд╣рд╛ рд╣реИредwww.php.net/manual/en/function.ncurses-getch.php


рд╕реБрдкреАрд░рд┐рдпрд░ рдЯреНрд░реЗрд╕рд░рдЖрдЙрдЯ


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

рдпрд╣ рд╕реНрдХреНрд░рд┐рдкреНрдЯ zend.com (рдЕрдзрд┐рдХрддрдо 10 рдЫрд▓рд╛рдВрдЧ) рдХреЗ рд▓рд┐рдП рдЯреНрд░реЗрд╕рд░рдЖрдЙрдЯ рдЪрд▓рд╛рддрд╛ рд╣реИ рдФрд░ рдПрдХрд▓ рд╡рд┐рдВрдбреЛ рдореЗрдВ рдкрд░рд┐рдгрд╛рдо рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рддрд╛ рд╣реИред рдЖрдк рддреАрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП рддрддреНрд╡реЛрдВ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдиреЗрд╡рд┐рдЧреЗрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЬрдм рдЖрдк рдПрдВрдЯрд░ рджрдмрд╛рддреЗ рд╣реИрдВ, рддреЛ рдиреАрдЪреЗ рдХреА рд╡рд┐рдВрдбреЛ рдореЗрдВ рдЗрд╕ рдЖрдИрдкреА рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдХрд╛рд░реА рджрд┐рдЦрд╛рдИ рдЬрд╛рдПрдЧреАред Esc рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░рдиреЗ рд╕реЗ рдкреНрд░реЛрдЧреНрд░рд╛рдо рд╕рдорд╛рдкреНрдд рд╣реЛ рдЬрд╛рдПрдЧрд╛ред

рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд╕рд╛рдордЧреНрд░реА
 <?php //    define("ESCAPE_KEY", 27); define("ENTER_KEY", 13); //   $tr_return = traceroute("www.zend.com"); array_shift($tr_return); $ncurses_session = ncurses_init(); $main = ncurses_newwin(0, 0, 0, 0); //   ncurses_getmaxyx($main, $lines, $columns); ncurses_border(0, 0, 0, 0, 0, 0, 0, 0); //    ncurses_attron(NCURSES_A_REVERSE); ncurses_mvaddstr(0,1, "Traceroute example"); ncurses_attroff(NCURSES_A_REVERSE); //  ,      ... $lower_frame_window = ncurses_newwin ($lines-14, $columns-3, 13, 1); ncurses_wborder($lower_frame_window, 0,0, 0,0, 0,0, 0,0); //  $lower_main_window = ncurses_newwin ($lines - 16, $columns-5, 15, 2); $main_list_window = ncurses_newwin (12, $columns-3, 1, 1); ncurses_wborder($main_list_window, 0,0, 0,0, 0,0, 0,0); //  ncurses_refresh(); $currently_selected = 0; while(true) { for($a=0; $a < count($tr_return); $a++){ $out = $tr_return[$a]; if($currently_selected == intval($a)) { ncurses_wattron($main_list_window,NCURSES_A_REVERSE); ncurses_mvwaddstr ($main_list_window, 1+$a, 1, $out); ncurses_wattroff($main_list_window,NCURSES_A_REVERSE); } else { ncurses_mvwaddstr ($main_list_window, 1+$a, 1, $out); } } ncurses_move(-1,1); //      ncurses_wrefresh($lower_frame_window); ncurses_wrefresh($lower_main_window); //   ncurses_wrefresh($main_list_window); //    $y = ncurses_getch($lower_main_window); if ($y == ENTER_KEY) { $newout = explode(" ", trim($tr_return[$currently_selected])); $rwhois_return = rwhois($newout[2]); foreach ($rwhois_return as $n => $l) { ncurses_mvwaddstr($lower_main_window, $n - 1, 1, $l); } } elseif($y == ESCAPE_KEY) { ncurses_end(); exit; } elseif ($y == NCURSES_KEY_UP) { $currently_selected--; if ($currently_selected < 0) $currently_selected = 0; } elseif($y == NCURSES_KEY_DOWN) { $currently_selected++; if ($currently_selected >= count($tr_return)) $currently_selected = count($tr_return)-1; } } //       function traceroute($address) { exec("traceroute -n -m 10 $address", $trreturn); return $trreturn; } // reverse whois function rwhois($query) { $fp = fsockopen ("rwhois.arin.net", 4321, $errno, $errstr, 30); if (!$fp) { $ret[] = "$errstr ($errno)\n"; } else { fputs($fp, "$query\r\n"); while (!feof($fp)) { $back = trim(fgets ($fp, 256)); if (empty($back) || stripos($back, ':') === false || substr($back, 0, 1) == '#') continue; $ret[] = $back; }//wend fclose ($fp); } return $ret; } 


рдирд┐рд╖реНрдХрд░реНрд╖ рдореЗрдВ


рдЙрдкрд░реЛрдХреНрдд рдХреЛрдб рдХрд╛рдлреА рд╕рд░рд▓ рд╣реИ рдФрд░ ncurses рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЖрдкрдХреЗ рдЖрд╡реЗрджрди рдХреЗ рд▓рд┐рдП рдЖрдзрд╛рд░ рдХреЗ рд░реВрдк рдореЗрдВ рдХрд╛рдо рдХрд░ рд╕рдХрддрд╛ рд╣реИред

рд╣рдордиреЗ рдорд╛рдЙрд╕, рд░рдВрдЧреЛрдВ рдФрд░ рдХрдИ рдЕрдиреНрдп рдЖрдЙрдЯрдкреБрдЯ рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рдЙрдкрдпреЛрдЧ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдирд╣реАрдВ рдХрд┐рдпрд╛ред

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

 /** Creates an ncurses window that is write-safe on the left-hand side of the screen * @param integer $size is how wide it will be * @return window handle of inner window. */ function left_window($size=15){ global $fullscreen; ncurses_getmaxyx($fullscreen, $MAX_Y, $MAX_X); $c = ncurses_newwin ($MAX_Y-2 ,$size, 1, 1); ncurses_wborder($c,0,0, 0,0, 0,0, 0,0); // border it // now create window overtop the other just // slightly smaller so that we won't write over // the border. $d = ncurses_newwin ($MAX_Y-4 ,$size-2, 1+1, 2); ncurses_wrefresh($c); // show it ncurses_wrefresh($d); return $d; } # # creates an upper-right window # function upperr_window($size=15){ global $fullscreen; ncurses_getmaxyx($fullscreen, $MAX_Y, $MAX_X); $c = ncurses_newwin ($size ,$size, 1, $MAX_X-($size+1)); ncurses_wborder($c,0,0, 0,0, 0,0, 0,0); // border it ncurses_wrefresh($c); // show it return $c; } 


рдПрдХ рдЕрдЪреНрдЫреА рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рд╣реИ!

рдЙрдкрдпреЛрдЧреА рд▓рд┐рдВрдХ



рдЕрдиреБрд╡рд╛рджрдХ рд╕реЗ

Ncurses рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдЗрдВрд╕реНрдЯреЙрд▓ рдХрд░реЗрдВ
  1. Pecl рд╕реНрдерд╛рдкрд┐рдд рдХрд░реЗрдВред Ubuntu рдореЗрдВ php5-dev рдкреИрдХреЗрдЬ, рдЖрд░реНрдХ рдореЗрдВ php-pear
  2. рдПрдХреНрд╕рдЯреЗрдВрд╢рди рд╕реНрд╡рдпрдВ рд╕реНрдерд╛рдкрд┐рдд рдХрд░реЗрдВ: pecl install ncurses ( pecl install ncurses рдЕрдзрд┐рдХрд╛рд░, рдЗрд╕рд▓рд┐рдП sudo рдХреЗ рд╕рд╛рде)
  3. рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдХрдиреЗрдХреНрдЯ рдХрд░реЗрдВред рдЕрдкрдиреЗ php.ini рдореЗрдВ рд▓рд╛рдЗрди "рдПрдХреНрд╕рдЯреЗрдВрд╢рди = ncurses.so" рдЬреЛрдбрд╝реЗрдВ

рдореВрд▓ рд▓реЗрдЦ: devzone.zend.com/173/use-ncurses-in-php
рдХреГрдкрдпрд╛ рдкреАрдПрдо рдореЗрдВ рдЯрд╛рдЗрдкреЛ рдХреА рд░рд┐рдкреЛрд░реНрдЯ рдХрд░реЗрдВ

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


All Articles