PHP7 рдореЗрдВ рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдХреЛ "рд╣реИрд▓реЛ, рджреБрдирд┐рдпрд╛" рд╕реЗ рдЕрдзрд┐рдХ рдХрдард┐рди рдХреИрд╕реЗ рдмрдирд╛рдпрд╛ рдЬрд╛рдП, рдФрд░ рд▓рд╛рд▓-рдЖрдВрдЦреЛрдВ рд╡рд╛рд▓рд╛ рдмрдирдиреЗ рдХреЗ рд▓рд┐рдП рдирд╣реАрдВред рднрд╛рдЧ 1

рдХреНрдпреЛрдВ?


рдореИрдВ рдпрд╣ рд▓реЗрдЦ рдЗрд╕рд▓рд┐рдП рд▓рд┐рдЦ рд░рд╣рд╛ рд╣реВрдВ рддрд╛рдХрд┐ рдЬрд┐рд╕ рд░рд╛рд╕реНрддреЗ рдкрд░ рдореБрдЭреЗ рдХрдо рд╕реЗ рдХрдо рдПрдХ рд╕рд╛рд▓ рд▓рдЧреЗ, рдкрд╛рдардХ рдПрдХ-рджреЛ рдШрдВрдЯреЗ рдореЗрдВ рдЪрд▓ рд╕рдХреЗред рдЬреИрд╕рд╛ рдХрд┐ рдореЗрд░реЗ рд╡реНрдпрдХреНрддрд┐рдЧрдд рдЕрдиреБрднрд╡ рд╕реЗ рдкрддрд╛ рдЪрд▓рд╛ рд╣реИ, рдмрд╕ рд╕реА рдореЗрдВ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ PHP рдХрд╛рдо рдХреЗ рд▓рд┐рдП рдПрдХ рдЧрдВрднреАрд░ рд╡рд┐рд╕реНрддрд╛рд░ рдХрд░рдиреЗ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдереЛрдбрд╝рд╛ рдЖрд╕рд╛рди рд╣реИред рдпрд╣рд╛рдВ рдореИрдВ рдЖрдкрдХреЛ рдпрдерд╛рд╕рдВрднрд╡ рд╕рдВрднрд╡ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрддрд╛рдКрдВрдЧрд╛ рдХрд┐ рд▓рд┐рдмрд░реНрдЯреА рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреЗ рдЙрджрд╛рд╣рд░рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдПрдХ рд╡рд┐рд╕реНрддрд╛рд░ рдХреИрд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛рдП рдЬреЛ рдЙрдкрд╕рд░реНрдЧ рд╡реГрдХреНрд╖ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддрд╛ рд╣реИ, рдЬрд┐рд╕реЗ рдЯреНрд░рд╛рдЗ рдХреЗ рд░реВрдк рдореЗрдВ рдЬрд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИред рдореИрдВ рд▓рд┐рдЦреВрдВрдЧрд╛ рдФрд░ рд╕рд╛рде рд╣реА рд╕рд╛рде рдПрдХ рддрд╛рдЬрд╛ рд╕реНрдерд╛рдкрд┐рдд рд▓реНрдпреВрдмреБрдиреНрдЯреВ 18.04 рд╕рд┐рд╕реНрдЯрдо рдкрд░ рд╡рд░реНрдгрд┐рдд рдХреНрд░рд┐рдпрд╛рдПрдВ рдХрд░рддрд╛ рд╣реВрдВред

рдЪрд▓рд┐рдП рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВред

рд╕реЙрдлреНрдЯрд╡реЗрдпрд░ рд╕реНрдерд╛рдкрдирд╛


рдкреАрдПрдЪрдкреА


  1. рдкрд╣рд▓реЗ рд╣рдордиреЗ php7.2-dev рдкреИрдХреЗрдЬ рд░рдЦрд╛, рдЗрд╕рдореЗрдВ рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ phpize рд╕реНрдХреНрд░рд┐рдкреНрдЯред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рд╣рдореЗрдВ php рдХреЗ рдПрдХ рдХрд╛рд░реНрдпрд╢реАрд▓ рд╕рдВрд╕реНрдХрд░рдг рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреА, рдЬрд┐рд╕ рдкрд░ рд╣рдо рдЕрдкрдиреЗ рд╡рд┐рд╕реНрддрд╛рд░ рдХреА рдЬрд╛рдВрдЪ рдХрд░реЗрдВрдЧреЗред рдЗрд╕ рдкреИрдХреЗрдЬ рдХреЛ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рд╕реЗ рдХрдИ рдЖрд╢реНрд░рд┐рдд рдкреИрдХреЗрдЬ рддреИрдпрд╛рд░ рд╣реЛ рдЬрд╛рдПрдВрдЧреЗ, рд╣рдо рд╕рдм рдХреБрдЫ рдкреЗрд╢ рдХрд░рддреЗ рд╣реИрдВред

    sudo apt install php7.2-dev 

  2. рд╣рдо php.net рд╡реЗрдмрд╕рд╛рдЗрдЯ рдкрд░ рдЬрд╛рддреЗ рд╣реИрдВ, рдбрд╛рдЙрдирд▓реЛрдб рдЕрдиреБрднрд╛рдЧ рдкрд░ рдЬрд╛рддреЗ рд╣реИрдВ рдФрд░ рдЖрд░реНрдХ рдХреЗ рдирд╡реАрдирддрдо рд╕реНрдерд┐рд░ рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рд╕рд╛рде рд╕рдВрдЧреНрд░рд╣ рдХреЗ рд▓рд┐рдП рдПрдХ рд▓рд┐рдВрдХ рдирд┐рдХрд╛рд▓рддреЗ рд╣реИрдВ, рдЕрдм рдпрд╣ рд╕рдВрд╕реНрдХрд░рдг 7.2.11 рд╣реИред
    Php рд╕реНрд░реЛрдд рд╕рдВрдЧреНрд░рд╣ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░реЗрдВ:

     cd /tmp && wget http://it2.php.net/get/php-7.2.11.tar.gz/from/this/mirror -O php7.tar.gz 

  3. рдЕрдм рд╕рдВрдЧреНрд░рд╣ рдХреЛ рд╕реНрд╡рдпрдВ рдХреЗ рд▓рд┐рдП рдЕрдирдкреИрдХ рдХрд░реЗрдВ:

     sudo tar -xvf php7.tar.gz -C /usr/local/src 


рдХреЛрдб рд╕рдВрдкрд╛рджрдХ


рдореИрдВ рдЖрдорддреМрд░ рдкрд░ 2 рдХреЛрдб рд╕рдВрдкрд╛рджрдХреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдВред рд╕рд┐рдВрдкрд▓ рдФрд░ рддреЗрдЬрд╝ рдЧреЗрдирд░реА рдФрд░ рд╕реБрдВрджрд░ рдиреЗрд░реА, рд▓реЗрдХрд┐рди JetBrains рд╕реЗ рдмрд╣реБрдд рдЙрдиреНрдирдд рдХреНрд▓реАрдпрдиред Geany рдорд╛рдирдХ рд╢рд▓рдЬрдо Ubuntu рд╕реЗ рд╕реНрдерд╛рдкрд┐рдд рдХрд░реЗрдВред

 sudo apt install geany 

рдЖрдзрд┐рдХрд╛рд░рд┐рдХ JetBrains рд╡реЗрдмрд╕рд╛рдЗрдЯ рд╕реЗ Clion рдбрд╛рдЙрдирд▓реЛрдб рдХрд░реЗрдВ:

 cd ~/Downloads && wget https://download.jetbrains.com/cpp/CLion-2018.2.5.tar.gz -O clion.tar.gz 

 sudo tar -xvf clion.tar.gz -C /usr/share 

рдЪрд▓реЛ рдХрдВрд╕реЛрд▓ рд╕реЗ рдХреНрд▓реЗрдпрди рдЪрд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЗрд╕реЗ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд▓рд┐рдВрдХ рдмрдирд╛рддреЗ рд╣реИрдВред

 sudo ln -s /usr/share/clion-2018.2.5/bin/clion.sh /usr/bin/clion 

рдкрд╣рд▓реЗ рд▓реЙрдиреНрдЪ рдХреЗ рдмрд╛рдж, Clion рдЦреБрдж LXpanel рд╢реЗрд▓ рдореЗрдиреВ рд╕реЗ рдЕрдкрдиреЗ рд▓рд┐рдП рд╢реЙрд░реНрдЯрдХрдЯ рдмрдирд╛рдПрдЧрд╛, рд▓реЗрдХрд┐рди рдкрд╣рд▓реА рдмрд╛рд░ рдЖрдкрдХреЛ рдЗрд╕реЗ рд╣рд╛рде рд╕реЗ рдЪрд▓рд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреАред

 # clion 

рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдмрдирд╛рдПрдВ


рдпрд╣рд╛рдВ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдХрдо рд╕реЗ рдХрдо 3 рд╡рд┐рдХрд▓реНрдк рд╣реИрдВ:

  1. рд╣рдорд╛рд░реЗ рджреНрд╡рд╛рд░рд╛ рдбрд╛рдЙрдирд▓реЛрдб рдХрд┐рдП рдЧрдП php рд╕реНрд░реЛрддреЛрдВ рд╕реЗ рдХрдЪреНрдЪреЗ рдорд╛рдирдХ рдбрд┐рд╕реНрдХ рд▓реЗрдВред
  2. рдПрдХ рд╡рд┐рд╢реЗрд╖ ext_skel рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЗ рд╕рд╛рде рдорд╛рдирдХ рдбрд┐рд╕реНрдХ рдХреЛ рдереЛрдбрд╝рд╛ рд╕рд╛ рджреЗрдЦрд╛
  3. рдпрд╣рд╛рдБ рд╕реЗ рдПрдХ рдЕрдЪреНрдЫрд╛ рдиреНрдпреВрдирддрдо рдбрд┐рд╕реНрдХ рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВ ред

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

  1. рдЪрд▓реЛ рдорд╛рдирдХ php рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдХреЗ рд╕рд╛рде рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдкрд░ рдЬрд╛рдПрдВред

     cd /usr/local/src/php-7.2.11/ext 

    рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЗ рдирд╛рдо рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЖрдк рдкреНрд░реЛрдЯреЛ рдлрд╝рд╛рдЗрд▓ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдХреБрдЫ рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдкреИрд░рд╛рдореАрдЯрд░ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдпрд╣ рд╕рдм рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдореИрдВ рд╕рдм рдХреБрдЫ рд╣рд╛рде рд╕реЗ рдХрд░реВрдВрдЧрд╛, рд▓реЗрдХрд┐рди рдореИрдВ рджрд┐рдЦрд╛рдКрдВрдЧрд╛ рдХрд┐ рдкреНрд░реЛрдЯреЛ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред рд╣рдо рдЯреНрд░рд╛рдЗ рдХрд░рддреЗ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рдЖрдЗрдП рд╣рдо рдЕрдкрдиреЗ рд╡рд┐рд╕реНрддрд╛рд░ рдХреЛ рдирд╛рдо рджреЗрдВред / Usr / рд╕реНрдерд╛рдиреАрдп / src рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдореЗрдВ рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рд╡реНрдпрд╡рд╕реНрдерд╛рдкрдХ рд╡рд┐рд╢реЗрд╖рд╛рдзрд┐рдХрд╛рд░реЛрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЬреИрд╕рд╛ рдХрд┐ sudo рд▓рд┐рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдирд╣реАрдВ рд╣реИ, рдореИрдВ рдЙрдиреНрдирдд рд╡рд┐рд╢реЗрд╖рд╛рдзрд┐рдХрд╛рд░реЛрдВ рдХреЗ рд╕рд╛рде рдмреИрд╢ рд╢рд╛рдорд┐рд▓ рдХрд░реВрдВрдЧрд╛ред

     sudo bash 

  2. рдпрд╣рд╛рдВ рдореИрдВ рдХреЗрд╡рд▓ 1 рдлрд╝рдВрдХреНрд╢рди рдХреЗ рдкреИрд░рд╛рдореАрдЯрд░ рд╕реЗрдЯ рдХрд░реВрдВрдЧрд╛ рдЬрд┐рд╕реЗ рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рдПрдХреНрд╕рдЯреЗрдВрд╢рди рд▓рд╛рдЧреВ рдХрд░реЗрдЧрд╛ред рдпрд╣ рдХреЗрд╡рд▓ рдПрдХ рдбреЗрдореЛ рдлрд╝рдВрдХреНрд╢рди рд╣реИ рдпрд╣ рджрд┐рдЦрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐ рдпрд╣ рдХреИрд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

    рд╣рдо рдорд╛рдирдХ рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдПрдХ рдкреВрд░реНрдг рдПрдирд╛рд▓реЙрдЧ рдХрд░реЗрдВрдЧреЗ

     array array_fill ( int $start_index , int $num , mixed $value ) 

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

     echo my_array_fill \( int start_index , int num , mixed value \) >> libtrie.proto 

  3. рдЕрдм ext_skel рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдЪрд▓рд╛рдПрдВ, рдЗрд╕реЗ рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдФрд░ рд╣рдорд╛рд░реЗ рджреНрд╡рд╛рд░рд╛ рдмрдирд╛рдИ рдЧрдИ рдкреНрд░реЛрдЯреЛ рдлрд╛рдЗрд▓ рдХрд╛ рдирд╛рдо рджреЗрдВред

     ./ext_skel --extname=libtrie --proto=./libtrie.proto 

  4. рд╣рдордиреЗ рдЕрдкрдиреЗ рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдХреЗ рд╕рд╛рде рдПрдХ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдмрдирд╛рдИ рд╣реИред рдЪрд▓реЛ рдЗрд╕рдореЗрдВ рдЪрд▓рддреЗ рд╣реИрдВред

     cd libtrie 


рдлрд╝рд╛рдЗрд▓ рд╕рдВрд░рдЪрдирд╛ рдФрд░ рд╡рд┐рдзрд╛рдирд╕рднрд╛ рд╕рд┐рджреНрдзрд╛рдВрдд


рдлрд╝рд╛рдЗрд▓ рд╕рдВрд░рдЪрдирд╛
 config.m4 -           phpize   ./configure,       makefile. CREDITS -  ,     ,    libtrie.c -      php_libtrie.h -     config.w32 -        windows EXPERIMENTAL -  .    ,    . libtrie.php -  php      . tests -   


рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдХреЛ рд╕рдлрд▓рддрд╛рдкреВрд░реНрд╡рдХ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдХреЗрд╡рд▓ 3 рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рд╡рд┐рд╕реНрддрд╛рд░ рдХреЗ рдиреНрдпреВрдирддрдо рдбрд┐рд╕реНрдХ рдореЗрдВ, рдЬрд┐рд╕рдХрд╛ рдореИрдВрдиреЗ рдКрдкрд░ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рдерд╛, рдХреЗрд╡рд▓ 3 рдлрд╛рдЗрд▓реЗрдВ рд╣реИрдВред

 config.m4 php_libtrie.h libtrie.c 

рдореБрдЭреЗ php рдореЗрдВ рд╕реНрд╡реАрдХреГрдд рдорд╛рдирдХ рдирд╛рдордХрд░рдг рдкрд╕рдВрдж рдирд╣реАрдВ рд╣реИ, рдореБрдЭреЗ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдмреЙрдбреА рдХреЗ рд╕рд╛рде рд╣реЗрдбрд░ рдлрд╛рдЗрд▓реЗрдВ рдФрд░ рдлрд╛рдЗрд▓реЗрдВ рдкрд╕рдВрдж рд╣реИрдВред рдЗрд╕рд▓рд┐рдП рдирд╛рдо рдмрджрд▓рд╛
libtrie.c
рдореЗрдВ
php_libtrie.c

 mv libtrie.c php_libtrie.c 

Config.m4 рд╕рдВрдкрд╛рджрди


рдбрд┐рдлрд╝реЙрд▓реНрдЯ config.m4 рдлрд╝рд╛рдЗрд▓ рд╡рд╕реНрддреБрддрдГ рд╕рд╛рдордЧреНрд░реА рдХреЗ рд╕рд╛рде crammed рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рд╕реЗ рдмрд╣реБрддрд╛рдпрдд рднреНрд░рдорд┐рдд рдФрд░ рднреНрд░рдорд┐рдд рд╣реИред рдЬреИрд╕рд╛ рдХрд┐ рдореИрдВрдиреЗ рдХрд╣рд╛, рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЗрд╕ рдлрд╝рд╛рдЗрд▓ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдпрд╣рд╛рдБ рдФрд░ рдкрдврд╝реЗрдВред

 geany config.m4 & 

рд╣рдо рдХреЗрд╡рд▓ рдпрд╣реА рдЫреЛрдбрд╝рддреЗ рд╣реИрдВ:

 PHP_ARG_ENABLE(libtrie, whether to enable libtrie support, [ --enable-libtrie Enable libtrie support]) if test "$PHP_LIBTRIE" != "no"; then #    -    # PHP_ADD_INCLUDE() #   PHP_NEW_EXTENSION(libtrie, php_libtrie.c, $ext_shared) # PHP_NEW_EXTENSION(libtrie, php_libtrie.c, $ext_shared,, -DZEND_ENABLE_STATIC_TSRMLS_CACHE=1) fi 



рдкрд╣рд▓рд╛ рдореИрдХреНрд░реЛ рдЬрдирд░реЗрдЯ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛ рдЪрд▓рд╛рддреЗ рд╕рдордп рд╣рдорд╛рд░реЗ рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдХреЛ рд╕рдХреНрд╖рдо рдФрд░ рдЕрдХреНрд╖рдо рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рдмрдирд╛рддрд╛ рд╣реИред

рджреВрд╕рд░рд╛ рдмреНрд▓реЙрдХ рд╕рдмрд╕реЗ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИ, рдпрд╣ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдХреМрди рд╕реА рдлрд╛рдЗрд▓реЗрдВ рд╣рдорд╛рд░реЗ рд╡рд┐рд╕реНрддрд╛рд░ рдХреЗ рд╣рд┐рд╕реНрд╕реЗ рдХреЗ рд░реВрдк рдореЗрдВ рд╕рдВрдХрд▓рд┐рдд рдХреА рдЬрд╛рдПрдВрдЧреА, рдХреНрдпрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рдХреЛ рдЧрддрд┐рд╢реАрд▓ рд░реВрдк рд╕реЗ .so рдлрд╝рд╛рдЗрд▓ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЬреЛрдбрд╝рд╛ рдЬрд╛рдПрдЧрд╛, рдпрд╛ рдХреНрдпрд╛ рдПрдХреНрд╕рдЯреЗрдВрд╢рди рд╕реНрдерд┐рд░ рд╣реЛрдЧрд╛ рдФрд░ php рдмрд┐рд▓реНрдб рдХреЗ рджреМрд░рд╛рди рдПрдХреАрдХреГрдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рд╣рдорд╛рд░рд╛ рдбрд╛рдпрдирд╛рдорд┐рдХ рд╣реЛрдЧрд╛ред
рдлрд╝рд╛рдЗрд▓ рд╕рд╣реЗрдЬреЗрдВред

рд╣рдо рдлрд╝рд╛рдЗрд▓ рдХреЛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдореЗрдВ рдХреЙрдкреА рдХрд░рддреЗ рд╣реИрдВ рддрд╛рдХрд┐ рдпрд╣ рд░реВрдЯ рдореЛрдб рдореЗрдВ рдХрд╛рдо рди рдХрд░реЗред

 #    exit 

рдХреЙрдкреА:

 cp /usr/local/src/php-7.2.11/ext/libtrie ~/Documents/ -r 

рдбреЗрдореЛ рдлрд╝рдВрдХреНрд╢рди


рдореИрдВ рдЖрдкрдХреЛ рдпрд╛рдж рджрд┐рд▓рд╛рддрд╛ рд╣реВрдВ рдХрд┐ рд╣рдо array_fill () рдХрд╛ рдкреВрд░рд╛ рдПрдирд╛рд▓реЙрдЧ рдХрд░реЗрдВрдЧреЗред рдореИрдВ рдХреНрд▓реЗрдпрди рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдХрд╛рдо рдХрд░реВрдВрдЧрд╛, рд▓реЗрдХрд┐рди рдпрд╣ рдЧрд╛рдЗрдб рдХрд┐рд╕реА рднреА рд╕рдВрдкрд╛рджрдХ рдореЗрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред Clion рдЕрдЪреНрдЫрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдЖрдкрдХреЛ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдореВрд▓ рд╕рд┐рдВрдЯреИрдХреНрд╕ рдЬрд╛рдБрдЪ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ, рдФрд░ рдпрд╣ ctrl + рдХреНрд▓рд┐рдХ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдлрд╝рд╛рдЗрд▓реЛрдВ рдпрд╛ рдлрд╝рдВрдХреНрд╢рдВрд╕ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рддреНрд╡рд░рд┐рдд рдиреЗрд╡рд┐рдЧреЗрд╢рди рдХрд╛ рднреА рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИред рд╣рдорд╛рд░реЗ рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдореЗрдВ рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдРрд╕реЗ рдмрджрд▓рд╛рд╡реЛрдВ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ CMakeLists.txt рдлрд╛рдЗрд▓ рдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рдирд╛ рд╣реЛрдЧрд╛

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

 sudo apt install cmake 

Cmake рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░реЗрдВ


рд╣рдо рдХреНрд▓рд┐рдпрди рдореЗрдВ рд╡рд┐рд╕реНрддрд╛рд░ рдХреЗ рд╕рд╛рде рдЕрдкрдиреА рд╕реВрдЪреА рдЦреЛрд▓рддреЗ рд╣реИрдВред рд╕реНрдХреНрд░реАрди рдХреЗ рд╢реАрд░реНрд╖ рдкрд░ рд░реВрдЯ рдбрд╛рдпрд░реЗрдХреНрдЯрд░реА рдХреЗ рдирд╛рдо рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░рдХреЗ рд╕рдВрджрд░реНрдн рдореЗрдиреВ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╕рд╛рдордЧреНрд░рд┐рдпреЛрдВ рдХреЗ рд╕рд╛рде рдПрдХ CMakeLists.txt рдлрд╝рд╛рдЗрд▓ рдмрдирд╛рдПрдБ:

 cmake_minimum_required(VERSION 3.12) project(php-ext-libtrie C) set(CMAKE_C_STANDARD 11) #   phproot,       php set(phproot /usr/local/src/php-7.2.11/) #   ,      #      clion       php include_directories(${phproot}) include_directories(${phproot}TSRM/) include_directories(${phproot}main/) include_directories(${phproot}Zend/) #    clion          add_executable(php-ext-libtrie php_libtrie.c) 



рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдХрд┐рд╕реА рдХреЛ рдкрддрд╛ рд╣реЛ рдХрд┐ рдЗрд╕ рдлрд╛рдЗрд▓ рдХреЛ рдХреИрд╕реЗ рдЫреЛрдЯрд╛ рдХрд┐рдпрд╛ рдЬрд╛рдП рддрд╛рдХрд┐ рдХреНрд▓реАрдпрди рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдлрд╛рдЗрд▓реНрд╕ рдХреЛ рдЗрдВрдбреЗрдХреНрд╕ рдХрд░рдиреЗ рд▓рдЧреЗред рдореБрдЭреЗ рдЗрд╕рд╕реЗ рдЫреЛрдЯрд╛ рд░рд╛рд╕реНрддрд╛ рдирд╣реАрдВ рдорд┐рд▓рд╛ред рдЕрдЧрд░ рдХрд┐рд╕реА рдХреЛ рдкрддрд╛ рд╣реИ, рддреЛ рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдореЗрдВ рд▓рд┐рдЦреЗрдВред

рдбреЗрдореЛ рдлрдВрдХреНрд╢рди рдХреЛрдб


рд╣рдорд╛рд░реЗ рдПрдХреНрд╕рдЯреЗрдВрд╢рди php_libtrie.c рдХреЗ рд╢рд░реАрд░ рдХреЗ рд╕рд╛рде рд╣рдорд╛рд░реА рдлрд╝рд╛рдЗрд▓ рдЦреЛрд▓реЗрдВ рдФрд░
рд╕рднреА рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдХреЛ рд╣рдЯрд╛ рджреЗрдВ рддрд╛рдХрд┐ рд╡реЗ рд╣рдореЗрдВ рднреНрд░рдорд┐рдд рди рдХрд░реЗрдВред





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

рд╕рдм рдХреБрдЫ рд╕реБрд╡реНрдпрд╡рд╕реНрдерд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдореИрдВ рдпрд╣ рдХрд░рддрд╛ рд╣реВрдВ:
рдореИрдВ рд╕рднреА рд╣реЗрдбрд░ рдХреЗ рд╕рд╛рде php_libtrie.c рдлрд╝рд╛рдЗрд▓ рд╕реЗ php_libtrie.h рдкрд░ php_libtrie.h рдХрд░рддрд╛ php_libtrie.h , рдкрд╣рд▓реА рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдХреЗрд╡рд▓ 1 рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐ рдмрдиреА рд╣реБрдИ рд╣реИ:

 #include "php_libtrie.h" 



php_libtrie.h рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдЕрдиреНрдп рд╕рднреА рдЖрд╡рд╢реНрдпрдХ рд╕рдорд╛рд╡реЗрд╢ рд╣реЛрдВрдЧреЗред



рдореЗрд░реА рд╣реЗрдбрд░ рдлрд╝рд╛рдЗрд▓ рдХреА рд╕рд╛рдордЧреНрд░реА
 #ifndef PHP_LIBTRIE_H #define PHP_LIBTRIE_H #ifdef HAVE_CONFIG_H #include "config.h" #endif #include <stdarg.h> //   va_start() #include <inttypes.h> //    //  #if defined(__GNUC__) && __GNUC__ >= 4 # define ZEND_API __attribute__ ((visibility("default"))) # define ZEND_DLEXPORT __attribute__ ((visibility("default"))) #else # define ZEND_API # define ZEND_DLEXPORT #endif # define SIZEOF_SIZE_T 8 //   ZVAL_COPY_VALUE() #ifndef ZEND_DEBUG #define ZEND_DEBUG 0 #endif //  ,      #include "php.h" #include "php_ini.h" #include "zend.h" #include "zend_types.h" //ZVAL_COPY_VALUE #include "ext/standard/info.h" #include "zend_API.h" #include "zend_modules.h" #include "zend_string.h" #include "spprintf.h" extern zend_module_entry libtrie_module_entry; ... 


рдпрджрд┐ рд╕рдм рдХреБрдЫ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдХреНрд▓рд┐рдпрди рдкрд░реАрдХреНрд╖рдХ рдКрдкрд░реА рджрд╛рдПрдВ рдХреЛрдиреЗ рдореЗрдВ рдПрдХ рдкреАрд▓рд╛ рдпрд╛ рд╣рд░рд╛ рд╡рд░реНрдЧ рджрд┐рдЦрд╛рдПрдЧрд╛, рдЬрд┐рд╕рдХрд╛ рдЕрд░реНрде рд╣реИ рдХрд┐ рдХреЛрдИ рдорд╣рддреНрд╡рдкреВрд░реНрдг рддреНрд░реБрдЯрд┐ рдирд╣реАрдВ рд╣реИред



рдПрдХ рдЫреЛрдЯрд╛ рд╕реИрджреНрдзрд╛рдВрддрд┐рдХ рд╡рд┐рд╖рдпрд╛рдВрддрд░


рд╡рд┐рд╕реНрддрд╛рд░ рд╕реЗ рдареАрдХ рд╕реЗ рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, 2 рдЪреАрдЬреЗрдВ рдЖрд╡рд╢реНрдпрдХ рд╣реИрдВ:

  1. рдЖрдкрдХреЛ рд╡рд┐рд╢реЗрд╖ рд╕рдВрд░рдЪрдирд╛ zend_module_entry рдХреЛ рдкреНрд░рд╛рд░рдВрдн рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╢рд╛рдорд┐рд▓ рд╣реИрдВ:

     zend_module_entry libtrie_module_entry = { STANDARD_MODULE_HEADER, //  "libtrie", //  libtrie_functions, //     PHP_MINIT(libtrie), //,     PHP_MSHUTDOWN(libtrie), //   PHP_RINIT(libtrie), /* Replace with NULL if there's nothing to do at request start */ PHP_RSHUTDOWN(libtrie), /* Replace with NULL if there's nothing to do at request end */ PHP_MINFO(libtrie), // ,    php  phpinfo() PHP_LIBTRIE_VERSION, // ,     STANDARD_MODULE_PROPERTIES //    }; 

  2. рдЙрд╕реА рд╕рд░рдгреА рдХреЛ рдЖрд░рдореНрдн рдХрд░реЗрдВ рдЬрд┐рд╕рдореЗрдВ рд╣рдорд╛рд░реЗ рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдХреЗ рд╕рднреА рдХрд╛рд░реНрдп рд╢рд╛рдорд┐рд▓ рд╣реЛрдВред

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

    рдкреНрд░реЛрдЯреЛ рдлрд╛рдЗрд▓ рдпрд╛рдж рд╣реИ? рд╣рдордиреЗ рд╡рд╣рд╛рдБ 1 рдлрд╝рдВрдХреНрд╢рди my_array_fill () рд╕реЗрдЯ рдХрд┐рдпрд╛ рд╣реИред рддреЛ рдЕрдм рд╣рдорд╛рд░реЗ рдпрд╣рд╛рдБ 3 рддрддреНрд╡ рд╣реИрдВ:

     const zend_function_entry libtrie_functions[] = { PHP_FE(confirm_libtrie_compiled, NULL) /* For testing, remove later. */ PHP_FE(my_array_fill, NULL) PHP_FE_END /* Must be the last line in libtrie_functions[] */ }; 

    рдкрд╣рд▓реА рдкрдВрдХреНрддрд┐ рдПрдХ рдкрд░реАрдХреНрд╖рдг рдлрд╝рдВрдХреНрд╢рди рд╣реИ рдЬреЛ рджрд┐рдЦрд╛рдПрдЧрд╛ рдХрд┐ рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рджреВрд╕рд░рд╛ рд╣рдорд╛рд░рд╛ рдлрд╝рдВрдХреНрд╢рди рд╣реИ, рддреАрд╕рд░рд╛ рдПрдХ рд╡рд┐рд╢реЗрд╖ рдореИрдХреНрд░реЛ рд╣реИ, рдЬреЛ рдЗрд╕ рд╕рд░рдгреА рдореЗрдВ рдЕрдВрддрд┐рдо рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред

рд╣рдорд╛рд░реЗ рд╕рдорд╛рд░реЛрд╣ рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдПрдВ:

 PHP_FUNCTION(my_array_fill) 

рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рдпрд╣ рдПрдХ рдореИрдХреНрд░реЛ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рднреА рдЖрд░рдВрднреАрдХреГрдд рд╣реИред рдмрд╛рдд рдпрд╣ рд╣реИ рдХрд┐ рд╕рднреА php рдлрд╝рдВрдХреНрд╢рди C рдХреЗ рдЕрдВрджрд░ рдХреБрдЫ рднреА рдирд╣реАрдВ рд▓реМрдЯрд╛рддреЗ рд╣реИрдВ (рд╕рдЯреАрдХ рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП, рд╢реВрдиреНрдп рд╡рд╛рдкрд╕) рдФрд░ рдЙрдирдХреЗ рддрд░реНрдХ рдирд╣реАрдВ рдмрджрд▓реЗ рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВред рдХрд╣реАрдВ рдпрд╣ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рднреА рд╣реИред

рдпрджрд┐ рдЖрдк рдлрд╝рд╛рдЗрд▓ рд╕рдВрд░рдЪрдирд╛ (рдмрд╛рдИрдВ рдУрд░ рдХреА рдЦрд┐рдбрд╝рдХреА рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛) рдХреЛ рджреЗрдЦрддреЗ рд╣реИрдВ, рддреЛ рдлрд╝рд╛рдЗрд▓ рдХреЗ рд╕рднреА рдХрд╛рд░реНрдп рдпрд╣рд╛рдВ рд╕реВрдЪреАрдмрджреНрдз рд╣реИрдВ, рд▓реЗрдХрд┐рди рдореИрдХреНрд░реЛ рдХреЛ рдкреНрд░реА-рдХреНрд▓реЙрдХ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж рд╡реЗ рдЬрд┐рд╕ рд░реВрдк рдореЗрдВ рд╣реЛрдВрдЧреЗред рд╕реНрдХреНрд░реАрдирд╢реЙрдЯ рд╕реЗ рдкрддрд╛ рдЪрд▓рддрд╛ рд╣реИ рдХрд┐ рд╣рдорд╛рд░рд╛ рдлрд╝рдВрдХреНрд╢рди my_array_fill рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ zif_my_array_fill рд╣реЛрдЧрд╛ред



рд╣рдорд╛рд░реЗ рд╕реА рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд▓рд┐рдП php рдХреЗ рдЖрдВрддреНрд░ рд╕реЗ рддрд░реНрдХ рд╣рдореЗрдВ рдПрдХ рдореИрдХреНрд░реЛ рдХреЗ рд╕рд╛рде рдорд┐рд▓рддрд╛ рд╣реИред рдЗрд╕ рдореИрдХреНрд░реЛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЕрдзрд┐рдХ рдЬрд╛рдирдХрд╛рд░реА рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдорд┐рд▓ рд╕рдХрддреА рд╣реИ:

 /usr/local/src/php-7.2.11/README.PARAMETER_PARSING_API 

рдиреАрдЪреЗ рд╡рд┐рд╕реНрддреГрдд рд╡рд┐рд╡рд░рдг рдХреЗ рд╕рд╛рде рд╣рдорд╛рд░реЗ рдПрдирд╛рд▓реЙрдЧ рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдХреЛрдб рд╣реИред

рдХреЛрдб
 PHP_FUNCTION(my_array_fill) { //   ,     //    2 : // zend_execute_data *execute_data, zval *return_value //     ,      //zend_long  int64_t  x64   int32_t  x86  //      zend_long zend_long start_index; //1  , zend_long num; //2   zval *value; //   mixed ,   zval,      //    ,          if (zend_parse_parameters(ZEND_NUM_ARGS(), "llz", &start_index, &num, &value) == FAILURE) { /*     *    RETURN_    * return_value     */ RETURN_FALSE; } //   ,   -    if (num <= 0) { php_error_docref(NULL TSRMLS_CC, E_WARNING, "argument 2 must be > 0"); //     RETURN_FALSE; } //zval *return_value  ,        //       zval,     ,  -  //   zend_long  unsigned int32. //      + -. ..   1,    3,     4  array_init_size(return_value, (uint32_t)(start_index + num)); //  ,   ,   for(zend_long i = start_index, last = start_index + num; i < last; ++i) { //   zval       add_index_zval(return_value, i, value); } //   ,      return_value return; } 




рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдФрд░ рдкрд░реАрдХреНрд╖рдг рдХрд░реЗрдВ


рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, phpize рдЪрд▓рд╛рдПрдВ, рдЬреЛ рд╣рдореЗрдВ рдлрд╛рдЗрд▓ рдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рдиреЗ рдореЗрдВ рдорджрдж рдХрд░реЗрдЧрд╛ред

 phpize 

рдЕрдм рдЪрд▓рд╛рдПрдБ ред/configure, рдЬреЛ рдореЗрдХрдлрд╛рдЗрд▓ рдХрд░реЗрдЧрд╛ред

 ./configure 

рдЕрдВрдд рдореЗрдВ, рд░рди рдмрдирд╛рдУ, рдЬреЛ рд╣рдорд╛рд░реЗ рд╡рд┐рд╕реНрддрд╛рд░ рдХреЛ рдЗрдХрдЯреНрдард╛ рдХрд░реЗрдЧрд╛ред

 make 

рдЖрдЗрдП рджреЗрдЦреЗрдВ рдХрд┐ рд╣рдордиреЗ рдХреНрдпрд╛ рдХрд┐рдпрд╛ред

 #    php,       # modules.  -a  php      php -d extension=modules/libtrie.so -a 

рд╣рдо php рдХрдВрд╕реЛрд▓ рдореЗрдВ рдкреНрд░рд╡реЗрд╢ рдХрд░рддреЗ рд╣реИрдВ:

 print_r(my_array_fill(50, 2, "hello, baby!")); 

рдкрд░рд┐рдгрд╛рдо рдХрд╛ рдЖрдирдВрдж рд▓реЗрдВред



рдХреЛрдИ рдкреВрдЫрддрд╛ рд╣реИ, рдпрд╣рд╛рдБ рддреНрд░рдпреА рдХрд╣рд╛рдБ рд╣реИ? рдЙрди рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬреЛ рддреНрд░рд┐ рдХреЗ рдХрд╛рдо рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддреЗ рд╣реИрдВ, рдореИрдВ рджреВрд╕рд░реЗ рднрд╛рдЧ рдореЗрдВ рд▓рд┐рдЦреВрдВрдЧрд╛ред

рджреЗрдЦрддреЗ рд░рд╣реЛред

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


All Articles