Я читал другие вопросы по SO с похожим названием, но не об этом.Я знаю, КАК выполнить скрипт PHP из другого скрипта PHP.Проблема в том, что когда я это делаю, он использует слишком много процессора.Я хотел бы знать, как уменьшить это.
У меня есть простой скрипт, похожий на фронт-контроллер, называемый index.php.Он обрабатывает GET-запросы от клиента и в зависимости от переданного параметра «action» отправляет запрос в соответствующий файл для его обработки.Например, это запрос клиента:
xhttp.open("GET", serverURL + "?action=doSomething" + "&userID=" + user.ID + "&time=" + lastServerTime, true);
index.php имеет массив, который отображает параметр «action» в соответствующий файл:
exec('php ' . $url_map[$action] . ' "' . $parameter1 . '"' . ' "' . $parameter2 . '" 2>&1', $output, $return_value);
В целях тестирования ясоздали сценарий PHP, который ничего не делает, кроме измерения загрузки процессора и выгрузки его в файл журнала:
<?php
function varDumpToFile($parameter1) {
$file = 'log.txt';
$dump = $parameter1;
$output = print_r($dump, true);
file_put_contents($file, $output, FILE_APPEND | LOCK_EX);
}
varDumpToFile(`ps -eo pcpu,pid,user,args --no-headers| sort -t. -nk1,2 -k4,4 -r |head -n 5`);
?>
Это создает файл журнала, который выглядит следующим образом:
9.0 3123052 user /opt/cpanel/ea-php56/root/usr/bin/php cputest.php 10 147424 1537625595
Понятно,скрипт PHP не должен занимать 9% процессорного времени для выполнения.Для сравнения, я запустил тот же скрипт, напрямую обращающийся к нему через запрос GET:
0.1 3186198 user lsphp:ic_html/dev/php/cputest.php
0,1% больше похоже на него.Но почему при вызове этого сценария PHP из другого сценария PHP используется так много ЦП?Это потому, что я должен выполнить «новый экземпляр» PHP, когда я исполняю PHP, который имеет много накладных расходов?Если так, есть ли способ выполнить скрипт PHP, используя «уже запущенный» экземпляр PHP?Или есть другой способ сделать это?