PHP рдПрдХреНрд╕рдЯреЗрдВрд╢рди рд▓рд┐рдЦрдирд╛

рдФрд░ рдЖрдЬ рдЖрдЗрдП PHP рдХреЛ рдереЛрдбрд╝рд╛ рдЕрд▓рдЧ рджреГрд╖реНрдЯрд┐рдХреЛрдг рд╕реЗ рджреЗрдЦреЗрдВ, рдФрд░ рдЗрд╕рдХреЗ рд▓рд┐рдП рдПрдХ рд╡рд┐рд╕реНрддрд╛рд░ рд▓рд┐рдЦреЗрдВред рдЪреВрдБрдХрд┐ рдЗрд╕ рд╡рд┐рд╖рдп рдкрд░ Habr├й ( рдпрд╣рд╛рдБ рдФрд░ рдпрд╣рд╛рдБ ) рдкрд░ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдкреНрд░рдХрд╛рд╢рди рд╣реЛ рдЪреБрдХреЗ рд╣реИрдВ, рд╣рдо рдЙрди рдХрд╛рд░рдгреЛрдВ рдкрд░ рдзреНрдпрд╛рди рдирд╣реАрдВ рджреЗрдВрдЧреЗ, рдЬреЛ рдЙрдкрдпреЛрдЧреА рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдЬреЛ рд╡реНрдпрд╡рд╣рд╛рд░ рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВред рдпрд╣ рдЖрд▓реЗрдЦ рдЖрдкрдХреЛ рдмрддрд╛рдПрдЧрд╛ рдХрд┐ рд╡рд┐рдЬрд╝реБрдЕрд▓ рд╕реА ++ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╡рд┐рдВрдбреЛрдЬ рдХреЗ рддрд╣рдд рдФрд░ рдЬреАрд╕реАрд╕реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдбреЗрдмрд┐рдпрди рдХреЗ рддрд╣рдд рд╕рд░рд▓ рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдХреИрд╕реЗ рдмрдирд╛рдпрд╛ рдЬрд╛рдПред рдореИрдВ рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдХреЗ рдЕрдВрджрд░ PHP рд╕рд░рдгрд┐рдпреЛрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХреЛ рдЙрдЬрд╛рдЧрд░ рдХрд░рдиреЗ рдФрд░ рдореВрд▓ PHP рдореЗрдВ рд▓рд┐рдЦреЗ рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдХреЗ рдкреНрд░рджрд░реНрд╢рди рдХреА рддреБрд▓рдирд╛ рдХрд░рдиреЗ рдФрд░ рд╕реА рдореЗрдВ рд▓рд┐рдЦреЗ рдЧрдП рдХреЛрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рднреА рдХреЛрд╢рд┐рд╢ рдХрд░реВрдВрдЧрд╛ред


Win32 рдХреЗ рддрд╣рдд рд╕рдВрдХрд▓рди


рддреЛ, рдЪрд▓реЛ рд╡рд┐рдВрдбреЛрдЬ рдХреЗ рд╕рд╛рде рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВред рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рдЬрд╛рдирддреЗ рд╣реИрдВ , PHP рдбреЗрд╡рд▓рдкрд░реНрд╕ рд╡рд┐рдВрдбреЛрдЬ рдХреЗ рддрд╣рдд рдЕрдкрдиреЗ рджрд┐рдорд╛рдЧ рдХреА рдЙрдкрдЬ рдХреЛ рд╕рдВрдХрд▓рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╡рд┐рдЬреБрдЕрд▓ C ++ 9 рдпрд╛ рд╡рд┐рдЬреБрдЕрд▓ рд╕реНрдЯреВрдбрд┐рдпреЛ 2008 рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред рдЗрд╕рд▓рд┐рдП, рд╣рдо рд╡рд┐рдЬрд╝реБрдЕрд▓ рд╕реНрдЯреВрдбрд┐рдпреЛ 2008 рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗ, рдПрдХ рдореБрдлреНрдд рдПрдХреНрд╕рдкреНрд░реЗрд╕ рд╕рдВрд╕реНрдХрд░рдг рднреА рдЙрдкрдпреБрдХреНрдд рд╣реИ, рд╕рд╛рде рд╣реА, рд╣рд╛рд▓рд╛рдВрдХрд┐, рд╢рд╛рдпрдж, рдмрд╛рдж рдореЗрдВ рдФрд░ рд╕реНрдЯреВрдбрд┐рдпреЛ рдХреЗ рдкреБрд░рд╛рдиреЗ рд╕рдВрд╕реНрдХрд░рдгред

рд╣рдореЗрдВ рдХреНрдпрд╛ рдЪрд╛рд╣рд┐рдП:рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, Win32 рдХрдВрд╕реЛрд▓ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдкреНрд░рдХрд╛рд░ рдХреА рдПрдХ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдмрдирд╛рдПрдВ рдФрд░ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдкреНрд░рдХрд╛рд░ рдореЗрдВ рдПрдХ DLL рдЪреБрдиреЗрдВред рдЕрдм рд╣рдореЗрдВ рд▓рд┐рдВрдХрд░ рдХреЗ рд▓рд┐рдП рд╕рднреА рдирд┐рд░реНрднрд░рддрд╛ рдФрд░ рд░рд╛рд╕реНрддреЛрдВ рдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рдирд╛ рд╣реЛрдЧрд╛:рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдореЗрдВ stdafx.h рдлрд╝рд╛рдЗрд▓ рдЦреЛрдЬреЗрдВ рдФрд░ рдЙрд╕рдХреА рд╕рд╛рдордЧреНрд░реА рдХреЛ рдирд┐рдореНрди рдХреЗ рд╕рд╛рде рдмрджрд▓реЗрдВ:
#ifndef STDAFX #define STDAFX #define PHP_COMPILER_ID "VC9" //        PHP,  Visual C++ 9.0 #include "zend_config.w32.h" #include "php.h" #endif 

рдпрджрд┐ рдЖрдк рдЗрд╕ рд╕реНрддрд░ рдкрд░ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЛ рд╕рдВрдХрд▓рд┐рдд рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдЖрдкрдХреЛ рдпрд╣ рдХрд╣рддреЗ рд╣реБрдП рдПрдХ рддреНрд░реБрдЯрд┐ рдорд┐рд▓реЗрдЧреА рдХрд┐ main \ config.w32.h рдЧрд╛рдпрдм рд╣реИред рдЖрдк рдЗрд╕реЗ рдореБрдЦреНрдп \ config.bat рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдЪрд▓рд╛рдХрд░ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдпрд╛ рдЖрдк рдЗрд╕реЗ рд╕реНрд░реЛрддреЛрдВ рд╕реЗ рдЦреАрдВрдЪ рд╕рдХрддреЗ рд╣реИрдВ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, PHP рд╕рдВрд╕реНрдХрд░рдг 5.2ред рдЗрд╕ рд╕реНрдерд┐рддрд┐ рдореЗрдВ, рдЗрд╕ рдлрд╝рд╛рдЗрд▓ рдХреЗ рд╕рднреА рдкрдереЛрдВ рдХреЛ рд╕рдВрдкрд╛рджрд┐рдд рдХрд░рдирд╛ рди рднреВрд▓реЗрдВ рдФрд░ "#define HAVE_SOCKLEN_T" рдирд┐рд░реНрджреЗрд╢ рдХреЛ рдЕрдирд▓рд╛рдЗрдХ рдХрд░реЗрдВред рдЕрдм рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЛ рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЗ рдмрд┐рдирд╛ рд╕рдВрдХрд▓рди рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред

рдЕрдм рд╣реИрд▓реЛ рджреБрдирд┐рдпрд╛ рд▓рд┐рдЦрддреЗ рд╣реИрдВ, рд╣рдорд╛рд░реА cpp рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдЬреЛрдбрд╝реЗрдВ:

 PHP_FUNCTION(test); const zend_function_entry test_functions[] = { PHP_FE(test, NULL) {NULL, NULL, NULL} }; zend_module_entry test_module_entry = { STANDARD_MODULE_HEADER, // #if ZEND_MODULE_API_NO >= 20010901 "test", //   test_functions, //    NULL, // PHP_MINIT(test), Module Initialization NULL, // PHP_MSHUTDOWN(test), Module Shutdown NULL, // PHP_RINIT(test), Request Initialization NULL, // PHP_RSHUTDOWN(test), Request Shutdown NULL, // PHP_MINFO(test), Module Info ( phpinfo()) "0.1", //    STANDARD_MODULE_PROPERTIES }; ZEND_GET_MODULE(test) PHP_FUNCTION(test) { RETURN_STRING("hello habr", 1); //  PHP-,   ,         } 

рдЕрдм рдЗрд╕ рдореЙрдбреНрдпреВрд▓ рдХреЛ PHP рдореЗрдВ рдкреНрд▓рдЧ рдХрд░реЗрдВ рдФрд░ рдХреБрдЫ рдЗрд╕ рддрд░рд╣ рдЪрд▓рд╛рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░реЗрдВ:
 php -r "test();" 
рд╣рдореЗрдВ "рд╣реЗрд▓реЛ рд╣рдмреНрд░" рдХрд╛ рдЬрд╡рд╛рдм рдХреНрдпрд╛ рдорд┐рд▓рдирд╛ рдЪрд╛рд╣рд┐рдПред


* рдирд┐рдХреНрд╕ рдХреЗ рддрд╣рдд рд╕рдВрдХрд▓рди


* рдирд┐рдХреНрд╕ рдореЗрдВ, рд╕рдм рдХреБрдЫ рд╣рдореЗрд╢рд╛ рдХреА рддрд░рд╣ рд╕рд░рд▓ рд╣реЛ рдЧрдпрд╛ред рдореИрдВ рдбреЗрдмрд┐рдпрди рдХреЗ рдЙрджрд╛рд╣рд░рдг рдкрд░ рджрд┐рдЦрд╛рдКрдВрдЧрд╛, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЕрдиреНрдп рдкреНрд░рдгрд╛рд▓рд┐рдпреЛрдВ рдХреЗ рддрд╣рдд рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдЕрд▓рдЧ рдирд╣реАрдВ рд╣реЛрдЧреАред
рд╣рдореЗрдВ рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреА:рдЖрдЗрдП рд╣рдорд╛рд░реЗ рд╡рд┐рд╕реНрддрд╛рд░ рдХреЗ рд▓рд┐рдП рдХрд╣реАрдВ рдПрдХ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдмрдирд╛рдПрдВред рдЦреИрд░, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП / рдкрд░реАрдХреНрд╖рдгред рд╡рд╣рд╛рдБ рд╣рдо рджреЛ рдЦрд╛рд▓реА рдлрд╛рдЗрд▓ рдмрдирд╛рддреЗ рд╣реИрдВ:
 config.m4
 test.c

рдкрд╣рд▓реЗ рд╡рд┐рд╕реНрддрд╛рд░ рдХреЛ рдЬрд╛рджреБрдИ рд░реВрдк рд╕реЗ рд╕рдВрдХрд▓рд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдФрд░ рджреВрд╕рд░рд╛ рдЗрд╕рдХрд╛ рд╕реНрд░реЛрдд рдХреЛрдб рд╣реЛрдЧрд╛ред Config.m4 рдореЗрдВ, рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд▓рд┐рдЦреЗрдВ:
 PHP_ARG_ENABLE(test, Enable test support) if test "$PHP_TEST" = "yes"; then AC_DEFINE(HAVE_TEST, 1, [You have test extension]) PHP_NEW_EXTENSION(test, test.c, $ext_shared) fi 

рдЕрдВрджрд░ Test.c add
 #include "php.h" 

рдФрд░ рдЗрд╕ рд╕рдордп рд╕реАрдорд╛ рдХреЗ рдмрд╛рдж, рд╡рд┐рдВрдбреЛрдЬ рд╕рдВрд╕реНрдХрд░рдг рд╕реЗ рд╕реАрдкреАрдкреА рдлрд╝рд╛рдЗрд▓ рдХреА рд╕рд╛рдордЧреНрд░реА рдХреА рдкреНрд░рддрд┐рд▓рд┐рдкрд┐ рдмрдирд╛рдПрдБред
рдЕрдм рдХрдВрд╕реЛрд▓ рдкрд░ рдЬрд╛рдПрдВ рдФрд░:
 # phpize //        # ./configure //  makefile # make //  # make install //  .so    PHP  

рд╡рд╣ рд╕рдм рд╣реИред рдЕрдм рдЖрдк php.ini рдЦреЛрд▓ рд╕рдХрддреЗ рд╣реИрдВ, рд╡рд╣рд╛рдВ рдЕрдкрдирд╛ рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдЬреЛрдбрд╝реЗрдВ:
 extension = test.so

рдФрд░ рдЗрд╕рдХреА рдкреНрд░рджрд░реНрд╢рди рдЯреАрдо рдХреА рдЬрд╛рдБрдЪ рдХрд░реЗрдВ
 php -r "test();" 


рддрд░реНрдХ рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рдФрд░ рд╡рд╛рдкрд╕реА рдорд╛рди



рдкрд╣рд▓реЗ, рдЖрдЗрдП рджреЗрдЦреЗрдВ рдХрд┐ рдЖрдк рддрд░реНрдХ рдХреИрд╕реЗ рд▓реЗ рд╕рдХрддреЗ рд╣реИрдВ:
 char* text; int text_length; if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s", &text, &text_lenght) == FAILURE) { return; } 

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

рдЖрдк рд╕рд░рд▓ рдФрд░ рдЬрдЯрд┐рд▓ рджреЛрдиреЛрдВ рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЛ рд╡рд╛рдкрд╕ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЖрдЗрдП рд▓реМрдЯреЗ рд╣реБрдП рд╕рд░рдгреА рдХреЗ рдЧрдарди рд╕реЗ рдкрд░рд┐рдЪрд┐рдд рд╣реЛрдВред рдпрд╣ рджрд░реНрд╢рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐ рдПрдХ рд╕рд░рдгреА рд╡рд╛рдкрд╕ рдЖ рдЬрд╛рдПрдЧреА, рдЗрд╕реЗ рдЖрд░рдВрднреАрдХреГрдд рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП:
 array_init(result); 

рд╕рд░рдгреА рдореЗрдВ рдорд╛рди рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдЙрди рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ рдЬреЛ рдирд┐рд░реНрднрд░ рдХрд░рддреЗ рд╣реИрдВ рдХрд┐ рдХрд┐рд╕ рдЗрдВрдбреЗрдХреНрд╕ рдФрд░ рдорд╛рди рдХреЛ рд╕рд░рдгреА рдореЗрдВ рдЬреЛрдбрд╝рд╛ рдЬрд╛рддрд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП:
 add_next_index_long(result, 42); // $result[] = 42; add_assoc_bool(result, "foo", 1); // $result['foo'] = true; add_next_index_null(result); // $result[] = NULL; 

рд╕реБрд╡рд┐рдзрд╛рдУрдВ рдХреА рдПрдХ рдкреВрд░реА рд╕реВрдЪреА рдпрд╣рд╛рдВ рдкрд╛рдИ рдЬрд╛ рд╕рдХрддреА рд╣реИред

рдЕрдЧрд░ рдХрд┐рд╕реА рдХреЛ рджрд┐рд▓рдЪрд╕реНрдкреА рд╣реИ, рддреЛ рдЕрдЧрд▓реЗ рд▓реЗрдЦ рдореЗрдВ рдореИрдВ рд╡рд╕реНрддреБрдУрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рдПрдХ рдЙрджрд╛рд╣рд░рдг рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ (рд╡рд╕реНрддреБрдУрдВ рдкрд░ рд╡рд┐рд╕реНрддрд╛рд░ рдХрд╛ рдХреНрд▓рд╛рд╕рд┐рдХ рдЙрджрд╛рд╣рд░рдг myslili рд╣реИ)ред рдЗрд╕ рд╡рд┐рд╖рдп рдкрд░ рдПрдХ рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рд▓реЗрдЦ рд╣реИред


рдЙрддреНрдкрд╛рджрдХрддрд╛


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

рдореБрдЭреЗ рдЗрд╕ рддрд░рд╣ рдХрд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдорд┐рд▓рд╛, рдХреЛрдб рдХреЗ рд▓рд┐рдП рдЬреНрдпрд╛рджрд╛ рдХрд┐рдХ рди рдХрд░реЗрдВ, рдореИрдВ рдЕрднреА рднреА рд╕реА рдХреА рддреБрд▓рдирд╛ рдореЗрдВ PHP рдореЗрдВ рдЕрдзрд┐рдХ рд▓рд┐рдЦрддрд╛ рд╣реВрдВ:

 PHP_FUNCTION(calculate_chars) { char* text; int text_length; if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s", &text, &text_length) == FAILURE) { return; } array_init(return_array); int table[256] = { 0 }; for (int i = 0; i < text_length; i++) { table[((unsigned char*)text)[i]]++; } char str[2]; str[1] = '\0'; for (int i = 0; i < 256; i++) { if (table[i]) { str[0] = (char)i; add_assoc_long(return_array, str, table[i]); } } } 

рдпрд╣ рдХреЛрдб рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдкрд░рд┐рдгрд╛рдо рдЙрддреНрдкрдиреНрди рдХрд░рддрд╛ рд╣реИ:
 user> php -r "print_r( calculate_chars('example') );" Array ( [a] => 1 [e] => 2 [l] => 1 [m] => 1 [p] => 1 [x] => 1 } 

рдЕрдм рдЗрд╕ рдХреЛрдб рдХреА рдирд┐рд╖реНрдкрд╛рджрди рдЧрддрд┐ рдХреА рддреБрд▓рдирд╛ рдХрд░реЗрдВ рдФрд░ рджреЗрд╢реА PHP рдореЗрдВ рд╕рдорд╛рди рдХрд░реЗрдВ:

 $map = array(); for ($i = 0; $i < $length; $i++) { $char = $text[$i]; if (isset($map[$char])) { $map[$char]++; } else { $map[$char] = 1; } } 

рдореИрдВ рдорд╛рдЗрдХреНрд░реЛрдЯрд╛рдЗрдо рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рджреЛрдиреЛрдВ рд╕рдорд╛рдзрд╛рдиреЛрдВ рдХреЗ рдирд┐рд╖реНрдкрд╛рджрди рд╕рдордп рдХреА рддреБрд▓рдирд╛ рдХрд░реВрдВрдЧрд╛ ред 100 рд╡рд░реНрдгреЛрдВ рдХреА рдПрдХ рд╕реНрдЯреНрд░рд┐рдВрдЧ рд▓реЗрдВ, 5000 рд╡рд░реНрдгреЛрдВ рдХреА рдПрдХ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдФрд░ 69,000 рд╡рд░реНрдгреЛрдВ рдХреА рдПрдХ рд╕реНрдЯреНрд░рд┐рдВрдЧ (рдореИрдВрдиреЗ рдЪрд╛рд░реНрд▓реНрд╕ рдбрд┐рдХреЗрдВрд╕ рджреНрд╡рд╛рд░рд╛ рд▓рд┐рдЦреА рдЧрдИ рдкреБрд╕реНрддрдХ A Message from the Sea, рдореБрдЭреЗ рдЖрд╢рд╛ рд╣реИ рдХрд┐ рд╡рд╣ рдореБрдЭреЗ рдорд╛рдл рдХрд░ рджреЗрдЧрд╛), рдФрд░ рдкреНрд░рддреНрдпреЗрдХ рд╡рд┐рдХрд▓реНрдк рдХреЗ рд▓рд┐рдП рдореИрдВ рджреЛрдиреЛрдВ рд╕рдорд╛рдзрд╛рдиреЛрдВ рдХреЛ рдХрдИ рд╣рдЬрд╛рд░ рдмрд╛рд░ рдЪрд▓рд╛рдКрдВрдЧрд╛ред ред рдкрд░рд┐рдгрд╛рдо рдиреАрдЪреЗ рджреА рдЧрдИ рддрд╛рд▓рд┐рдХрд╛ рдореЗрдВ рджрд┐рдЦрд╛рдП рдЧрдП рд╣реИрдВред рдореЗрд░реЗ рдбреЗрдмрд┐рди рдХреЗ рд╕рд╛рде рдмреЛрд░реНрдб рдкрд░ рдбреЗрдмреНрдпреВ рдХреЗ рд╕рд╛рде рдореЗрд░реЗ рдиреЙрди-рдкрд╛рд╡рд░рдлреБрд▓ рд╣реЛрдо рд▓реИрдкрдЯреЙрдк рдФрд░ рд╡реАрдбреАрдПрд╕ рдкрд░ рдкрд░реАрдХреНрд╖рдг рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рдФрд░ рд╣рд╛рдВ, рдореИрдВ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рд╕рдордЭрддрд╛ рд╣реВрдВ рдХрд┐ рдкрд░рд┐рдгрд╛рдо рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдСрдкрд░реЗрдЯрд┐рдВрдЧ рд╕рд┐рд╕реНрдЯрдо, рдкреАрдПрдЪрдкреА, рд╡рд╛рдпреБрдордВрдбрд▓реАрдп рджрдмрд╛рд╡ рдФрд░ рд╣рд╡рд╛ рдХреА рджрд┐рд╢рд╛ рдХреЗ рд╕рдВрд╕реНрдХрд░рдг рдкрд░, рд▓реЗрдХрд┐рди рдХреЗрд╡рд▓ рдЕрдиреБрдорд╛рдирд┐рдд рдЖрдВрдХрдбрд╝реЗ рджрд┐рдЦрд╛рдирд╛ рдЪрд╛рд╣рддреЗ рдереЗред ред
рдЯреЗрд╕реНрдЯ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХрд╛ рдкреВрд░рд╛ рдХреЛрдб рдпрд╣рд╛рдВ рдбрд╛рдЙрдирд▓реЛрдб рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ ред рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдХреЗ рд╕реНрд░реЛрдд рдФрд░ рдмрд╛рдпрдиреЗрд░рд┐рдЬрд╝ рдЦреБрдж рдпрд╣рд╛рдВ (рдЬреАрдд) рдФрд░ рдпрд╣рд╛рдВ (рдирд┐рдХреНрд╕) рдбрд╛рдЙрдирд▓реЛрдб рдХрд┐рдП рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВред
рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐рдпреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛PHP рдХреЛрдб / Win32PHP рдХреЛрдб / рдбреЗрдмрд┐рдпрдиPHP рдПрдХреНрд╕рдЯреЗрдВрд╢рди / Win32PHP рд╡рд┐рд╕реНрддрд╛рд░ / рдбреЗрдмрд┐рдпрдирдЬреАрдд 32 рдХреА рдЬреАрддрдбреЗрдмрд┐рдпрди рдЬреАрдд
1. 100 рд╡рд░реНрдгреЛрдВ рдХреА рдПрдХ рд╕реНрдЯреНрд░рд┐рдВрдЧ100000084.7566 рд╕реЗрдХрдВрдб72.5617 рд╕реЗрдХрдВрдб8.4750 рд╕реЗрдХрдВрдб4.4175 рд╕реЗрдХреЗрдВрдб10 рдмрд╛рд░16.43 рдмрд╛рд░
2. рд▓рд╛рдЗрди 5000 рд╡рд░реНрдг1000039.1012 рд╕реЗрдХ31.7541 рд╕реЗрдХрдВрдб0.5001 рд╕реЗрдХрдВрдб0.134 рд╕реЗрдХрдВрдб78.19 рдмрд╛рд░236.98 рдмрд╛рд░
3. 69,000 рд╡рд░реНрдгреЛрдВ рдХреА рдПрдХ рд╕реНрдЯреНрд░рд┐рдВрдЧ100052.3378 рд╕реЗрдХрдВрдб44.0647 рд╕реЗрдХрдВрдб0.4875 рд╕реЗрдХрдВрдб0.0763 рд╕реЗрдХрдВрдбрезреж.3.рейрем рдмрд╛рд░577.51 рдмрд╛рд░

рдирд┐рд╖реНрдХрд░реНрд╖


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

UPD1ред Count_chars рдХреЗ рд╕рд╛рде рддреБрд▓рдирд╛
рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдореЗрдВ рдПрдХ рджрд┐рд▓рдЪрд╕реНрдк рд╕рд╡рд╛рд▓ рдкреВрдЫрд╛ рдЧрдпрд╛: рдХреНрдпрд╛ рд╣реЛрдЧрд╛ рдпрджрд┐ рд╣рдо count_chars рдлрд╝рдВрдХреНрд╢рди рдХреЗ рдкреНрд░рджрд░реНрд╢рди рдХреЗ рд╕рд╛рде рддреБрд▓рдирд╛ рдХрд░рддреЗ рд╣реИрдВ?
рдореИрдВрдиреЗ рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐рдпреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдХреЛ рд╕реМ рдЧреБрдирд╛ рдмрдврд╝рд╛ рджрд┐рдпрд╛, рдФрд░ рдЙрд╕реА рдкрд░реАрдХреНрд╖рдг рдХреЛ рдЪрд▓рд╛рдпрд╛, рд▓реЗрдХрд┐рди рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЗрд╕ рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рдерд╛ред рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдбреЗрдмрд┐рдпрди рдкрд░ рдкрд░рд┐рдгрд╛рдо рд▓рдЧрднрдЧ рдмрд░рд╛рдмрд░ рд╣реИрдВ, рдФрд░ рд╡рд┐рдВрдбреЛрдЬ рдХреЗ рддрд╣рдд рдПрдХ рджрд┐рд▓рдЪрд╕реНрдк рд╕реНрдерд┐рддрд┐ рд╣реИ: рдЬрд┐рддрдирд╛ рдЕрдзрд┐рдХ рдбреЗрдЯрд╛, рдЙрддрдирд╛ рд╣реА рдЕрдзрд┐рдХ рдореЗрд░рд╛ рдореЙрдбреНрдпреВрд▓ рдкреНрд░рджрд░реНрд╢рди рдореЗрдВ рд╡рд┐рд▓реАрди рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред рдЖрдкрдХреЛ рдпрд╛рдж рджрд┐рд▓рд╛ рджреВрдВ рдХрд┐ рдкрд░реАрдХреНрд╖рдг рдХрд╛ рд╡рд┐рдЪрд╛рд░ рд╕рд╛рдЗрдХрд┐рд▓ рд▓рд┐рдЦрдирд╛ рдирд╣реАрдВ рдерд╛, рдмрд▓реНрдХрд┐ рдмрдбрд╝реА рдорд╛рддреНрд░рд╛ рдореЗрдВ рдбреЗрдЯрд╛ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рд▓реЗрдирд╛ рдерд╛ред
рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐рдпреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛count_chars / win32count_chars / рдбреЗрдмрд┐рдпрдирд╡рд┐рд╕реНрддрд╛рд░ / win32рд╡рд┐рд╕реНрддрд╛рд░ / рдбреЗрдмрд┐рдпрдирдЬреАрдд 32 рдХреА рдЬреАрддрдбреЗрдмрд┐рдпрди рдЬреАрдд
1. 100 рд╡рд░реНрдгреЛрдВ рдХреА рдПрдХ рд╕реНрдЯреНрд░рд┐рдВрдЧ1000000067.5245 рд╕реЗрдХрдВрдб47.8104 рд╕реЗрдХрдВрдб81.8185 рд╕реЗрдХрдВрдб43.8091 рд╕реЗрдХреЗрдВрдб0.83 рдмрд╛рд░1.09 рдмрд╛рд░
2. рд▓рд╛рдЗрди 5000 рд╡рд░реНрдг100000022.4693 рд╕реЗрдХреЗрдВрдб12.8959 рд╕реЗрдХреЗрдВрдб47.2514 рд╕реЗрдХрдВрдб12.9577 рд╕реЗрдХрдВрдб0.48 рдмрд╛рд░0.99 рдЧреБрдирд╛
3. 69,000 рд╡рд░реНрдгреЛрдВ рдХреА рдПрдХ рд╕реНрдЯреНрд░рд┐рдВрдЧ10000015.0681 рд╕реЗрдХрдВрдб7.661 рд╕реЗрдХрдВрдб46.9598 рд╕реЗрдХ7.7387 рд╕реЗрдХрдВрдб0.32 рдмрд╛рд░0.99 рдЧреБрдирд╛


рд╕рд╛рдордЧреНрд░реА

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


All Articles