Bug #79714 [Opn]: Extension bcgen + PHAR archives appear not to be able to work together
| From: | henry dot wood dot dk at gmail dot com | Date: | Thu, 18 Jun 2020 20:11:29 +0000 |
| Subject: | Bug #79714 [Opn]: Extension bcgen + PHAR archives appear not to be able to work together | ||
| References: | 1 | Groups: | php.bugs |
| Request: | Send a blank email to php-bugs+get-227544@lists.php.net to get a copy of this message | ||
Edit report at https://bugs.php.net/bug.php?id=79714&edit=1
ID: 79714
User updated by: henry dot wood dot dk at gmail dot com
Reported by: henry dot wood dot dk at gmail dot com
Summary: Extension bcgen + PHAR archives appear not to be
able to work together
Status: Open
Type: Bug
Package: PHAR related
Operating System: Ubuntu 18.04
PHP Version: 7.2.31
Block user comment: N
Private report: N
New Comment:
Possible conclusion:
Any compiled file *WITHIN* the phar archive 'simple.phar' is simply read as-is and not
parsed/evaluated/executed - however, the BCGEN header appears to be stripped from the output.
Any normal PHP file *WITHIN* the phar archive 'simple.phar' is read, parsed, evaluted and
executed as expected.
Previous Comments:
------------------------------------------------------------------------
[2020-06-18 20:09:41] henry dot wood dot dk at gmail dot com
Description:
------------
I am trying to build a PHAR archive which contains both files compiled by bcgen (See: https://github.com/vjardin/bcgen) and normal PHP files
I would then expect the PHAR file to be runnable via the command line, regardless which type of
file is referenced (either a bcgen compiled file or a normal php file) as this is what is explained
in the README of bcgen.
NOTE: Also note that this INI setting should be set:
bcgen.enable (default "1")
BCgen On/Off switch. When set to Off, bytecode files cannot be read
Test script:
---------------
<?php
// CHECK FOR BCGEN
if (! extension_loaded('Zend BCgen')) {
echo "ERROR: Needs Zend BCgen extension".PHP_EOL;
die(-1);
}
// COMPILE test.phb FROM test.php
// CONTENTS OF test.php: <?php echo "HELLO FROM BCGEN...".PHP_EOL;
file_put_contents('test.php', '<?php echo "HELLO FROM
BCGEN...".PHP_EOL;');
bcgen_compile_file('test.php', 'b.phb');
// MAKE test2.php
file_put_contents('test2.php', '<?php echo "HELLO FROM NORMAL
PHP...".PHP_EOL;');
// Make PHAR
$phar = new Phar( 'simple.phar' );
$phar->addFile('test.phb', 'b.phb');
$phar->addFile('test2.php', 'c.php');
$phar['a.php'] = '<?php echo "Hola Mundo\n"; include("b.phb");
include("c.php")?>';
$pharfile = 'simple.phar';
$startfile = 'a.php';
$stub = <<< "EOT"
#!/usr/bin/env php
<?php
Phar::mapPhar( '$pharfile' );
set_include_path( 'phar://' . __FILE__ . PATH_SEPARATOR . get_include_path() );
require( '$startfile' );
__HALT_COMPILER();
EOT;
$phar->setStub( $stub );
echo "DONE ...".PHP_EOL;
Expected result:
----------------
After running the test script to build the PHAR archive, I would expect running the simple.phar file
from command line to output:
Expected output:
Hola Mundo
HELLO FROM BCGEN...
HELLO FROM NORMAL PHP...
Actual result:
--------------
Actual output:
Hola Mundo
/tmp/test.phpâââââââââ`âf/â,âHELLO FROM
BCGEN...
iââââ>
HELLO FROM NORMAL PHP...
------------------------------------------------------------------------
--
Edit this bug report at https://bugs.php.net/bug.php?id=79714&edit=1