diff --git a/README.md b/README.md index 3953d95..1397aba 100644 --- a/README.md +++ b/README.md @@ -18,6 +18,42 @@ - в консоли `php -m` - или через вывод функции `phpinfo()` +## Запуск + +### 1. Через консоль + +Команда: +``` +php bench.php [-h|--help] [-m|--memory-limit=256] [-t|--time-limit=600] + + -h|--help - вывод помощи и выход + -m|--memory-limit - установка значения параметра `memory_limit` в Мб, по-умолчанию равно 256 (Мб) + -t|--time-limit - установка значения параметра `max_execution_time` в секундах, по-умолчанию равно 600 (сек.) +``` +Например: `php bench.php -m=64 -t=30` + +Второй вариант передачи значений для параметров - переменные окружения: +``` +env PHP_MEMORY_LIMIT=64 PHP_TIME_LIMIT=30 php bench.php +``` + +### 2. Через веб-сервера (apache + php) + +Просто положите в любую доступную для выполнения php директорию сайта, например в корень. + +Потом скрипт можно будет вызывать с параметрами, как из консоли: +`curl http://www.example.com/bench.php?memory_limit=64&time_limit=30` +или через браузер. + +### Учет параметров хостинга + +На многих хостингах параметры `memory_limit` и `max_execution_time` могут быть жестко зафиксированы. + +В этом случа скрипт не сможет установить переданные в него значения параметров, +по крайней мере не выше лимитов. + +Пересчет времени выполнения скрипта будет произведен по наименьшим результирующим значениям. + ## ChangeLog @ 2017-05-18, v1.0.17 diff --git a/bench.php b/bench.php index e7b6ffd..5af035e 100644 --- a/bench.php +++ b/bench.php @@ -23,11 +23,97 @@ // Used in hacks/fixes checks $phpversion = explode('.', PHP_VERSION); + $stringTest = " the quick brown fox jumps over the lazy dog and eat lorem ipsum
Valar morghulis
\n\rабыр\nвалар дохаэрис "; $regexPattern = '/[\s,]+/'; -set_time_limit(600); -@ini_set('memory_limit', '256M'); +/** ------------------------------- Main Defaults ------------------------------- */ + +/* Default execution time limit in seconds */ +$defaultTimeLimit = 600; +/* Default PHP memory limit in Mb */ +$defaultMemoryLimit = 256; + +if ((int)getenv('PHP_TIME_LIMIT')) { + $defaultTimeLimit = (int)getenv('PHP_TIME_LIMIT'); +} +if (isset($_GET['time_limit']) && (int)$_GET['time_limit']) { + $defaultTimeLimit = (int)$_GET['time_limit']; +} + +if ((int)getenv('PHP_MEMORY_LIMIT')) { + $defaultMemoryLimit = (int)getenv('PHP_MEMORY_LIMIT'); +} +if (isset($_GET['memory_limit']) && (int)$_GET['memory_limit']) { + $defaultMemoryLimit = (int)$_GET['memory_limit']; +} + +// http://php.net/manual/ru/function.getopt.php example #2 +$shortopts = "h"; +$shortopts .= "m:"; // Обязательное значение +$shortopts .= "t:"; // Обязательное значение + +$longopts = array( + "help", + "memory-limit:", // Обязательное значение + "time-limit:", // Обязательное значение +); +$options = getopt($shortopts, $longopts); + +if ($options) { + + foreach ($options as $okey => $oval) { + + switch ($okey) { + + case 'h': + case 'help': + print( + '
'.PHP_EOL
+					.'PHP Benchmark Performance Script, version ' . $scriptVersion . PHP_EOL
+					. PHP_EOL
+					.'Usage: '.basename(__FILE__).' [-h|--help] [-m|--memory-limit=256] [-t|--time-limit=600]'.PHP_EOL
+					.PHP_EOL
+					.'	-h|--help		- print this help and exit'.PHP_EOL
+					.'	-m|--memory-limit 	- set memory_limit value in Mb, defaults to 256 (Mb)'.PHP_EOL
+					.'	-t|--time-limit 	- set max_execution_time value in seconds, defaults to 600 (sec)'.PHP_EOL
+					.PHP_EOL
+					.'Example: php '.basename(__FILE__).' -m=64 -t=30'.PHP_EOL
+					.'
'.PHP_EOL + ); + exit(0); + break; + + case 'm': + case 'memory-limit': + if ((int)$oval) { + $defaultMemoryLimit = (int)$oval; + } else { + print("
<<< WARNING >>> Option '$okey' has not numeric value '$oval'! Skip.
".PHP_EOL); + } + break; + + case 't': + case 'time-limit': + if ((int)$oval) { + $defaultTimeLimit = (int)$oval; + } else { + print("
<<< WARNING >>> Option '$okey' has not numeric value '$oval'! Skip.
".PHP_EOL); + } + break; + + default: + print("
<<< WARNING >>> Unknown option '$okey'!
".PHP_EOL); + } + + } + +} + +set_time_limit($defaultTimeLimit); +@ini_set('memory_limit', $defaultMemoryLimit . 'M'); + +/** ------------------------------- Main Constants ------------------------------- */ $line = str_pad("-", 91, "-"); $padHeader = 89; @@ -383,7 +469,7 @@ function dumb_test_Functions() /** Recalc loop limits if max_execution_time less than needed */ $maxTime = ini_get('max_execution_time'); -$needTime = 600; +$needTime = $defaultTimeLimit; $pv = $phpversion[0] . '.' . $phpversion[1]; if (isset($loopMaxPhpTimes[$pv])) { $needTime = $loopMaxPhpTimes[$pv];