Phar::setStub

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

Phar::setStubUsado para definir o carregador PHP ou o stub de inicialização de um arquivo Phar

Descrição

public function Phar::setStub(resource|string $stub, int $length = -1): true

Nota: Este método requer que a configuração phar.readonly do php.ini seja definida como 0 para funcionar com objetos Phar. Caso contrário, uma exceção PharException será lançada.

Este método é usado para adicionar um stub de carregador de inicialização PHP a um novo arquivo Phar, ou para substituir o stub de carregador em um arquivo Phar existente.

O stub do carregador para um arquivo Phar é usado sempre que um arquivo é incluído diretamente como neste exemplo:

<?php
include 'meuphar.phar';
?>
ou por execução simples:
php meuphar.phar

O carregador não é acessado ao incluir um arquivo por meio do empacotador de fluxo phar como a seguir:

<?php
include 'phar://meuphar.phar/algumarquivo.php';
?>

Parâmetros

stub

Uma string ou um identificador de fluxo aberto para usar como stub executável para este arquivo phar.

length
Comprimento de stub em bytes.
Aviso

Passar o argumento length com um resource no primeiro argumento está DESCONTINUADO a partir do PHP 8.3.0. Em vez disso, use $phar->setStub(stream_get_contents($resource)).

Valor Retornado

Sempre retorna true.

Erros/Exceções

UnexpectedValueException é lançada se phar.readonly estiver habilitado no php.ini. PharException é lançada se algum problema for encontrado ao liberar alterações no disco.

Registro de Alterações

Versão Descrição
8.4.0 O tipo do retorno agora é true; anteriormente, era bool.
8.3.0 Chamar Phar::setStub() com um resource e um length agora está descontinuado. Tais chamadas devem ser substituídas por: $phar->setStub(stream_get_contents($resource));

Exemplos

Exemplo #1 Um exemplo de Phar::setStub()

<?php

try {
    $p = new Phar(dirname(__FILE__) . '/novophar.phar', 0, 'novophar.phar');
    $p['a.php'] = '<?php var_dump("Olá");';
    $p->setStub('<?php var_dump("Primeiro"); Phar::mapPhar("novophar.phar"); __HALT_COMPILER(); ?>');
    include 'phar://novophar.phar/a.php';
    var_dump($p->getStub());

    $p['b.php'] = '<?php var_dump("Mundo");';
    $p->setStub('<?php var_dump("Segundo"); Phar::mapPhar("novophar.phar"); __HALT_COMPILER(); ?>');
    include 'phar://novophar.phar/b.php';
    var_dump($p->getStub());
} catch (Exception $e) {
    echo 'As operações de gravação falharam em novophar.phar: ', $e;
}
?>

O exemplo acima produzirá:

string(5) "Olá"
string(82) "<?php var_dump("Primeiro"); Phar::mapPhar("novophar.phar"); __HALT_COMPILER(); ?>"
string(5) "Mundo"
string(83) "<?php var_dump("Segundo"); Phar::mapPhar("novophar.phar"); __HALT_COMPILER(); ?>"

Veja Também

adicionar nota

Notas de Usuários 3 notes

up
1
Scott Dutton
8 years ago
Its not clear in the docs but __HALT_COMPILER() is required in the stub.
up
1
jaimz22 at gmail dot com
18 years ago
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.
up
0
Olivier Laviale
14 years ago
If your stub has a namespace, it is used for each include that doesn't define one.
To Top