Last active
January 15, 2023 00:03
-
-
Save BenMorel/f91e9f1d1ba35d9d357ceb106052edfe to your computer and use it in GitHub Desktop.
Generates a php.ini file compatible with PHP JIT compiler
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?php | |
/** | |
* Generates a php.ini file from runtime ini directives, excluding extensions incompatible with JIT. | |
* I did not find a way to disable an extension from the command line, so this script is a workaround. | |
* | |
* Use it this way: | |
* | |
* php generate-jit-php-ini.php > php.ini | |
* php -n -c php.ini | |
*/ | |
declare(strict_types=1); | |
$zendExtensions = [ | |
'opcache.so', | |
]; | |
$disableExtensions = [ | |
// These extensions are not compatible with JIT | |
'xdebug.so', | |
'pcov.so', | |
// Not sure why, but on my setup enabling these extensions yields: | |
// PHP Warning: Module "xxx" is already loaded in Unknown on line 0 | |
'pdo_sqlite.so', | |
'pdo.so', | |
'posix.so', | |
]; | |
/** | |
* @var string $name | |
* @var ?string $value | |
*/ | |
foreach (ini_get_all(details: false) as $name => $value) { | |
if ($value === null) { | |
continue; | |
} | |
if ($name === 'extension_dir') { | |
$i = new DirectoryIterator($value); | |
foreach ($i as $file) { | |
/** @var SplFileInfo $file */ | |
if (!$file->isFile() || $file->getExtension() !== 'so') { | |
continue; | |
} | |
if (in_array($file->getFilename(), $disableExtensions, true)) { | |
continue; | |
} | |
$directiveName = in_array($file->getFilename(), $zendExtensions, true) | |
? 'zend_extension' | |
: 'extension'; | |
printf("%s=\"%s\"\n", $directiveName, $file->getPathname()); | |
} | |
continue; | |
} | |
printf("%s=\"%s\"\n", $name, $value); | |
} | |
echo "opcache.jit_buffer_size=256M\n"; |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment