|
6 | 6 | * A simple but effective single-file GUI for the OPcache PHP extension.
|
7 | 7 | *
|
8 | 8 | * @author Andrew Collington, andy@amnuts.com
|
9 |
| - * @version 3.5.3 |
| 9 | + * @version 3.5.4 |
10 | 10 | * @link https://github.com/amnuts/opcache-gui
|
11 | 11 | * @license MIT, https://acollington.mit-license.org/
|
12 | 12 | */
|
|
59 | 59 |
|
60 | 60 | class Service
|
61 | 61 | {
|
62 |
| - public const VERSION = '3.5.3'; |
| 62 | + public const VERSION = '3.5.4'; |
63 | 63 |
|
64 | 64 | protected $tz;
|
65 | 65 | protected $data;
|
@@ -417,7 +417,7 @@ protected function compileState(): array
|
417 | 417 | ];
|
418 | 418 | }
|
419 | 419 |
|
420 |
| - if ($overview && !empty($status['jit'])) { |
| 420 | + if ($overview && !empty($status['jit']['enabled'])) { |
421 | 421 | $overview['jit_buffer_used_percentage'] = ($status['jit']['buffer_size']
|
422 | 422 | ? round(100 * (($status['jit']['buffer_size'] - $status['jit']['buffer_free']) / $status['jit']['buffer_size']))
|
423 | 423 | : 0
|
@@ -488,9 +488,30 @@ protected function compileState(): array
|
488 | 488 | 'preload' => $preload,
|
489 | 489 | 'directives' => $directives,
|
490 | 490 | 'blacklist' => $config['blacklist'],
|
491 |
| - 'functions' => get_extension_funcs('Zend OPcache') |
| 491 | + 'functions' => get_extension_funcs('Zend OPcache'), |
| 492 | + 'jitState' => $this->jitState($status, $config['directives']), |
492 | 493 | ];
|
493 | 494 | }
|
| 495 | + |
| 496 | + protected function jitState(array $status, array $directives): array |
| 497 | + { |
| 498 | + $state = [ |
| 499 | + 'enabled' => $status['jit']['enabled'], |
| 500 | + 'reason' => '' |
| 501 | + ]; |
| 502 | + |
| 503 | + if (!$state['enabled']) { |
| 504 | + if (empty($directives['opcache.jit']) || $directives['opcache.jit'] === 'disable') { |
| 505 | + $state['reason'] = $this->txt('disabled due to <i>opcache.jit</i> setting'); |
| 506 | + } elseif (!$directives['opcache.jit_buffer_size']) { |
| 507 | + $state['reason'] = $this->txt('the <i>opcache.jit_buffer_size</i> must be set to fully enable JIT'); |
| 508 | + } else { |
| 509 | + $state['reason'] = $this->txt('incompatible with extensions that override <i>zend_execute_ex()</i>, such as <i>xdebug</i>'); |
| 510 | + } |
| 511 | + } |
| 512 | + |
| 513 | + return $state; |
| 514 | + } |
494 | 515 | }
|
495 | 516 |
|
496 | 517 | $opcache = (new Service($options))->handle();
|
@@ -659,6 +680,7 @@ className: "tab-content-overview-info"
|
659 | 680 | start: props.opstate.overview && props.opstate.overview.readable.start_time || null,
|
660 | 681 | reset: props.opstate.overview && props.opstate.overview.readable.last_restart_time || null,
|
661 | 682 | version: props.opstate.version,
|
| 683 | + jit: props.opstate.jitState, |
662 | 684 | txt: props.txt
|
663 | 685 | }), /*#__PURE__*/React.createElement(Directives, {
|
664 | 686 | directives: props.opstate.directives,
|
@@ -896,7 +918,11 @@ function GeneralInfo(props) {
|
896 | 918 | className: "tables general-info-table"
|
897 | 919 | }, /*#__PURE__*/React.createElement("thead", null, /*#__PURE__*/React.createElement("tr", null, /*#__PURE__*/React.createElement("th", {
|
898 | 920 | colSpan: "2"
|
899 |
| - }, props.txt('General info')))), /*#__PURE__*/React.createElement("tbody", null, /*#__PURE__*/React.createElement("tr", null, /*#__PURE__*/React.createElement("td", null, "Zend OPcache"), /*#__PURE__*/React.createElement("td", null, props.version.version)), /*#__PURE__*/React.createElement("tr", null, /*#__PURE__*/React.createElement("td", null, "PHP"), /*#__PURE__*/React.createElement("td", null, props.version.php)), /*#__PURE__*/React.createElement("tr", null, /*#__PURE__*/React.createElement("td", null, props.txt('Host')), /*#__PURE__*/React.createElement("td", null, props.version.host)), /*#__PURE__*/React.createElement("tr", null, /*#__PURE__*/React.createElement("td", null, props.txt('Server Software')), /*#__PURE__*/React.createElement("td", null, props.version.server)), props.start ? /*#__PURE__*/React.createElement("tr", null, /*#__PURE__*/React.createElement("td", null, props.txt('Start time')), /*#__PURE__*/React.createElement("td", null, props.start)) : null, props.reset ? /*#__PURE__*/React.createElement("tr", null, /*#__PURE__*/React.createElement("td", null, props.txt('Last reset')), /*#__PURE__*/React.createElement("td", null, props.reset)) : null)); |
| 921 | + }, props.txt('General info')))), /*#__PURE__*/React.createElement("tbody", null, /*#__PURE__*/React.createElement("tr", null, /*#__PURE__*/React.createElement("td", null, "Zend OPcache"), /*#__PURE__*/React.createElement("td", null, props.version.version)), /*#__PURE__*/React.createElement("tr", null, /*#__PURE__*/React.createElement("td", null, "PHP"), /*#__PURE__*/React.createElement("td", null, props.version.php)), /*#__PURE__*/React.createElement("tr", null, /*#__PURE__*/React.createElement("td", null, props.txt('Host')), /*#__PURE__*/React.createElement("td", null, props.version.host)), /*#__PURE__*/React.createElement("tr", null, /*#__PURE__*/React.createElement("td", null, props.txt('Server Software')), /*#__PURE__*/React.createElement("td", null, props.version.server)), props.start ? /*#__PURE__*/React.createElement("tr", null, /*#__PURE__*/React.createElement("td", null, props.txt('Start time')), /*#__PURE__*/React.createElement("td", null, props.start)) : null, props.reset ? /*#__PURE__*/React.createElement("tr", null, /*#__PURE__*/React.createElement("td", null, props.txt('Last reset')), /*#__PURE__*/React.createElement("td", null, props.reset)) : null, /*#__PURE__*/React.createElement("tr", null, /*#__PURE__*/React.createElement("td", null, props.txt('JIT enabled')), /*#__PURE__*/React.createElement("td", null, props.txt(props.jit.enabled ? "Yes" : "No"), props.jit.reason && /*#__PURE__*/React.createElement("span", { |
| 922 | + dangerouslySetInnerHTML: { |
| 923 | + __html: ` (${props.jit.reason})` |
| 924 | + } |
| 925 | + }))))); |
900 | 926 | }
|
901 | 927 |
|
902 | 928 | function Directives(props) {
|
|
0 commit comments