From 27e18d996abb0a410620b082bdf6e541bb00963b Mon Sep 17 00:00:00 2001 From: Daniel Kesselberg Date: Wed, 26 Apr 2023 21:32:01 +0200 Subject: [PATCH] feat: add function cpu_cores Returns the number of processors which are currently online Signed-off-by: Daniel Kesselberg --- ext/standard/basic_functions.c | 23 +++++++++++++++++++ ext/standard/basic_functions.stub.php | 2 ++ ext/standard/basic_functions_arginfo.h | 6 ++++- .../tests/general_functions/cpu_cores.phpt | 16 +++++++++++++ 4 files changed, 46 insertions(+), 1 deletion(-) create mode 100644 ext/standard/tests/general_functions/cpu_cores.phpt diff --git a/ext/standard/basic_functions.c b/ext/standard/basic_functions.c index 1c84ddcc98947..45909612549c5 100644 --- a/ext/standard/basic_functions.c +++ b/ext/standard/basic_functions.c @@ -2624,3 +2624,26 @@ PHP_FUNCTION(sys_getloadavg) } /* }}} */ #endif + +PHP_FUNCTION(cpu_cores) +{ + ZEND_PARSE_PARAMETERS_NONE(); + + #if defined(_SC_NPROCESSORS_ONLN) + int nprocs = sysconf(_SC_NPROCESSORS_ONLN); + if (nprocs > 0) { + RETURN_LONG(nprocs); + } + #endif + + + #if defined _WIN32 && ! defined __CYGWIN__ + SYSTEM_INFO system_info; + GetSystemInfo (&system_info); + if (system_info.dwNumberOfProcessors > 0) { + RETURN_LONG(system_info.dwNumberOfProcessors); + } + #endif + + RETURN_LONG(1); +} diff --git a/ext/standard/basic_functions.stub.php b/ext/standard/basic_functions.stub.php index effb05ff9f982..979362ed9a75c 100755 --- a/ext/standard/basic_functions.stub.php +++ b/ext/standard/basic_functions.stub.php @@ -3749,3 +3749,5 @@ function sapi_windows_set_ctrl_handler(?callable $handler, bool $add = true): bo function sapi_windows_generate_ctrl_event(int $event, int $pid = 0): bool {} #endif + +function cpu_cores(): int {} \ No newline at end of file diff --git a/ext/standard/basic_functions_arginfo.h b/ext/standard/basic_functions_arginfo.h index 5612ee21867e8..753c169e124a9 100644 --- a/ext/standard/basic_functions_arginfo.h +++ b/ext/standard/basic_functions_arginfo.h @@ -1,5 +1,5 @@ /* This is a generated file, edit the .stub.php file instead. - * Stub hash: 9cc9c0954bd7032d363ce9a531be621274b9a7e2 */ + * Stub hash: a41fb1350cc90e51451fe3db470b31701d0e9420 */ ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_set_time_limit, 0, 1, _IS_BOOL, 0) ZEND_ARG_TYPE_INFO(0, seconds, IS_LONG, 0) @@ -2197,6 +2197,8 @@ ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_sapi_windows_generate_ctrl_event ZEND_END_ARG_INFO() #endif +#define arginfo_cpu_cores arginfo_ob_get_level + ZEND_FUNCTION(set_time_limit); ZEND_FUNCTION(header_register_callback); @@ -2815,6 +2817,7 @@ ZEND_FUNCTION(sapi_windows_set_ctrl_handler); #if defined(PHP_WIN32) ZEND_FUNCTION(sapi_windows_generate_ctrl_event); #endif +ZEND_FUNCTION(cpu_cores); static const zend_function_entry ext_functions[] = { @@ -3463,6 +3466,7 @@ static const zend_function_entry ext_functions[] = { #if defined(PHP_WIN32) ZEND_FE(sapi_windows_generate_ctrl_event, arginfo_sapi_windows_generate_ctrl_event) #endif + ZEND_FE(cpu_cores, arginfo_cpu_cores) ZEND_FE_END }; diff --git a/ext/standard/tests/general_functions/cpu_cores.phpt b/ext/standard/tests/general_functions/cpu_cores.phpt new file mode 100644 index 0000000000000..b42d08fff3a94 --- /dev/null +++ b/ext/standard/tests/general_functions/cpu_cores.phpt @@ -0,0 +1,16 @@ +--TEST-- +cpu_cores() tests +--SKIPIF-- + +--FILE-- + +--EXPECTF-- +int(%d) +Done