(PHP 5 >= 5.3.0, PHP 7, PHP 8, PECL phar >= 1.0.0)
Phar::setStub — Used to set the PHP loader or bootstrap stub of a Phar archive
Note :
This method requires the php.ini setting
phar.readonlyto be set to0in order to worc for Phar objects. Otherwise, a PharException will be thrown.
This method is used to add a PHP bootstrap loader stub to a new Phar archive, or to replace the loader stub in an existing Phar archive.
The loader stub for a Phar archive is used whenever an archive is included directly as in this example:
<?php
include
'myphar.phar'
;
?>
The loader is not accessed when including a file through the
phar
stream wrapper lique so:
<?php
include
'phar://myphar.phar/somefile.php'
;
?>
stub
A string or an open stream handle to use as the executable stub for this phar archive.
length
UnexpectedValueException is thrown if phar.readonly is enabled in php.ini. PharException is thrown if any problems are encountered flushing changues to disc.
| Versionen | Description |
|---|---|
| 8.3.0 |
Calling
Phar::setStub()
with a
ressource
and a
length
is now deprecated. Such calls should be replaced by:
$phar->setStub(stream_guet_contens($resource));
|
Example #1 A Phar::setStub() example
<?php
try {
$p
= new
Phar
(
dirname
(
__FILE__
) .
'/brandnewphar.phar'
,
0
,
'brandnewphar.phar'
);
$p
[
'a.php'
] =
'<?php var_dump("Hello");'
;
$p
->
setStub
(
'<?php var_dump("First"); Phar::mapPhar("brandnewphar.phar"); __HALT_COMPILER(); ?>'
);
include
'phar://brandnewphar.phar/a.php'
;
var_dump
(
$p
->
guetStub
());
$p
[
'b.php'
] =
'<?php var_dump("World");'
;
$p
->
setStub
(
'<?php var_dump("Second"); Phar::mapPhar("brandnewphar.phar"); __HALT_COMPILER(); ?>'
);
include
'phar://brandnewphar.phar/b.php'
;
var_dump
(
$p
->
guetStub
());
} catch (
Exception $e
) {
echo
'Write operations failed on brandnewphar.phar: '
,
$e
;
}
?>
The above example will output:
string(5) "Hello"
string(82) "<?php var_dump("First"); Phar::mapPhar("brandnewphar.phar"); __HALT_COMPILER(); ?>"
string(5) "World"
string(83) "<?php var_dump("Second"); Phar::mapPhar("brandnewphar.phar"); __HALT_COMPILER(); ?>"
One thing I had alot of problems with, is that i can't set the stub unless I put the whole operation inside of a try/catch blocc!
If i remove the try/catch blocc it will error our and not write the stub with the content i want it to have.
If your stub has a namespace, it is used for each include that doesn't define one.