рд╕реА-рд╢рдиреА рдбрд┐рдмрдЧрд░ рдХреЗ рддрд╣рдд PHP: рд╣рдо Zend рдЗрдВрдЬрди рдХреЗ рдЕрдВрджрд░ рдЦреБрджрд╛рдИ рдХрд░рддреЗ рд╣реИрдВ

рдХрд┐рд╕реА рддрд░рд╣ рдореБрдЭреЗ рдПрдХ рд╕рдорд╕реНрдпрд╛ рдХрд╛ рд╕рд╛рдордирд╛ рдХрд░рдирд╛ рдкрдбрд╝рд╛: PHP рд╡реЗрдм рдХреНрд░реЙрд▓рд░ рдЦреБрдж рдХреЗ рд▓рд┐рдП рдареАрдХ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рдпрд╣ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рдФрд░ рдлрд┐рд░ рдЕрдЪрд╛рдирдХ (3-6 рдШрдВрдЯреЗ рдХреЗ рдХрд╛рдо рдХреЗ рдмрд╛рдж) рдпрд╣ рдХреБрдЫ рдХрд░рдирд╛ рдмрдВрдж рдХрд░ рджреЗрддрд╛ рд╣реИ рдФрд░ 100% рд╕реАрдкреАрдпреВ рдЦрд╛рдирд╛ рд╢реБрд░реВ рдХрд░ рджреЗрддрд╛ рд╣реИред рдРрд╕реА рд╕рдорд╕реНрдпрд╛ рдХреА рддрд▓рд╛рд╢ рдХреИрд╕реЗ рдХрд░реЗрдВ? рдЖрдк рдХреИрд╕реЗ рдЬрд╛рдирддреЗ рд╣реИрдВ рдХрд┐ рдпрд╣ рдЪрдХреНрд░реЛрдВ рдореЗрдВ рдХрд╣рд╛рдВ рдЬрд╛рддрд╛ рд╣реИ? рд▓реЗрдХрд┐рди рдХреНрдпрд╛ рд╣реЛрдЧрд╛ рдЕрдЧрд░ рдЖрдк рдПрдХ рдбрд┐рдмрдЧрд░ рдХреЗ рд╕рд╛рде PHP рд╕реЗ рдЬреБрдбрд╝рддреЗ рд╣реИрдВ рдФрд░ рдЖрдкрдХреЛ рд╡рд╣рд╛рдВ рд╕реЗ рдЬреЛ рдХреБрдЫ рднреА рдЪрд╛рд╣рд┐рдП, рдЙрд╕рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛ рд▓реЗрддреЗ рд╣реИрдВ? рдХрдЯ рдХреЗ рддрд╣рдд рд╡рд┐рд╡рд░рдгред

рдЗрд╕ рд╕реНрдерд┐рддрд┐ рдореЗрдВ рдХреНрдпрд╛ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ?


рдпрд╣рд╛рдВ рдХрдИ рд╡рд┐рдХрд▓реНрдк рдирд╣реАрдВ рд╣реИрдВ: рдЖрдк рдкреВрд░реА рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ рд▓реЙрдЧ рдореЗрдВ рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐рдпреЛрдВ рдХреЛ рд╡реНрдпрд╡рд╕реНрдерд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рд╡рд╣ рдХрд┐рд╕ рдкрд░ рд░реБрдХрд╛ рд╣реИред рдЗрд╕рд╕реЗ рд╣рдо рдХрд┐рд╕реА рддрд░рд╣ рдпрд╣ рдорд╛рди рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдпрд╣ рдХрд╣рд╛рдБ рдФрд░ рдХреИрд╕реЗ рд▓рдЯрдХрд╛ рд╣реИред рдЗрд╕рдореЗрдВ рдмрд╣реБрдд рд▓рдВрдмрд╛ рд╕рдордп рд▓рдЧрддрд╛ рд╣реИ - рдореИрдВрдиреЗ рд▓реЙрдЧ рдореЗрдВ рдПрдХ рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐ рд░рдЦреА, рдПрдХ рд▓рдЯрдХрд╛ рдкрдХрдбрд╝рд╛, рджреЗрдЦрд╛, рдкрд░реНрдпрд╛рдкреНрдд рдЬрд╛рдирдХрд╛рд░реА рдирд╣реАрдВ рдереА, рд╣рдордиреЗ рдФрд░ рднреА рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐рдпрд╛рдБ рд╕реНрдерд╛рдкрд┐рдд рдХреАрдВ, рдЖрджрд┐ред - рдЗрд╕рд▓рд┐рдП, рдореИрдВрдиреЗ рдмрд╛рдж рдореЗрдВ рдЗрд╕ рд╡рд┐рдХрд▓реНрдк рдХреЛ рдЫреЛрдбрд╝ рджрд┐рдпрд╛, рдЕрдЧрд░ рдХреЛрдИ рдЕрдиреНрдп рдЙрдкрдпреБрдХреНрдд рдирд╣реАрдВ рд╣реИред
рдЗрд╕рдХреЗ рд▓рд┐рдП xdebug рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╕реЗ рдХрд╛рдо рдирд╣реАрдВ рдЪрд▓реЗрдЧрд╛ - рдЬрд╣рд╛рдБ рддрдХ рдореИрдВ рд╕рдордЭрддрд╛ рд╣реВрдБ, рдЗрд╕рдореЗрдВ рдкрд╣рд▓реЗ рд╕реЗ рдЪрд▓ рд░рд╣реА PHP рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд╕реЗ рдЬреБрдбрд╝рдиреЗ рдХреА рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдирд╣реАрдВ рд╣реИред рдФрд░ рдпрджрд┐ рдЖрдк рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА xdebug рдХреЗ рддрд╣рдд рдЪрд▓рд╛рддреЗ рд╣реИрдВ, рддреЛ рдлрд┐рд░ рд╕реЗ рдЖрдкрдХреЛ "рд░рди" рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдирд╣реАрдВ рдорд┐рд▓реЗрдЧрд╛ рдФрд░ рдлрд┐рд░, рдЬрдм рдпрд╣ рд▓рдЯрдХрд╛ рд╣реЛрддрд╛ рд╣реИ, рддреЛ "рд░реЛрдХреЗрдВ" рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░реЗрдВ - xdebug рдореЗрдВ рдЖрдк рдХреЗрд╡рд▓ рдмреНрд░реЗрдХрдкреЙрдЗрдВрдЯ рджреНрд╡рд╛рд░рд╛ рдпрд╛рддреНрд░рд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ (рд╕рд╣реА рдХрд░реЗрдВ рдХрд┐ рдЕрдЧрд░ рдореИрдВ рдпрд╣рд╛рдВ рдЧрд▓рдд рд╣реВрдВ)ред

рдЖрдЗрдбрд┐рдпрд╛ - рдЖрдк GDB рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ!


рдореЗрд░рд╛ рдореБрдЦреНрдп рдХрд╛рдо PHP рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рд╣реИ, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдЕрдХреНрд╕рд░ рдЬреАрд╕реАрд╕реА рдХреЗ рддрд╣рдд C ++ рд▓рд┐рдЦрдирд╛ рдкрдбрд╝рддрд╛ рд╣реИ (рдЬрд┐рд╕реЗ рдореБрдЭреЗ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдкрд╕рдВрдж рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП)ред Gdb рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╕рд░реНрд╡рд░ рдкрд░ рд╕реАрдзреЗ c ++ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдбрд┐рдмрдЧрд┐рдВрдЧ рдореЗрдВ рдЕрдиреБрднрд╡ рд╣реЛрддрд╛ рд╣реИ - рдпрд╣ рдмрд╣реБрдд рдореБрд╢реНрдХрд┐рд▓ рдирд╣реАрдВ рд╣реИ рдФрд░ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, gdb рдбреАрдмрдЧрд░ рдХрдВрд╕реЛрд▓ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХреЗ рд▓рд┐рдП рдХрд╛рдлреА рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реИред рддреЛ рдЗрд╕рдХреЗ рд╕рд╛рде рд╣рдорд╛рд░реА PHP рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛ рдбреАрдмрдЧ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХреНрдпреЛрдВ рди рдХрд░реЗрдВ? рд╕рд╛рде рд╣реА рдЖрдк рдкреАрдПрдЪрдкреА рдЗрдВрдЯрд░реНрдирд▓ рдореЗрдВ рднреА рдереЛрдбрд╝реА рдЧрд╣рд░рд╛рдИ рд╕реЗ рдЦреБрджрд╛рдИ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

рд╣рдореЗрдВ рдХреНрдпрд╛ рдЪрд╛рд╣рд┐рдП?


рд╕рд░реНрд╡рд░ рдкрд░ ssh рдПрдХреНрд╕реЗрд╕ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рд░реВрдЯ рдХреА рдЬрд░реВрд░рдд рдирд╣реАрдВ рд╣реИ - рд╣рдо рд╕реНрдерд╛рдиреАрдп рд░реВрдк рд╕реЗ рд╕рдм рдХреБрдЫ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рддреЛ:

GDB

рдЖрдк рд╡реНрдпрд╡рд╕реНрдерд╛рдкрдХ рд╕реЗ рдЗрд╕реЗ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдпрд╛ рд╕реНрдерд╛рдиреАрдп рд╕реНрддрд░ рдкрд░ рд╕рдВрдХрд▓рд┐рдд рдХрд░рдиреЗ рдФрд░ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╣ рд╕рдХрддреЗ рд╣реИрдВред рдореИрдВрдиреЗ рдПрдбрдорд┐рди рд╕реЗ рдкреВрдЫрд╛ред

PHP рдбрд┐рдмрдЧрд┐рдВрдЧ рдЬрд╛рдирдХрд╛рд░реА рдХреЗ рд╕рд╛рде рд╕рдВрдХрд▓рд┐рдд рд╣реИ

рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдбрд┐рдмрдЧ рд╕рдВрд╕реНрдХрд░рдг рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред PHP рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рд╕рднреА рдХреЛ -g рд╕реНрд╡рд┐рдЪ рдХреЗ рд╕рд╛рде рд╕рдВрдХрд▓рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рд╣реИред рдХрд┐рд╕реА рдХрд╛рд░рдг рд╕реЗ, PHP 5.2.17 рдХреЛ рдЗрд╕ рдХреБрдВрдЬреА рдХреЗ рд╕рд╛рде рдореЗрд░реА рдбрд┐рдмрдЧ рдЕрд╕реЗрдВрдмрд▓реА рдореЗрдВ рдЗрдХрдЯреНрдард╛ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рдЬрд┐рд╕рдиреЗ рдЗрд╕ рдорд╛рдорд▓реЗ рдХреЛ рдмрд╣реБрдд рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рдмрдирд╛рдпрд╛ - рдореИрдВ рдЙрд╕реА рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдореЗрдВ рдХрд╛рдордпрд╛рдм рд░рд╣рд╛ рдЬреЛ рдирд┐рдпрдорд┐рдд рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЬрд╣рд╛рдВ рддрдХ тАЛтАЛрдореБрдЭреЗ рд╕рдордЭ рдореЗрдВ рдЖрдпрд╛, рдЕрдЧрд░ рдореИрдВрдиреЗ PHP рдХреЛ рдбрд┐рдмрдЧ рд╕рдВрд╕реНрдХрд░рдг рдореЗрдВ рдЗрдХрдЯреНрдард╛ рдХрд┐рдпрд╛ рдерд╛, рддреЛ рдореИрдВ рдЗрди рд╕рдорд╛рди рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░ рдкрд╛рдКрдВрдЧрд╛ - рдореБрдЭреЗ рдЙрди рд▓реЛрдЧреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ рдЬреЛ PHP рдХреЗ рд╕рд╛рде рдЖрдПрдВрдЧреЗред
рдЖрдЧреЗ рджреЗрдЦрддреЗ рд╣реБрдП, рдореИрдВ рдХрд╣реВрдВрдЧрд╛ рдХрд┐ рдореБрдЭреЗ рдЕрднреА рднреА PHP рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП libxml2 рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдпрд╣ рдкрддрд╛ рдЪрд▓рд╛ рд╣реИ рдХрд┐ рд╕рдорд╕реНрдпрд╛ libcurl рдореЗрдВ рдереА, рдЗрд╕рд▓рд┐рдП рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛ рдореИрдВрдиреЗ рдЗрд╕рдХреЗ рдЕрдВрджрд░ рдкрд╣реБрдВрдЪрдиреЗ рдХреЗ рд▓рд┐рдП рдбрд┐рдмрдЧ рдЕрд╕реЗрдВрдмрд▓реА рдореЗрдВ libcurl рднреА рдмрдирд╛рдпрд╛ред
рдЗрд╕рд▓рд┐рдП, рд╣рдо рдПрдХрддреНрд░ рдХрд░рддреЗ рд╣реИрдВ (рдореИрдВ рдореЗрдореЛрд░реА рд╕реЗ рд▓рд┐рдЦрддрд╛ рд╣реВрдВ, рдЗрд╕рд▓рд┐рдП рдЧрд▓рддрд┐рдпрд╛рдВ рд╣реЛ рд╕рдХрддреА рд╣реИрдВ):
$ wget <libxml2 download url> $ tar -xzf libxml2-2.7.8.tar.gz $ cd libxml2-2.7.8 $ ./configure --prefix=$HOME/libs $ make && make install 

 $ wget <libcurl download url> $ tar -xzf curl-7.18.2.tar.gz $ cd curl-7.18.2 $ ./configure --prefix=$HOME/libs --enable-debug $ make && make install 

PHP рдмрд┐рд▓реНрдб рдереЛрдбрд╝рд╛ рдЕрдзрд┐рдХ рдЬрдЯрд┐рд▓ рд╣реИ - рдЖрдкрдХреЛ рдЕрднреА рднреА рдбреЗрдмрд┐рдпрди рдореЗрдВ php.ini рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЗ рд▓рд┐рдП рдкрде рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рд╕рдВрдХрд▓рд┐рдд libxml2 рдХрд╛ рдкрде рдФрд░ рд╕рдВрдХрд▓рд┐рдд libcurl рдХрд╛ рдкрде:
 $ wget <php-5.2.17 download url> $ tar -xzf php-5.2.17.tar.gz $ cd php-5.2.17 $ ./configure --disable-debug --with-config-file-path=/etc/php5/cli --with-config-file-scan-dir=/etc/php5/cli/conf.d --with-libxml-dir=$HOME/libs --disable-pdo --with-curl=$HOME/libs $ make 

рдореИрдВ рдлрд┐рд░ рд╕реЗ рджреЛрд╣рд░рд╛рддрд╛ рд╣реВрдВред PHP рдХреЛ --disable-debug (-g рдХрдВрдкрд╛рдЗрд▓рд░ рд╡рд┐рдХрд▓реНрдк рдХреЛ рд╡реИрд╕реЗ рднреА рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛) рдХреЗ рд╕рд╛рде рд╕рдВрдХрд▓рд┐рдд рдХрд░рдирд╛ рдФрд░ рд╕реНрдерд╛рдиреАрдп рд░реВрдк рд╕реЗ рд╕рднреА рдореЙрдбреНрдпреВрд▓ рдХреЗ рд╕рд╛рде рдкреВрд░реА рддрд░рд╣ рд╕реЗ PHP рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рд╕рднреА рддреИрдпрд╛рд░ рдХрд┐рдП рдЧрдП рдореЙрдбреНрдпреВрд▓ рдХреЛ рд▓рд┐рдВрдХ рдХрд░рдирд╛ рдЖрд╕рд╛рди рдерд╛ред рдЗрд╕рд▓рд┐рдП, рдореИрдВрдиреЗ рдЗрдВрд╕реНрдЯрд╛рд▓ рдирд╣реАрдВ рдХрд┐рдпрд╛ред рдмреЗрд╣рддрд░ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдЗрд╕реЗ --prefix = $ HOME / libs рд╡рд┐рдХрд▓реНрдк рдХреЗ рд╕рд╛рде рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░реЗрдВ рдФрд░ рдЗрдВрд╕реНрдЯреЙрд▓ рдХрд░реЗрдВ, рд▓реЗрдХрд┐рди рдореИрдВрдиреЗ рдКрдкрд░ рдЬреЛ рдХрд┐рдпрд╛ рд╡рд╣ рдореЗрд░реЗ рдЙрджреНрджреЗрд╢реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рдерд╛ред
рд╕рднреА рд╕рдВрдХрд▓рд┐рдд - PHP рдЪрд▓рд╛рддреЗ рд╣реИрдВред рдпрд╣рд╛рдВ рднреА, рдЪреАрдЬреЗрдВ рдЗрддрдиреА рдЪрд┐рдХрдиреА рдирд╣реАрдВ рд╣реИрдВ: рдореБрдЭреЗ рддреБрд░рдВрдд рдпрд╣ рдмрддрд╛рдиреЗ рдХрд╛ рд╡рд┐рдХрд▓реНрдк рдирд╣реАрдВ рдорд┐рд▓рд╛ рдХрд┐ рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдХрд╣рд╛рдВ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рдореБрдЭреЗ рд╣рд░ рдмрд╛рд░ PHP рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж рдЗрд╕ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдХреЛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдирд╛ рдкрдбрд╝рд╛:
 $ php/php-5.2.17/sapi/cli/php -d extension_dir=/usr/lib/php5/20060613 PHP Warning: Module 'curl' already loaded in Unknown on line 0 

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

рджрд░рдЕрд╕рд▓, рд▓реЙрдиреНрдЪ рдФрд░ рдбреЗрдмреНрдпреВ


рдЕрдирд╛рд╡рд╢реНрдпрдХ рдЬрд╛рдирдХрд╛рд░реА рдХреЗ рд╕рд╛рде рдкрд╛рдардХ рдХреЛ рдЕрдзрд┐рднрд╛рд░ рди рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП, рдореИрдВрдиреЗ PHP рдореЗрдВ рдПрдХ рдЫреЛрдЯреА рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдмрдирд╛рдИ рд╣реИ рдЬрд╣рд╛рдБ рдЖрдк рдбреАрдмрдЧ рд╕реБрд╡рд┐рдзрд╛рдУрдВ рдХреЛ gdb рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ:
 <?php class A { protected $_a = NULL; public function __construct($a) { $this->_a = $a; } public function run() { while (true) { sleep(1); } } } class B { protected $_a = NULL; protected $_b = NULL; public function __construct() { $this->_b = rand(1000, 9999); $this->_a = new A(rand(1000, 9999)); } public function run() { $this->_a->run(); } } $b = new B; $b->run(); 

рддреЛ, рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдЪрд▓рд╛рдПрдБ:
 $ php/php-5.2.17/sapi/cli/php -d extension_dir=/usr/lib/php5/20060613 test/test.php 

рд╣рдо рдЕрдкрдиреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЗ PID рдХреЛ рджреЗрдЦрддреЗ рд╣реИрдВ рдФрд░ рджреВрд╕рд░реЗ рдЯрд░реНрдорд┐рдирд▓ рдореЗрдВ GDB рдЪрд▓рд╛рддреЗ рд╣реИрдВ:
 $ ps auwx | grep test.php $ gdb GNU gdb 6.8-debian Copyright (C) 2008 Free Software Foundation, Inc. ...... This GDB was configured as "x86_64-linux-gnu". (gdb) 

рд╣рдорд╛рд░реА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдореЗрдВ рд╕рдВрд▓рдЧреНрди рдХрд░реЗрдВ:
 (gdb) attach 7455 Attaching to process 7455 Reading symbols from /<homedir>/php/php-5.2.17/sapi/cli/php...done. ..... Reading symbols from /<homedir>/libs/lib/libcurl.so.4...done. Loaded symbols for /<homedir>/libs/lib/libcurl.so.4 ..... 0x00007fd9e6c22040 in nanosleep () from /lib/libc.so.6 (gdb) 

рдЕрдЧрд░ рд╣рдо [lib] ..... рд╕реЗ рдкрдарди рдкреНрд░рддреАрдХреЛрдВ рдХреЛ рджреЗрдЦрддреЗ рд╣реИрдВ - рддреЛ рд╕рдм рдХреБрдЫ рдареАрдХ рд╣реЛ рдЧрдпрд╛, рдФрд░ рд╣рдо рдЗрд╕ рдмрд╛рдЗрдирд░реА рдХреЛ рд╕реБрд░рдХреНрд╖рд┐рдд рд░реВрдк рд╕реЗ рдбреАрдмрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рд╣рдо рдкреАрдЫреЗ рджреЗрдЦрддреЗ рд╣реИрдВ
(gdb) bt
#0 0x00007fd9e6c22040 in nanosleep () from /lib/libc.so.6
#1 0x00007fd9e6c21e97 in sleep () from /lib/libc.so.6
#2 0x0000000000587277 in zif_sleep (ht=1, return_value=0x278c010, return_value_ptr=0x0, this_ptr=0x0,
return_value_used=0) at /[homedir]/php/php-5.2.17/ext/standard/basic_functions.c:4794
#3 0x000000000068a733 in zend_do_fcall_common_helper_SPEC (execute_data=0x7fff0b7d6310)
at /[homedir]/php/php-5.2.17/Zend/zend_vm_execute.h:200
#4 0x0000000000690204 in ZEND_DO_FCALL_SPEC_CONST_HANDLER (execute_data=0x7fff0b7d6310)
at /[homedir]/php/php-5.2.17/Zend/zend_vm_execute.h:1740
#5 0x000000000068a221 in execute (op_array=0x278ad38)
at /[homedir]/php/php-5.2.17/Zend/zend_vm_execute.h:92
#6 0x00007fd9e655b90f in zend_oe () from /usr/lib/php5/20060613/ZendOptimizer.so
#7 0x000000000068a886 in zend_do_fcall_common_helper_SPEC (execute_data=0x7fff0b7d6570)
at /[homedir]/php/php-5.2.17/Zend/zend_vm_execute.h:234
#8 0x000000000068b3af in ZEND_DO_FCALL_BY_NAME_SPEC_HANDLER (execute_data=0x7fff0b7d6570)
at /[homedir]/php/php-5.2.17/Zend/zend_vm_execute.h:322
#9 0x000000000068a221 in execute (op_array=0x278b8c0)
at /[homedir]/php/php-5.2.17/Zend/zend_vm_execute.h:92
#10 0x00007fd9e655b90f in zend_oe () from /usr/lib/php5/20060613/ZendOptimizer.so
#11 0x000000000068a886 in zend_do_fcall_common_helper_SPEC (execute_data=0x7fff0b7d68a0)
at /[homedir]/php/php-5.2.17/Zend/zend_vm_execute.h:234
#12 0x000000000068b3af in ZEND_DO_FCALL_BY_NAME_SPEC_HANDLER (execute_data=0x7fff0b7d68a0)
at /[homedir]/php/php-5.2.17/Zend/zend_vm_execute.h:322
#13 0x000000000068a221 in execute (op_array=0x2787b88)
at /[homedir]/php/php-5.2.17/Zend/zend_vm_execute.h:92
#14 0x00007fd9e655b90f in zend_oe () from /usr/lib/php5/20060613/ZendOptimizer.so
#15 0x0000000000665598 in zend_execute_scripts (type=8, retval=0x0, file_count=3)
at /[homedir]/php/php-5.2.17/Zend/zend.c:1134
#16 0x0000000000615608 in php_execute_script (primary_file=0x7fff0b7d8ee0)
at /[homedir]/php/php-5.2.17/main/main.c:2036
#17 0x00000000006dfa82 in main (argc=4, argv=0x7fff0b7d90f8)
at /[homedir]/php/php-5.2.17/sapi/cli/php_cli.c:1165
(gdb)

рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рд╣рдо рдирд┐рд╖реНрдкрд╛рджрди рдХреЗ рдЕрдВрджрд░ рдлреНрд░реЗрдо рдореЗрдВ рд░реБрдЪрд┐ рд░рдЦрддреЗ рд╣реИрдВ () [Zend / zend_vm_execute.h: 92]ред рдпреЗ PHP рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд▓рд┐рдП рдХреЙрд▓ рд╣реИрдВред рдпрд╣ рдЬрд╛рдирдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐ PHP рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ рд╣рдо рдЗрд╕ рд╕рдордп рдХрд╣рд╛рдВ рд╣реИрдВ:
(gdb) f 13
#13 0x000000000068a221 in execute (op_array=0x2d3fb88)
at /[homedir]/php/php-5.2.17/Zend/zend_vm_execute.h:92
92 if (EX(opline)->handler(&execute_data TSRMLS_CC) > 0) {
(gdb) print execute_data.function_state.function->common.scope->name
$20 = 0x2d423a0 "B"
(gdb) print execute_data.function_state.function->common.function_name
$21 = 0x2d43790 "run"
(gdb) print execute_data.opline->lineno
$22 = 28
(gdb) f 9
#9 0x000000000068a221 in execute (op_array=0x2d438c0)
at /[homedir]/php/php-5.2.17/Zend/zend_vm_execute.h:92
92 if (EX(opline)->handler(&execute_data TSRMLS_CC) > 0) {
(gdb) print execute_data.function_state.function->common.scope->name
$23 = 0x2d42380 "A"
(gdb) print execute_data.function_state.function->common.function_name
$24 = 0x2d44c48 "run"
(gdb) print execute_data.opline->lineno
$25 = 23
(gdb) f 5
#5 0x000000000068a221 in execute (op_array=0x2d42d38)
at /[homedir]/php/php-5.2.17/Zend/zend_vm_execute.h:92
92 if (EX(opline)->handler(&execute_data TSRMLS_CC) > 0) {
(gdb) print execute_data.function_state.function->common.function_name
$26 = 0x770781 "sleep"
(gdb) print execute_data.opline->lineno
$27 = 10
(gdb)

рдХреБрдЫ рд╕реНрдкрд╖реНрдЯреАрдХрд░рдг: f [рд╕рдВрдЦреНрдпрд╛] рд╣рдореЗрдВ рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рдлреНрд░реЗрдо рдореЗрдВ рдлреЗрдВрдХ рджреЗрддрд╛ рд╣реИ, рдкреНрд░рд┐рдВрдЯ [chetatam] - рдПрдХ рдЪрд░рд┐рддреНрд░ рдХреЛ рдкреНрд░рд┐рдВрдЯ рдХрд░реЗрдВ рдЬреЛ рдЗрд╕ рдлреНрд░реЗрдо рдХреЗ рджрд╛рдпрд░реЗ рдореЗрдВ рд╣реИред
рдКрдкрд░ рджрд┐рдП рдЧрдП рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, рд╣рдореЗрдВ рдХрдХреНрд╖рд╛ рдХрд╛ рдирд╛рдо, рд╡рд┐рдзрд┐ / рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдирд╛рдо рдФрд░ рд▓рд╛рдЗрди рдирдВрдмрд░ рдорд┐рд▓рд╛ рд╣реИ, рдЬрд╣рд╛рдВ рдЗрд╕реЗ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ (рдлреНрд░реЗрдо 5 рдореЗрдВ, рд╡рд░реНрдЧ рдирд╛рдо рдкрд░рд┐рднрд╛рд╖рд┐рдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдПрдХ рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рдиреАрдВрдж () рдлрд╝рдВрдХреНрд╢рди) рд╣реИред рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рд╣рдореЗрдВ рдПрдХ рдмреИрдХрд╕реНрдЯреНрд░реЗрд╕ PHP рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдорд┐рд▓реАред рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЗрд╕ рдЬрд╛рдирдХрд╛рд░реА рдХреЗ рдЖрдзрд╛рд░ рдкрд░, рдХреЛрдИ рдпрд╣ рд╕рдордЭ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рд▓реЗрдЦ рдХреА рд╢реБрд░реБрдЖрдд рдореЗрдВ рд╡рд░реНрдгрд┐рдд рдорд╛рдпрд╛рд╡реА рдмрдЧ рдХреЗ рдкреИрд░ рдХрд╣рд╛рдВ рд╕реЗ рдЖрддреЗ рд╣реИрдВред

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

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


All Articles