PHP Bug #79714 (need advice) + a couple of ideas for the future !

php.internals

Henrik Skov

6 years ago
Hi list ! While I am still trying to fix bug 79714 (please see: https://bugs.php.net/bug.php?id=79714), I got a few ideas. First though, let me say that I still need advice about fixing the bug above as per my earlier mail. But now, my new idea: For future versions of PHP (8.1 ?), I would like following additions to PHP: The goal is still the same as what I am trying to achieve by fixing the 79714 bug, namely to be able to build PHARs that can be distributed as single-file while remaining harder to reverse-engineer. Now about my changes: Opcache: opcache_compile_file_2_binfile(string $phpFile, string $outputBinFile) New function which operates similar to opcache_compile_file() while compiling $phpFile into the binary OpCache bytecode and save it as $outputBinFile Core: requirebin(string $dotbin_file_path) Like require() but the parameter is the parameter is the path to a .bin (opCache bytecode file) includebin(string $dotbin_file_path) Like include() but the parameter is the parameter is the path to a .bin (opCache bytecode file) requirebin_once(string $dotbin_file_path) Like require_once() but the parameter is the parameter is the path to a .bin (opCache bytecode file) includebin_once(string $dotbin_file_path) Like include_once() but the parameter is the parameter is the path to a .bin (opCache bytecode file) Phar Extension: Phar::addOpcacheFile(string $pathToOpCacheBinFile, string $localName) Like Phar::addFile but first parameter is the path to a file produced by opcache_compile_file_2_binfile() (requires the opcache extension to be present) Phar::setOpcachedStub(string $code) Like Phar::setStub(string $code) but $code is first converted into byte code (requires the opcache extension to be present). I think these changes would mean that using an autoloader (ie. vendor/autoload.php) in the PHAR - which would contain a check to see if a .bin exists, then use includebin_once() to load it. If a .bin file does *NOT* exist but a .PHP file does, then simply use include_once() to load the PHP file - would allow for distributing PHARs that have their source code relatively well protected. What do you guys think about my idea ? Best regards, Henrik Skov Secuno A/S