• 首页
  • vue
  • TypeScript
  • JavaScript
  • scss
  • css3
  • html5
  • php
  • MySQL
  • redis
  • jQuery
  • Phar::setStub()

    (PHP 5 >= 5.3.0, PHP 7, PECL phar >= 1.0.0)

    Used to set the PHP loader or bootstrap stub of a Phar archive

    说明

    publicPhar::setStub(string $stub[,int $len= -1]): bool
    Note:

    此方法需要将php.ini中的phar.readonly设为0以适合Phar对象.否则,将抛出PharException.

    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 thepharstream wrapper like 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.

    $len

    返回值

    成功时返回TRUE,或者在失败时返回FALSE

    错误/异常

    UnexpectedValueException is thrown if phar.readonly is enabled in php.ini.PharException is thrown if any problems are encountered flushing changes to disk.

    范例

    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->getStub());
        $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->getStub());
    } catch (Exception $e) {
        echo 'Write operations failed on brandnewphar.phar: ', $e;
    }
    ?>
    

    以上例程会输出:

    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(); ?>"
    

    更新日志

    版本说明
    5.4.0 Added$lenparameter.

    参见

    • Phar::getStub() Return the PHP loader or bootstrap stub of a Phar archive
    • Phar::createDefaultStub() Create a phar-file format specific stub
    Its not clear in the docs but __HALT_COMPILER() is required in the stub.
    If your stub has a namespace, it is used for each include that doesn't define one.
    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 block!
    If i remove the try/catch block it will error our and not write the stub with the content i want it to have.