Skip to content

opcache.jit=off does not behave as documented #14267

Closed

Description

@siliconforks

Description

According to the documentation for opcache.jit, the value disable means "Completely disabled, cannot be enabled at runtime", and the value off means "Disabled, but can be enabled at runtime".

But if you put the following values in your php.ini:

zend_extension=opcache
opcache.jit=off
opcache.jit_buffer_size=64M

...then you try to enable at runtime inside a .php file:

<?php
ini_set('opcache.jit', 'tracing');

...then you will get this:

Warning: Cannot change opcache.jit setting at run-time (JIT is disabled)

This is the same result you get if you set opcache.jit=disable.

As far as I can tell, the problem is that the code is looking for the literal string off but since that value is handled specially by PHP's ini parser, the code will never actually see a value of off. (It will never see no or false either.)

if (ZSTR_LEN(jit) == 0
|| zend_string_equals_literal_ci(jit, "disable")) {
JIT_G(enabled) = 0;
JIT_G(on) = 0;
return SUCCESS;
} else if (zend_string_equals_literal_ci(jit, "0")
|| zend_string_equals_literal_ci(jit, "off")
|| zend_string_equals_literal_ci(jit, "no")
|| zend_string_equals_literal_ci(jit, "false")) {
JIT_G(enabled) = 1;
JIT_G(on) = 0;
return SUCCESS;

PHP Version

PHP 8.3.7

Operating System

No response

Activity

  1. added 2 commits that reference this issue on May 22, 2024
    eda969f
    9506ca6
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions