PHP рдмреИрдХрдПрдВрдб рдХреЛ рд░реЗрдбрд┐рд╕ рд╕реНрдЯреНрд░реАрдо рдмрд╕ рдореЗрдВ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рдирд╛ рдФрд░ рдПрдХ рдлреНрд░реЗрдорд╡рд░реНрдХ-рд╕реНрд╡рддрдВрддреНрд░ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдЪреБрдирдирд╛

PHP рдмреИрдХрдПрдВрдб рдХреЛ рд░реЗрдбрд┐рд╕ рд╕реНрдЯреНрд░реАрдо рдмрд╕ рдореЗрдВ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рдирд╛ рдФрд░ рдПрдХ рдлреНрд░реЗрдорд╡рд░реНрдХ-рд╕реНрд╡рддрдВрддреНрд░ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдЪреБрдирдирд╛

рдкреНрд░рд╕реНрддрд╛рд╡рдирд╛

рдореЗрд░реА рд╡реЗрдмрд╕рд╛рдЗрдЯ, рдЬрд┐рд╕реЗ рдореИрдВ рд╢реМрдХ рдХреЗ рддреМрд░ рдкрд░ рдЪрд▓рд╛рддрд╛ рд╣реВрдВ, рджрд┐рд▓рдЪрд╕реНрдк рд╣реЛрдо рдкреЗрдЬ рдФрд░ рд╡реНрдпрдХреНрддрд┐рдЧрдд рд╕рд╛рдЗрдЯреЛрдВ рдХреЛ рд╣реЛрд╕реНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдбрд┐рдЬрд╝рд╛рдЗрди рдХреА рдЧрдИ рд╣реИред рдореЗрд░реА рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдпрд╛рддреНрд░рд╛ рдХреА рд╢реБрд░реБрдЖрдд рдореЗрдВ рд╣реА рдЗрд╕ рд╡рд┐рд╖рдп рдореЗрдВ рдореЗрд░реА рд░реБрдЪрд┐ рд╣реЛрдиреЗ рд▓рдЧреА рдереА; рдЙрд╕ рд╕рдордп рдореИрдВ рдРрд╕реЗ рдорд╣рд╛рди рдкреЗрд╢реЗрд╡рд░реЛрдВ рдХреЛ рдкрд╛рдХрд░ рд░реЛрдорд╛рдВрдЪрд┐рдд рд╣реЛ рдЧрдпрд╛ рдерд╛ рдЬреЛ рдЕрдкрдиреЗ рдмрд╛рд░реЗ рдореЗрдВ, рдЕрдкрдиреЗ рд╢реМрдХ рдФрд░ рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд▓рд┐рдЦрддреЗ рдереЗред рдЙрдиреНрд╣реЗрдВ рд╕реНрд╡рдпрдВ рдЦреЛрдЬрдиреЗ рдХреА рдЖрджрдд рдЖрдЬ рднреА рдмрдиреА рд╣реБрдИ рд╣реИ: рд▓рдЧрднрдЧ рд╣рд░ рд╡реНрдпрд╛рд╡рд╕рд╛рдпрд┐рдХ рдФрд░ рдмрд╣реБрдд рдЕрдзрд┐рдХ рд╡реНрдпрд╛рд╡рд╕рд╛рдпрд┐рдХ рд╕рд╛рдЗрдЯ рдкрд░ рдирд╣реАрдВ, рдореИрдВ рд▓реЗрдЦрдХреЛрдВ рдХреЗ рд▓рд┐рдВрдХ рдХреА рддрд▓рд╛рд╢ рдореЗрдВ рдкрд╛рдж рд▓реЗрдЦ рдореЗрдВ рджреЗрдЦрдирд╛ рдЬрд╛рд░реА рд░рдЦрддрд╛ рд╣реВрдВред

рд╡рд┐рдЪрд╛рд░ рдХрд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди

рдкрд╣рд▓рд╛ рд╕рдВрд╕реНрдХрд░рдг рдореЗрд░реА рдирд┐рдЬреА рд╡реЗрдмрд╕рд╛рдЗрдЯ рдкрд░ рд╕рд┐рд░реНрдл рдПрдХ HTML рдкреЗрдЬ рдерд╛, рдЬрд╣рд╛рдВ рдореИрдВрдиреЗ рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рдХреЗ рд╕рд╛рде рд▓рд┐рдВрдХ рдХреЛ рдПрдХ рдпреВрдПрд▓ рд╕реВрдЪреА рдореЗрдВ рдбрд╛рд▓рд╛ рдерд╛ред рдХреБрдЫ рд╕рдордп рдореЗрдВ 20 рдкреЗрдЬ рдЯрд╛рдЗрдк рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рдореБрдЭреЗ рд▓рдЧрдиреЗ рд▓рдЧрд╛ рдХрд┐ рдпрд╣ рдмрд╣реБрдд рдкреНрд░рднрд╛рд╡реА рдирд╣реАрдВ рд╣реИ рдФрд░ рдореИрдВрдиреЗ рдЗрд╕ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЛ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░рдиреЗ рдХрд╛ рдирд┐рд░реНрдгрдп рд▓рд┐рдпрд╛ред рд╕реНрдЯреИрдХрдУрд╡рд░рдлрд╝реНрд▓реЛ рдкрд░, рдореИрдВрдиреЗ рджреЗрдЦрд╛ рдХрд┐ рдмрд╣реБрдд рд╕реЗ рд▓реЛрдЧ рдЕрдкрдиреА рдкреНрд░реЛрдлрд╝рд╛рдЗрд▓ рдореЗрдВ рд╕рд╛рдЗрдЯреЛрдВ рдХреЛ рдЗрдВрдЧрд┐рдд рдХрд░рддреЗ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рдореИрдВрдиреЗ php рдореЗрдВ рдПрдХ рдкрд╛рд░реНрд╕рд░ рд▓рд┐рдЦрд╛, рдЬреЛ рдкреНрд░реЛрдлрд╝рд╛рдЗрд▓ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЪрд▓рд╛ рдЧрдпрд╛, рдкрд╣рд▓реЗ рд╕реЗ рд╢реБрд░реВ (рдЖрдЬ рддрдХ SO рдкрд░ рдкрддреЗ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рд╣реИрдВ: `/users/1` ), рд╡рд╛рдВрдЫрд┐рдд рдЯреИрдЧ рд╕реЗ рд▓рд┐рдВрдХ рдирд┐рдХрд╛рд▓реЗ рдФрд░ рдЗрд╕реЗ SQLite рдореЗрдВ рдЬреЛрдбрд╝рд╛ред

рдЗрд╕реЗ рджреВрд╕рд░рд╛ рд╕рдВрд╕реНрдХрд░рдг рдХрд╣рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ: SQLite рддрд╛рд▓рд┐рдХрд╛ рдореЗрдВ рд╣рдЬрд╛рд░реЛрдВ URL рдХрд╛ рд╕рдВрдЧреНрд░рд╣, рдЬрд┐рд╕рдиреЗ html рдореЗрдВ рд╕реНрдерд┐рд░ рд╕реВрдЪреА рдХреЛ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрд┐рдд рдХрд░ рджрд┐рдпрд╛ред рдореИрдВрдиреЗ рдЗрд╕ рд╕реВрдЪреА рдкрд░ рдПрдХ рд╕рд░рд▓ рдЦреЛрдЬ рдХреАред рдХреНрдпреЛрдВрдХрд┐ рдХреЗрд╡рд▓ рдпреВрдЖрд░рдПрд▓ рдереЗ, рдлрд┐рд░ рдЦреЛрдЬ рдмрд╕ рдЙрди рдкрд░ рдЖрдзрд╛рд░рд┐рдд рдереАред

рдЗрд╕ рд╕реНрддрд░ рдкрд░ рдореИрдВрдиреЗ рдЗрд╕ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЛ рдЫреЛрдбрд╝ рджрд┐рдпрд╛ рдФрд░ рд▓рдВрдмреЗ рд╕рдордп рдХреЗ рдмрд╛рдж рдЗрд╕рдореЗрдВ рд╡рд╛рдкрд╕ рд▓реМрдЯрд╛ред рдЗрд╕ рд╕реНрддрд░ рдкрд░, рдореЗрд░рд╛ рдХрд╛рд░реНрдп рдЕрдиреБрднрд╡ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рддреАрди рд╕рд╛рд▓ рд╕реЗ рдЕрдзрд┐рдХ рдХрд╛ рдерд╛ рдФрд░ рдореБрдЭреЗ рд▓рдЧрд╛ рдХрд┐ рдореИрдВ рдХреБрдЫ рдФрд░ рдЧрдВрднреАрд░ рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЕрдкреЗрдХреНрд╖рд╛рдХреГрдд рдирдИ рддрдХрдиреАрдХреЛрдВ рдореЗрдВ рдорд╣рд╛рд░рдд рд╣рд╛рд╕рд┐рд▓ рдХрд░рдиреЗ рдХреА рдмрд╣реБрдд рдЗрдЪреНрдЫрд╛ рдереАред

рдЖрдзреБрдирд┐рдХ рд╕рдВрд╕реНрдХрд░рдг

рдкрд░рд┐рдпреЛрдЬрдирд╛ рдбреЙрдХрд░ рдореЗрдВ рддреИрдирд╛рдд рдХрд┐рдпрд╛ рдЧрдпрд╛, рдбреЗрдЯрд╛рдмреЗрд╕ рдХреЛ mongoDb рдореЗрдВ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░ рджрд┐рдпрд╛ рдЧрдпрд╛, рдФрд░ рд╣рд╛рд▓ рд╣реА рдореЗрдВ, рдореВрд▓реА рдХреЛ рдЬреЛрдбрд╝рд╛ рдЧрдпрд╛, рдЬреЛ рдкрд╣рд▓реЗ рд╕рд┐рд░реНрдл рдХреИрд╢рд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рдерд╛ред PHP рдорд╛рдЗрдХреНрд░реЛрдлрд╝реНрд░реЗрдорд╡рд░реНрдХ рдореЗрдВ рд╕реЗ рдПрдХ рдХреЛ рдЖрдзрд╛рд░ рдХреЗ рд░реВрдк рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

рд╕рдорд╕реНрдпрд╛

рдирдИ рд╕рд╛рдЗрдЯреЗрдВ рдПрдХ рдХрдВрд╕реЛрд▓ рдХрдорд╛рдВрдб рджреНрд╡рд╛рд░рд╛ рдЬреЛрдбрд╝реА рдЬрд╛рддреА рд╣реИрдВ рдЬреЛ рд╕рдордХрд╛рд▓рд┐рдХ рд░реВрдк рд╕реЗ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХрд╛рд░реНрдп рдХрд░рддреА рд╣реИ:

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

рдпрд╣ рдХреЗрд╡рд▓ рд╕рд╛рдЗрдЯреЛрдВ рдХреЛ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рдиреЗ рдФрд░ рдЙрдиреНрд╣реЗрдВ рдПрдХ рд╕реВрдЪреА рдореЗрдВ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рдерд╛:

PHP рдмреИрдХрдПрдВрдб рдХреЛ рд░реЗрдбрд┐рд╕ рд╕реНрдЯреНрд░реАрдо рдмрд╕ рдореЗрдВ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рдирд╛ рдФрд░ рдПрдХ рдлреНрд░реЗрдорд╡рд░реНрдХ-рд╕реНрд╡рддрдВрддреНрд░ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдЪреБрдирдирд╛

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

рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ, рд╕рдм рдХреБрдЫ рд╕рдордХрд╛рд▓рд┐рдХ рд░реВрдк рд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдФрд░ рд╡реЗрдм рдкрджреНрдзрддрд┐ рдореЗрдВ рдЖрдк рдмрд╕ рдпреВрдЖрд░рдПрд▓ рдХреЛ рд╕рд╣реЗрдЬ рд╕рдХрддреЗ рд╣реИрдВ рддрд╛рдХрд┐ рд░рд╛рдХреНрд╖рд╕реА рдбреЗрдореЙрди рд╕реВрдЪреА рд╕реЗ рдпреВрдЖрд░рдПрд▓ рдХреЗ рд▓рд┐рдП рд╕рднреА рдХрд╛рд░реНрдп рдХрд░ рд╕рдХреЗред рд▓реЗрдХрд┐рди рдлрд┐рд░ рднреА, рдпрд╣рд╛рдБ рднреА "рдХрддрд╛рд░" рд╢рдмреНрдж рд╕реНрд╡рдпрдВ рд╣реА рд╕реБрдЭрд╛рддрд╛ рд╣реИред рдФрд░ рдпрджрд┐ рдПрдХ рдХрддрд╛рд░ рд▓рд╛рдЧреВ рдХреА рдЬрд╛рддреА рд╣реИ, рддреЛ рд╕рднреА рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдФрд░ рдХрдо рд╕реЗ рдХрдо рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рд░реВрдк рд╕реЗ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

рд╕рдорд╛рдзрд╛рди

рдХрддрд╛рд░реЗрдВ рд▓рд╛рдЧреВ рдХрд░реЗрдВ рдФрд░ рд╕рднреА рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЗрд╡реЗрдВрдЯ-рд╕рдВрдЪрд╛рд▓рд┐рдд рдкреНрд░рдгрд╛рд▓реА рдмрдирд╛рдПрдВред рдФрд░ рдореИрдВ рдХрд╛рдлреА рд╕рдордп рд╕реЗ рд░реЗрдбрд┐рд╕ рд╕реНрдЯреНрд░реАрдореНрд╕ рдХреЛ рдЖрдЬрд╝рдорд╛рдирд╛ рдЪрд╛рд╣ рд░рд╣рд╛ рдерд╛ред

PHP рдореЗрдВ Redis рд╕реНрдЯреНрд░реАрдо рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛

рдХреНрдпреЛрдВрдХрд┐ рдЪреВрдВрдХрд┐ рдореЗрд░рд╛ рдврд╛рдВрдЪрд╛ рддреАрди рджрд┐рдЧреНрдЧрдЬ рд╕рд┐рдореНрдлрдиреА, рд▓рд╛рд░рд╡реЗрд▓, рд╡рд╛рдИрдЖрдИ рдореЗрдВ рд╕реЗ рдПрдХ рдирд╣реАрдВ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдореИрдВ рдПрдХ рд╕реНрд╡рддрдВрддреНрд░ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдвреВрдВрдврдирд╛ рдЪрд╛рд╣реВрдВрдЧрд╛ред рд▓реЗрдХрд┐рди, рдЬреИрд╕рд╛ рдХрд┐ рдпрд╣ рдирд┐рдХрд▓рд╛ (рдкрд╣рд▓реА рдкрд░реАрдХреНрд╖рд╛ рдореЗрдВ), рд╡реНрдпрдХреНрддрд┐рдЧрдд рдЧрдВрднреАрд░ рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХреЛ рдвреВрдВрдврдирд╛ рдЕрд╕рдВрднрд╡ рд╣реИред рдХрддрд╛рд░реЛрдВ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рд╣рд░ рдЪреАрдЬ рдпрд╛ рддреЛ рдкрд╛рдВрдЪ рд╕рд╛рд▓ рдкрд╣рд▓реЗ рдХреА рдЧрдИ 3 рдкреНрд░рддрд┐рдмрджреНрдзрддрд╛рдУрдВ рд╕реЗ рдПрдХ рдкрд░рд┐рдпреЛрдЬрдирд╛ рд╣реИ, рдпрд╛ рдврд╛рдВрдЪреЗ рд╕реЗ рдЬреБрдбрд╝реА рд╣реБрдИ рд╣реИред

рдореИрдВрдиреЗ рд╡реНрдпрдХреНрддрд┐рдЧрдд рдЙрдкрдпреЛрдЧреА рдШрдЯрдХреЛрдВ рдХреЗ рдЖрдкреВрд░реНрддрд┐рдХрд░реНрддрд╛ рдХреЗ рд░реВрдк рдореЗрдВ рд╕рд┐рдореНрдлрдиреА рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╣реБрдд рдХреБрдЫ рд╕реБрдирд╛ рд╣реИ, рдФрд░ рдореИрдВ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЙрдирдореЗрдВ рд╕реЗ рдХреБрдЫ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реВрдВред рдФрд░ рд▓рд╛рд░рд╡реЗрд▓ рдХреА рдХреБрдЫ рдЪреАрдЬреЛрдВ рдХрд╛ рднреА рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдЙрдирдХрд╛ рдУрдЖрд░рдПрдо, рдмрд┐рдирд╛ рдлреНрд░реЗрдорд╡рд░реНрдХ рдХреА рдЙрдкрд╕реНрдерд┐рддрд┐ рдХреЗред

рд╕рд┐рдореНрдлрдиреА/рдореИрд╕реЗрдВрдЬрд░

рдкрд╣рд▓рд╛ рдЙрдореНрдореАрджрд╡рд╛рд░ рддреБрд░рдВрдд рдЖрджрд░реНрд╢ рд▓рдЧрд╛ рдФрд░ рдмрд┐рдирд╛ рдХрд┐рд╕реА рд╕рдВрджреЗрд╣ рдХреЗ рдореИрдВрдиреЗ рдЗрд╕реЗ рд╕реНрдерд╛рдкрд┐рдд рдХрд┐рдпрд╛ред рд▓реЗрдХрд┐рди рд╕рд┐рдореНрдлрдиреА рдХреЗ рдмрд╛рд╣рд░ рдЙрдкрдпреЛрдЧ рдХреЗ рдЙрджрд╛рд╣рд░рдгреЛрдВ рдХреЛ рдЧреВрдЧрд▓ рдкрд░ рдЦреЛрдЬрдирд╛ рдЕрдзрд┐рдХ рдХрдард┐рди рд╣реЛ рдЧрдпрд╛ред рд╕рд╛рд░реНрд╡рднреМрдорд┐рдХ, рдЕрд░реНрдерд╣реАрди рдирд╛рдореЛрдВ рдФрд░ рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рд░реЗрдбрд┐рд╕ рдкрд░ рднреА рдХрдХреНрд╖рд╛рдУрдВ рдХреЗ рдПрдХ рд╕рдореВрд╣ рд╕реЗ рд╕рдВрджреЗрд╢ рднреЗрдЬрдиреЗ рдХреЗ рд▓рд┐рдП рдмрд╕ рдХреЛ рдХреИрд╕реЗ рдЗрдХрдЯреНрдард╛ рдХрд┐рдпрд╛ рдЬрд╛рдП?

PHP рдмреИрдХрдПрдВрдб рдХреЛ рд░реЗрдбрд┐рд╕ рд╕реНрдЯреНрд░реАрдо рдмрд╕ рдореЗрдВ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рдирд╛ рдФрд░ рдПрдХ рдлреНрд░реЗрдорд╡рд░реНрдХ-рд╕реНрд╡рддрдВрддреНрд░ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдЪреБрдирдирд╛

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

рдпрд╣ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рдирд╛ рдХрд┐ рд╕рд┐рдореНрдлрдиреА рд╕реНрд░реЛрддреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХрд┐рд╕реА рд╕рд┐рд╕реНрдЯрдо рдХреЛ рдХреИрд╕реЗ рдЗрдВрд╕реНрдЯреЗрдВрдЯ рдХрд┐рдпрд╛ рдЬрд╛рдП, рдпрд╣ рднреА рдПрдХ рд╕реАрдорд┐рдд рд╕рдордп рд╕реАрдорд╛ рдХреЗ рд▓рд┐рдП рд╕рдмрд╕реЗ рдорд╛рдореВрд▓реА рдХрд╛рдо рдирд╣реАрдВ рд╣реИ:

PHP рдмреИрдХрдПрдВрдб рдХреЛ рд░реЗрдбрд┐рд╕ рд╕реНрдЯреНрд░реАрдо рдмрд╕ рдореЗрдВ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рдирд╛ рдФрд░ рдПрдХ рдлреНрд░реЗрдорд╡рд░реНрдХ-рд╕реНрд╡рддрдВрддреНрд░ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдЪреБрдирдирд╛

рдЗрд╕ рд╕рдм рдореЗрдВ рдЧрд╣рд░рд╛рдИ рд╕реЗ рдЬрд╛рдиреЗ рдФрд░ рдЕрдкрдиреЗ рд╣рд╛рдереЛрдВ рд╕реЗ рдХреБрдЫ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рдореИрдВ рдЗрд╕ рдирддреАрдЬреЗ рдкрд░ рдкрд╣реБрдВрдЪрд╛ рдХрд┐ рдореИрдВ рдХрд┐рд╕реА рддрд░рд╣ рдХреА рдмреИрд╕рд╛рдЦреА рдкрд░ рдХрд╛рдо рдХрд░ рд░рд╣рд╛ рдерд╛ рдФрд░ рдореИрдВрдиреЗ рдХреБрдЫ рдФрд░ рдХрд░рдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛ред

рдкреНрд░рдХрд╛рд╢рд┐рдд/рдХрддрд╛рд░

рдпрд╣ рдкрддрд╛ рдЪрд▓рд╛ рдХрд┐ рдпрд╣ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рд▓рд╛рд░рд╡реЗрд▓ рдЗрдВрдлреНрд░рд╛рд╕реНрдЯреНрд░рдХреНрдЪрд░ рдФрд░ рдЕрдиреНрдп рдирд┐рд░реНрднрд░рддрд╛рдУрдВ рдХреЗ рдПрдХ рд╕рдореВрд╣ рд╕реЗ рдХрд╕рдХрд░ рдЬреБрдбрд╝реА рд╣реБрдИ рдереА, рдЗрд╕рд▓рд┐рдП рдореИрдВрдиреЗ рдЗрд╕ рдкрд░ рдЬреНрдпрд╛рджрд╛ рд╕рдордп рдирд╣реАрдВ рдмрд┐рддрд╛рдпрд╛: рдореИрдВрдиреЗ рдЗрд╕реЗ рд╕реНрдерд╛рдкрд┐рдд рдХрд┐рдпрд╛, рдЗрд╕реЗ рджреЗрдЦрд╛, рдирд┐рд░реНрднрд░рддрд╛рдПрдВ рджреЗрдЦреАрдВ рдФрд░ рдЗрд╕реЗ рд╣рдЯрд╛ рджрд┐рдпрд╛ред

yiisoft/yii2-рдХрддрд╛рд░

рдЦреИрд░, рдпрд╣рд╛рдВ рдирд╛рдо рд╕реЗ рддреБрд░рдВрдд рдпрд╣ рдорд╛рди рд▓рд┐рдпрд╛ рдЧрдпрд╛ рдХрд┐, рдлрд┐рд░ рд╕реЗ, Yii2 рд╕реЗ рдЗрд╕рдХрд╛ рд╕рдЦреНрдд рд╕рдВрдмрдВрдз рд╣реИред рдореБрдЭреЗ рдЗрд╕ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдерд╛ рдФрд░ рдпрд╣ рдмреБрд░рд╛ рдирд╣реАрдВ рдерд╛, рд▓реЗрдХрд┐рди рдореИрдВрдиреЗ рдЗрд╕ рддрдереНрдп рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдирд╣реАрдВ рд╕реЛрдЪрд╛ рдерд╛ рдХрд┐ рдпрд╣ рдкреВрд░реА рддрд░рд╣ рд╕реЗ Yii2 рдкрд░ рдирд┐рд░реНрднрд░ рд╣реИред

рдмрд╛рдХреА

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

рд╕рд┐рдореНрдлрдиреА/рдореИрд╕реЗрдВрдЬрд░, рддрдХрдиреАрдХреА рд╡рд┐рд╡рд░рдг рдкрд░ рд▓реМрдЯреЗрдВ

рдореБрдЭреЗ рдЗрд╕ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдирд╛ рдерд╛ рдФрд░, рдХреБрдЫ рдФрд░ рд╕рдордп рдмрд┐рддрд╛рдиреЗ рдХреЗ рдмрд╛рдж, рдореИрдВ рдРрд╕рд╛ рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛ рдЧрдпрд╛ред рдпрд╣ рдкрддрд╛ рдЪрд▓рд╛ рдХрд┐ рд╕рдм рдХреБрдЫ рдХрд╛рдлреА рд╕рдВрдХреНрд╖рд┐рдкреНрдд рдФрд░ рд╕рд░рд▓ рдерд╛ред рдмрд╕ рдХреЛ рдЗрдВрд╕реНрдЯреЗрдВрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдореИрдВрдиреЗ рдПрдХ рдЫреЛрдЯреА рд╕реА рдлреИрдХреНрдЯреНрд░реА рдмрдирд╛рдИ, рдХреНрдпреЛрдВрдХрд┐... рдореБрдЭреЗ рдХрдИ рдЯрд╛рдпрд░ рдФрд░ рдЕрд▓рдЧ-рдЕрд▓рдЧ рд╣реИрдВрдбрд▓рд░ рд╡рд╛рд▓реЗ рд╣реЛрдиреЗ рдЪрд╛рд╣рд┐рдП рдереЗред

PHP рдмреИрдХрдПрдВрдб рдХреЛ рд░реЗрдбрд┐рд╕ рд╕реНрдЯреНрд░реАрдо рдмрд╕ рдореЗрдВ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рдирд╛ рдФрд░ рдПрдХ рдлреНрд░реЗрдорд╡рд░реНрдХ-рд╕реНрд╡рддрдВрддреНрд░ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдЪреБрдирдирд╛

рдмрд╕ рдХреБрдЫ рдХрджрдо:

  • рд╣рдо рд╕рдВрджреЗрд╢ рд╣реИрдВрдбрд▓рд░ рдмрдирд╛рддреЗ рд╣реИрдВ рдЬреЛ рдЖрд╕рд╛рдиреА рд╕реЗ рдХреЙрд▓ рдХрд░рдиреЗ рдпреЛрдЧреНрдп рд╣реЛрдиреЗ рдЪрд╛рд╣рд┐рдП
  • рд╣рдо рдЙрдиреНрд╣реЗрдВ HandlerDescriptor (рд▓рд╛рдЗрдмреНрд░реЗрд░реА рд╕реЗ рдХрдХреНрд╖рд╛) рдореЗрдВ рд▓рдкреЗрдЯрддреЗ рд╣реИрдВ
  • рд╣рдо рдЗрди "рдбрд┐рд╕реНрдХреНрд░рд┐рдкреНрдЯрд░реНрд╕" рдХреЛ HandlersLocator рдЗрдВрд╕реНрдЯреЗрдВрд╕ рдореЗрдВ рд▓рдкреЗрдЯрддреЗ рд╣реИрдВ
  • MessageBus рдЗрдВрд╕реНрдЯреЗрдВрд╕ рдореЗрдВ HandlersLocator рдЬреЛрдбрд╝рдирд╛
  • рд╣рдо 'рд╕реЗрдВрдбрд░рдЗрдВрдЯрд░рдлреЗрд╕' рдХрд╛ рдПрдХ рд╕реЗрдЯ рд╕реЗрдВрдбрд░реНрд╕рд▓реЛрдХреЗрдЯрд░ рдХреЛ рдкрд╛рд╕ рдХрд░рддреЗ рд╣реИрдВ, рдореЗрд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ 'рд░реЗрдбрд┐рд╕рдЯреНрд░рд╛рдВрд╕рдкреЛрд░реНрдЯ' рдХреНрд▓рд╛рд╕ рдХреЗ рдЙрджрд╛рд╣рд░рдг, рдЬреЛ рдПрдХ рд╕реНрдкрд╖реНрдЯ рддрд░реАрдХреЗ рд╕реЗ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд┐рдП рдЧрдП рд╣реИрдВ
  • MessageBus рдЙрджрд╛рд╣рд░рдг рдореЗрдВ SendersLocator рдЬреЛрдбрд╝рдирд╛

MessageBus рдореЗрдВ рдПрдХ `->dispatch()` рд╡рд┐рдзрд┐ рд╣реИ рдЬреЛ HandlersLocator рдореЗрдВ рдЙрдкрдпреБрдХреНрдд рд╣реИрдВрдбрд▓рд░ рдХреЛ рдвреВрдВрдврддреА рд╣реИ рдФрд░ рдмрд╕ (рд░реЗрдбрд┐рд╕ рд╕реНрдЯреНрд░реАрдо) рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рднреЗрдЬрдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдВрдмрдВрдзрд┐рдд `SenderInterface` рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЙрдиреНрд╣реЗрдВ рд╕рдВрджреЗрд╢ рднреЗрдЬрддреА рд╣реИред

рдХрдВрдЯреЗрдирд░ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдореЗрдВ (рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ php-di), рдЗрд╕ рдкреВрд░реЗ рдмрдВрдбрд▓ рдХреЛ рдЗрд╕ рддрд░рд╣ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:

        CONTAINER_REDIS_TRANSPORT_SECRET => function (ContainerInterface $c) {
            return new RedisTransport(
                $c->get(CONTAINER_REDIS_STREAM_CONNECTION_SECRET),
                $c->get(CONTAINER_SERIALIZER))
            ;
        },
        CONTAINER_REDIS_TRANSPORT_LOG => function (ContainerInterface $c) {
            return new RedisTransport(
                $c->get(CONTAINER_REDIS_STREAM_CONNECTION_LOG),
                $c->get(CONTAINER_SERIALIZER))
            ;
        },
        CONTAINER_REDIS_STREAM_RECEIVER_SECRET => function (ContainerInterface $c) {
            return new RedisReceiver(
                $c->get(CONTAINER_REDIS_STREAM_CONNECTION_SECRET),
                $c->get(CONTAINER_SERIALIZER)
            );
        },
        CONTAINER_REDIS_STREAM_RECEIVER_LOG => function (ContainerInterface $c) {
            return new RedisReceiver(
                $c->get(CONTAINER_REDIS_STREAM_CONNECTION_LOG),
                $c->get(CONTAINER_SERIALIZER)
            );
        },
        CONTAINER_REDIS_STREAM_BUS => function (ContainerInterface $c) {
            $sendersLocator = new SendersLocator([
                AppMessagesSecretJsonMessages::class => [CONTAINER_REDIS_TRANSPORT_SECRET],
                AppMessagesDaemonLogMessage::class => [CONTAINER_REDIS_TRANSPORT_LOG],
            ], $c);
            $middleware[] = new SendMessageMiddleware($sendersLocator);

            return new MessageBus($middleware);
        },
        CONTAINER_REDIS_STREAM_CONNECTION_SECRET => function (ContainerInterface $c) {
            $host = 'bu-02-redis';
            $port = 6379;
            $dsn = "redis://$host:$port";
            $options = [
                'stream' => 'secret',
                'group' => 'default',
                'consumer' => 'default',
            ];

            return Connection::fromDsn($dsn, $options);
        },
        CONTAINER_REDIS_STREAM_CONNECTION_LOG => function (ContainerInterface $c) {
            $host = 'bu-02-redis';
            $port = 6379;
            $dsn = "redis://$host:$port";
            $options = [
                'stream' => 'log',
                'group' => 'default',
                'consumer' => 'default',
            ];

            return Connection::fromDsn($dsn, $options);
        },

рдпрд╣рд╛рдВ рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рд╕реЗрдВрдбрд░реНрд╕рд▓реЛрдХреЗрдЯрд░ рдореЗрдВ рд╣рдордиреЗ рджреЛ рдЕрд▓рдЧ-рдЕрд▓рдЧ рд╕рдВрджреЗрд╢реЛрдВ рдХреЗ рд▓рд┐рдП рдЕрд▓рдЧ-рдЕрд▓рдЧ "рдЯреНрд░рд╛рдВрд╕рдкреЛрд░реНрдЯ" рдЕрд╕рд╛рдЗрди рдХрд┐рдП рд╣реИрдВ, рдЬрд┐рдирдореЗрдВ рд╕реЗ рдкреНрд░рддреНрдпреЗрдХ рдХрд╛ рд╕рдВрдмрдВрдзрд┐рдд рд╕реНрдЯреНрд░реАрдо рд╕реЗ рдЕрдкрдирд╛ рдХрдиреЗрдХреНрд╢рди рд╣реИред

рдореИрдВрдиреЗ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдмрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдПрдХ рджреВрд╕рд░реЗ рдХреЗ рд╕рд╛рде рд╕рдВрдЪрд╛рд░ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рддреАрди рдбреЗрдореЙрди рдХреЗ рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдХреЛ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рддреЗ рд╣реБрдП рдПрдХ рдЕрд▓рдЧ рдбреЗрдореЛ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдмрдирд╛рдпрд╛: https://github.com/backend-university/products/tree/master/products/02-redis-streams-bus.

рд▓реЗрдХрд┐рди рдореИрдВ рдЖрдкрдХреЛ рджрд┐рдЦрд╛рдКрдВрдЧрд╛ рдХрд┐ рдЙрдкрднреЛрдХреНрддрд╛ рдХреЛ рдХреИрд╕реЗ рд╕рдВрд░рдЪрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:

use AppMessagesDaemonLogMessage;
use SymfonyComponentMessengerHandlerHandlerDescriptor;
use SymfonyComponentMessengerHandlerHandlersLocator;
use SymfonyComponentMessengerMessageBus;
use SymfonyComponentMessengerMiddlewareHandleMessageMiddleware;
use SymfonyComponentMessengerMiddlewareSendMessageMiddleware;
use SymfonyComponentMessengerTransportSenderSendersLocator;

require_once __DIR__ . '/../vendor/autoload.php';
/** @var PsrContainerContainerInterface $container */
$container = require_once('config/container.php');

$handlers = [
    DaemonLogMessage::class => [
        new HandlerDescriptor(
            function (DaemonLogMessage $m) {
                error_log('DaemonLogHandler: message handled: / ' . $m->getMessage());
            },
            ['from_transport' => CONTAINER_REDIS_TRANSPORT_LOG]
        )
    ],
];
$middleware = [];
$middleware[] = new HandleMessageMiddleware(new HandlersLocator($handlers));
$sendersLocator = new SendersLocator(['*' => [CONTAINER_REDIS_TRANSPORT_LOG]], $container);
$middleware[] = new SendMessageMiddleware($sendersLocator);

$bus = new MessageBus($middleware);
$receivers = [
    CONTAINER_REDIS_TRANSPORT_LOG => $container->get(CONTAINER_REDIS_STREAM_RECEIVER_LOG),
];
$w = new SymfonyComponentMessengerWorker($receivers, $bus, $container->get(CONTAINER_EVENT_DISPATCHER));
$w->run();

рдХрд┐рд╕реА рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдореЗрдВ рдЗрд╕ рдмреБрдирд┐рдпрд╛рджреА рдврд╛рдВрдЪреЗ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛

рдЕрдкрдиреЗ рдмреИрдХрдПрдВрдб рдореЗрдВ рдмрд╕ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рдореИрдВрдиреЗ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдЪрд░рдгреЛрдВ рдХреЛ рдкреБрд░рд╛рдиреЗ рд╕рд┐рдВрдХреНрд░реЛрдирд╕ рдХрдорд╛рдВрдб рд╕реЗ рдЕрд▓рдЧ рдХрд░ рджрд┐рдпрд╛ рдФрд░ рдЕрд▓рдЧ-рдЕрд▓рдЧ рд╣реИрдВрдбрд▓рд░ рдмрдирд╛рдП, рдЬрд┐рдирдореЗрдВ рд╕реЗ рдкреНрд░рддреНрдпреЗрдХ рдЕрдкрдирд╛ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред

рдбреЗрдЯрд╛рдмреЗрд╕ рдореЗрдВ рдПрдХ рдирдИ рд╕рд╛рдЗрдЯ рдЬреЛрдбрд╝рдиреЗ рдХреА рдкрд╛рдЗрдкрд▓рд╛рдЗрди рдЗрд╕ рддрд░рд╣ рджрд┐рдЦреА:

PHP рдмреИрдХрдПрдВрдб рдХреЛ рд░реЗрдбрд┐рд╕ рд╕реНрдЯреНрд░реАрдо рдмрд╕ рдореЗрдВ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рдирд╛ рдФрд░ рдПрдХ рдлреНрд░реЗрдорд╡рд░реНрдХ-рд╕реНрд╡рддрдВрддреНрд░ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдЪреБрдирдирд╛

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

PHP рдмреИрдХрдПрдВрдб рдХреЛ рд░реЗрдбрд┐рд╕ рд╕реНрдЯреНрд░реАрдо рдмрд╕ рдореЗрдВ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рдирд╛ рдФрд░ рдПрдХ рдлреНрд░реЗрдорд╡рд░реНрдХ-рд╕реНрд╡рддрдВрддреНрд░ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдЪреБрдирдирд╛

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

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

рд╕реНрд░реЛрдд: www.habr.com

рдПрдХ рдЯрд┐рдкреНрдкрдгреА рдЬреЛрдбрд╝реЗрдВ