phpDaemon рдФрд░ runkit: рдПрдХ рдирдпрд╛ рд╕реНрддрд░

рдЖрдЬ рдореИрдВ рдЖрдкрдХреЛ рдирдП рд╕реНрд╡рд╛рджрд┐рд╖реНрдЯ phpDaemon рдЙрдкрд╣рд╛рд░реЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрддрд╛рдКрдВрдЧрд╛, рдЬрд┐рдирдореЗрдВ рд░рдирдХрд┐рдЯ PHP рдореЙрдбреНрдпреВрд▓ рджреНрд╡рд╛рд░рд╛ рдкреНрд░рджрд╛рди рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред



рдореБрдЭреЗ рдпрд╣ рдмрддрд╛рддреЗ рд╣реБрдП рдЦреБрд╢реА рд╣реЛ рд░рд╣реА рд╣реИ рдХрд┐ phpDaemon рдореЗрдВ рдХреЛрдб рд╢реИрд▓реА рдХреЛ рдЕрдзрд┐рдХрд╛рдВрд╢ рд╕реНрдерд▓реАрдп рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рдХреА рдкреНрд░рд╛рдердорд┐рдХрддрд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдЕрдиреБрдХреВрд▓рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рди рдХрд┐ рдХреЗрд╡рд▓ рдХрдареЛрд░ рдПрд▓рд┐рдпрдВрд╕ рдХреЛред рдЗрд╕ рд╕рд┐рд▓реНрдЯреНрд░реЛрдЪ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рджред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдХреЛрдб рдХреА рд╢реИрд▓реА рдФрд░ рдкрдардиреАрдпрддрд╛ рдкрд░ рдЯрд┐рдкреНрдкрдгреА рдЕрдм рдкрд░реНрдпрд╛рдкреНрдд рд░реВрдк рд╕реЗ рдорд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИред





рд░рдирдХрд┐рдЯ рдХрд╣рд╛рдиреА



PECL / рд░рдирдХрд┐рдЯ рдПрдХ рдмрд╣реБрдд рд╣реА рдЙрд▓реНрд▓реЗрдЦрдиреАрдп PHP рдореЙрдбреНрдпреВрд▓ рд╣реИ, рдЬрд┐рд╕рдХреА рдХрд╣рд╛рдиреА рдорд╣рд┐рд▓рд╛ рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рд╕рд╛рд░рд╛ рдЧреЛрдЕрд▓реНрдорди рдиреЗ рдЕрдЧрд╕реНрдд 2005 рдореЗрдВ рд╡рд╛рдкрд╕ рд░рдЦреА рдереАред рдЗрд╕рдХрд╛ рдЙрджреНрджреЗрд╢реНрдп рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдирд┐рд╖реНрдкрд╛рджрди рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдореЗрдВ рд╕реНрдерд┐рд░рд╛рдВрдХ, рдкреБрдирд░реНрдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд╛рд░реНрдпреЛрдВ рдФрд░ рдХрдХреНрд╖рд╛рдУрдВ рдХреЛ рдмрджрд▓рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдирд╛ рд╣реИ, рдФрд░ PHP рдХреЗ рдХрд╛рд▓реЗ рдЬрд╛рджреВ рдореЗрдВ рдЕрдиреНрдп рдЬреЛрдбрд╝рддреЛрдбрд╝ рдХрд░рдирд╛ рд╣реИ ...

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

рд╣рдорд╛рд░реЗ рд╣рдорд╡рддрди рджрд┐рдорд┐рддреНрд░реА рдЬрд╝реЗрдиреЛрд╡рд┐рдЪ ( dzenovich ) рдиреЗ рдЙрдиреНрд╣реЗрдВ рдПрдХ рдирдпрд╛ рдЬреАрд╡рди рджрд┐рдпрд╛, github.com/zenovich/runkit рдкрд░ : рд░рдирдХрд┐рдЯ рдЬреЛ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ!



рдордХреНрдЦреА рдкрд░ рдЕрдкрдбреЗрдЯ рдХреЛрдб



рдЗрд╕рд╕реЗ рдкрд╣рд▓реЗ, рдЬрдм --auto-reload = 5s рд╡рд┐рдХрд▓реНрдк рдХреЛ phpDaemon рдореЗрдВ рдЪрд╛рд▓реВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рдбреЗрдорди рдиреЗ рд╣рд░ 5 рд╕реЗрдХрдВрдб рдореЗрдВ рд╕рднреА рдХрдиреЗрдХреНрдЯреЗрдб PHP рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреА рд╕рдВрд╢реЛрдзрди рддрд┐рдерд┐рдпреЛрдВ рдХреА рдЬрд╛рдБрдЪ рдХреА, рдФрд░ рдЙрдиреНрд╣реЗрдВ рдмрджрд▓рддреЗ рд╕рдордп, рдпрд╣ рдПрдХ рд╕рд╣рдЬ рдкреБрдирд░рд╛рд░рдВрдн рдореЗрдВ рдЪрд▓рд╛ рдЧрдпрд╛ред рдЕрдм рдмрд╕ рд╕рдХреНрд╖рдо рдХрд░реЗрдВ - рдСрдЯреЛ-рд░рд┐рдЗрдореНрдкреЛрд░реНрдЯ рдФрд░ рдПрдХ рд╕реБрдЪрд╛рд░реВ рдкреБрдирд░рд╛рд░рдВрдн рдХреЗ рдмрдЬрд╛рдп, рд╕рдВрд╢реЛрдзрд┐рдд рдлрд╝рд╛рдЗрд▓ рд╕реАрдзреЗ рд▓рд╛рдЗрд╡ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдореЗрдВ рдЖрдпрд╛рдд рдХреА рдЬрд╛рдПрдЧреАред рдпрд╣ рдЬреАрд╡рди рдХреЛ рдмрд╣реБрдд рд╕рд░рд▓ рдХрд░рддрд╛ рд╣реИ, рдореБрдЭреЗ рдХрд╣рдирд╛ рд╣реЛрдЧрд╛ред рджрд┐рдорд┐рддреНрд░реА рдЬрд╝реЗрдиреЛрд╡рд┐рдЪ рдХреЗ рд▓рд┐рдП рдЗрд╕рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж! (рдФрд░ рдПрдХ рдЫреЛрдЯреЗ рд╕реЗ рдореЗрд░реЗ рд▓рд┐рдП)ред



Runkit_Sandbox



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



$sandbox = new Runkit_Sandbox(array( 'safe_mode' => TRUE, .... 'output_handler' => array($this,'out') )); $sandbox->call_user_func(function() { echo "Hello World!"; });
      
      







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



рдУрд╡рд░рд╕реАрдбрд┐рдВрдЧ рдиреЗрдЯрд┐рд╡ PHP рдлрд╝рдВрдХреНрд╢рдВрд╕



Runkit рдЖрдкрдХреЛ рди рдХреЗрд╡рд▓ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛-рдкрд░рд┐рднрд╛рд╖рд┐рдд, рдмрд▓реНрдХрд┐ рдореВрд▓ PHP рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдлрд┐рд░ рд╕реЗ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рд╡рд░реНрддрдорд╛рди рдореЗрдВ phpDaemon рд╣реЗрдбрд░ рдХреЛ рдУрд╡рд░рд▓реЛрдб рдХрд░ рд░рд╣рд╛ рд╣реИ () рдФрд░ register_shutdown_function () рдФрд░ рд╡рд░реНрддрдорд╛рди рдЕрдиреБрд░реЛрдз рдХреЗ рд╕рдВрдмрдВрдзрд┐рдд рддрд░реАрдХреЛрдВ рдХреЛ рдХреЙрд▓ рдХреЛ рдирд┐рд░реНрджреЗрд╢рд┐рдд рдХрд░ рд░рд╣рд╛ рд╣реИред



Create_function () рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд╕рд╛рде рдПрдХ рдЕрд▓рдЧ рдХрд╣рд╛рдиреА рд╣реИред рд╢рд╛рдпрдж рдХрд┐рд╕реА рдХреЛ рдЗрд╕ рд╕рдорд╛рд░реЛрд╣ рдХреА рдкреГрд╖реНрдарднреВрдорд┐ рдХрд╛ рдкрддрд╛ рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдпрд╣ рд╣реИ:

 function create_function($args,$code) { static $c = 0; $name = "\x00lambda_".$c++; eval('function '.$name.'('.$args.') {'.$code.'}'); return $name; }
      
      





рдпрд╣реА рд╣реИ, рдпрд╣ рд╕рдмрд╕реЗ рд╕рд╛рдорд╛рдиреНрдп рдФрд░ рд╕рд╛рдзрд╛рд░рдг рдлрд╝рдВрдХреНрд╢рди рдмрдирд╛рддрд╛ рд╣реИ рдФрд░ рдПрдХ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреЗ рд░реВрдк рдореЗрдВ рдЕрдкрдирд╛ рдирд╛рдо рджреЗрддрд╛ рд╣реИред рдмреЗрд╢рдХ, рдЕрдирд╛рд╡рд╢реНрдпрдХ рд▓рдВрдмреЛрджрд░ рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рд╣рдЯрд╛рдиреЗ рдХрд╛ рдХреЛрдИ рд╕рд╡рд╛рд▓ рд╣реА рдирд╣реАрдВ рд╣реИ, рд╡реЗ рд▓рд┐рдкрд┐ рдХреА рдореГрддреНрдпреБ рддрдХ рдЬреАрддреЗ рд╣реИрдВред рдореИрдВрдиреЗ рдЦреБрдж рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдкрд░ рдзреНрдпрд╛рди рдирд╣реАрдВ рджрд┐рдпрд╛ рдореИрдВ рд▓рдВрдмреЗ рд╕рдордп рд╕реЗ create_function рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░ рд░рд╣рд╛ рдерд╛, рд▓реЗрдХрд┐рди рдЗрд▓рд┐рдпрд╛ рдХреИрдВрдЯрд░ ( рдПрд▓реНрдЧреЛ ) рдиреЗ рдЕрдкрдиреЗ рд▓реЗрдЦ рдореЗрдВ (True FastGGI for PHP - рдорд╛рдЗрдЧреНрд░реЗрд╢рди рдФрд░ рдкрд░реАрдХреНрд╖рдг) рдЗрд╕ рдкрд░ рдзреНрдпрд╛рди рдЖрдХрд░реНрд╖рд┐рдд рдХрд┐рдпрд╛ рдФрд░ рдЕрдиреБрд░реЛрдз рдХреЗ рдирд┐рд╖реНрдкрд╛рджрди рдХреЗ рджреМрд░рд╛рди рдмрдирд╛рдП рдЧрдП рд╕рднреА рд▓рдВрдмрд░ рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рдирд╛рдо рдпрд╛рдж рд░рдЦрдиреЗ рдФрд░ рдЕрдВрдд рдореЗрдВ рдЗрд╕реЗ рд╕рд╛рдлрд╝ рдХрд░рдиреЗ рдХрд╛ рд╕реБрдЭрд╛рд╡ рджрд┐рдпрд╛ред рдпрд╣ рд╕рдорд╛рдзрд╛рди рдЕрдкрдиреЗ рдХрд╛рд░реНрдп рдХреЗ рд▓рд┐рдП рдЙрдкрдпреБрдХреНрдд рд╣реИ, рд▓реЗрдХрд┐рди рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░ phpDaemon рдХреЗ рд▓рд┐рдП рдпрд╣ рд╕реНрдкрд╖реНрдЯ рдХрд╛рд░рдгреЛрдВ рдХреЗ рд▓рд┐рдП рдЕрд╕реНрд╡реАрдХрд╛рд░реНрдп рд╣реИред

рдЗрд╕рд▓рд┐рдП, рдореИрдВ рдПрдХ рдФрд░ рд╕рдорд╛рдзрд╛рди рдХреЗ рд╕рд╛рде рдЖрдпрд╛, рдореЗрд░реА рд░рд╛рдп рдореЗрдВ рдЕрдзрд┐рдХ рд╕реБрд░реБрдЪрд┐рдкреВрд░реНрдг рдФрд░ рд╕рд╛рд░реНрд╡рднреМрдорд┐рдХред рдореЗрд░рд╛ create_function () рдПрдХ рд╡рд┐рдирд╛рд╢рдХрд╛рд░реА рд▓реИрдореНрдмреНрдбрд╛ рдСрдмреНрдЬреЗрдХреНрдЯ рд▓реМрдЯрд╛рддрд╛ рд╣реИ, рдЬрд┐рд╕рдХреЗ рд╡рд┐рдирд╛рд╢ рдореЗрдВ рд▓реИрдореНрдмрдбрд╛ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рд░рдирдХрд┐рдЯ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╣рдЯрд╛ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдПрдХ LRU рдХреИрд╢ рд╣реИ рдЬреЛ рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рд╕рдВрдХрд▓рд┐рдд рд▓реИрдореНрдмреНрдбрд╛ рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рддрд╛ рд╣реИ, рдЬреЛ рд╕рдВрдХрд▓рди рд▓рд╛рдЧрдд рдХреЛ рдХрдо рдХрд░рддрд╛ рд╣реИред рд╕реНрд░реЛрдд рдХреЛрдб



рдпрджрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ рдХреЛрдИ рд╡рд┐рдЪрд╛рд░ рд╣реИ рдХрд┐ рдЕрдиреНрдп рд╕реБрд╡рд┐рдзрд╛рдУрдВ рдореЗрдВ рдХреНрдпрд╛ рд╕реБрдзрд╛рд░ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рддреЛ рд╣рдореЗрдВ рд╕реБрдирдХрд░ рдЦреБрд╢реА рд╣реЛрдЧреАред



рдЕрдВрдд



рдЦреИрд░, рд╢рд╛рдпрдж рдпрд╣ рд╕рдм рд╣реИред рдзреНрдпрд╛рди рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдк рд╕рднреА рдХрд╛ рдзрдиреНрдпрд╡рд╛рджред



рдЧрд┐рддреБрдм : рдХрд╛рдХрд╕рд░рдкреЛрдо / phpdaemon

рдореБрдЦрдкреГрд╖реНрда: http://phpdaemon.net

рд╕рдореВрд╣: group.google.com/group/phpdaemon



All Articles