Skip to content

Установка параметров memory_limit и max_execution_time #8

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
36 changes: 36 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -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 <Mb> - установка значения параметра `memory_limit` в Мб, по-умолчанию равно 256 (Мб)
-t|--time-limit <sec> - установка значения параметра `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
Expand Down
92 changes: 89 additions & 3 deletions bench.php
Original file line number Diff line number Diff line change
Expand Up @@ -23,11 +23,97 @@
// Used in hacks/fixes checks
$phpversion = explode('.', PHP_VERSION);


$stringTest = " the quick <b>brown</b> fox jumps <i>over</i> the lazy dog and eat <span>lorem ipsum</span><br/> Valar morghulis <br/>\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(
'<pre>'.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 <Mb> - set memory_limit value in Mb, defaults to 256 (Mb)'.PHP_EOL
.' -t|--time-limit <sec> - 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
.'</pre>'.PHP_EOL
);
exit(0);
break;

case 'm':
case 'memory-limit':
if ((int)$oval) {
$defaultMemoryLimit = (int)$oval;
} else {
print("<pre><<< WARNING >>> Option '$okey' has not numeric value '$oval'! Skip.</pre>".PHP_EOL);
}
break;

case 't':
case 'time-limit':
if ((int)$oval) {
$defaultTimeLimit = (int)$oval;
} else {
print("<pre><<< WARNING >>> Option '$okey' has not numeric value '$oval'! Skip.</pre>".PHP_EOL);
}
break;

default:
print("<pre><<< WARNING >>> Unknown option '$okey'!</pre>".PHP_EOL);
}

}

}

set_time_limit($defaultTimeLimit);
@ini_set('memory_limit', $defaultMemoryLimit . 'M');

/** ------------------------------- Main Constants ------------------------------- */

$line = str_pad("-", 91, "-");
$padHeader = 89;
Expand Down Expand Up @@ -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];
Expand Down