Phar::startBuffering

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

Phar::startBufferingInicia o buffer das operações de gravação Phar, não modifica o objeto Phar no disco

Descrição

public Phar::startBuffering(): void

Embora tecnicamente desnecessário, o método Phar::startBuffering() pode proporcionar um aumento significativo de desempenho ao criar ou modificar um arquivo Phar com um grande número de arquivos. Normalmente, sempre que um arquivo dentro de um arquivo Phar é criado ou modificado de alguma forma, todo o arquivo Phar será recriado com as alterações. Dessa forma, o arquivo estará atualizado com a atividade realizada nele.

No entanto, isso pode ser desnecessário ao simplesmente criar um novo arquivo Phar, quando faria mais sentido gravar o arquivo inteiro de uma só vez. Da mesma forma, muitas vezes é necessário fazer uma série de alterações e garantir que todas elas sejam possíveis antes de fazer qualquer alteração no disco, semelhante ao conceito de transações de banco de dados relacional. O par de métodos Phar::startBuffering()/Phar::stopBuffering() é fornecido para esse propósito.

O buffer de gravação Phar é por arquivo, o buffer ativo para o arquivo Phar foo.phar não afeta as alterações no arquivo Phar bar.phar.

Parâmetros

Esta função não possui parâmetros.

Valor Retornado

Nenhum valor é retornado.

Exemplos

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

<?php
// garantindo que o arquivo não existe
@unlink('novophar.phar');
try {
$p = new Phar(dirname(__FILE__) . '/novophar.phar', 0, 'novophar.phar');
} catch (
Exception $e) {
echo
'Não foi possível criar o phar:', $e;
}
echo
'O novo phar tem ' . $p->count() . " entradas\n";
$p->startBuffering();
$p['arquivo.txt'] = 'olá';
$p['arquivo2.txt'] = 'pessoal';
$p['arquivo2.txt']->setCompressedGZ();
$p['arquivo3.txt'] = 'carafeliz';
$p['arquivo3.txt']->setMetadata(42);
$p->setStub("<?php
function __autoload(
$class)
{
include 'phar://meuphar.phar/' . str_replace('_', '/',
$class) . '.php';
}
Phar::mapPhar('meuphar.phar');
include 'phar://meuphar.phar/startup.php';
__HALT_COMPILER();"
);
$p->stopBuffering();
?>

Veja Também

  • Phar::stopBuffering() - Interrompe o buffer de solicitações de gravação no arquivo Phar e salva as alterações no disco
  • Phar::isBuffering() - Usado para determinar se as operações de gravação Phar estão sendo armazenadas em buffer ou estão sendo liberadas diretamente no disco

adicione uma nota

Notas Enviadas por Usuários (em inglês) 1 note

up
0
anon at php dot com
4 years ago
To setthe ini key phar.readonly to 0, from a unix shell script, this is possible on the fly it is possible see below.
The example given on this page has some issues with quoting: (See conversion to simple quotes)

#!/usr/bin/php -d phar.readonly=0
<?php
print(ini_get('phar.readonly')); // Must return 0
// make sure it doesn't exist
@unlink('brandnewphar.phar');
try {
$p = new Phar(dirname(__FILE__) . '/brandnewphar.phar', 0, 'brandnewphar.phar');
} catch (
Exception $e) {
echo
'Could not create phar:', $e;
}
echo
'The new phar has ' . $p->count() . " entries\n";
$p->startBuffering();
$p['file.txt'] = 'hi';
$p['file2.txt'] = 'there';
$p['file2.txt']->compress(Phar::GZ);
$p['file3.txt'] = 'babyface';
$p['file3.txt']->setMetadata(42);
$p->setStub('<?php
function __autoload($class)
{
include "phar://myphar.phar/" . str_replace("_", "/", $class) . ".php";
}
Phar::mapPhar("myphar.phar");
include "phar://myphar.phar/startup.php";
__HALT_COMPILER();'
);
$p->stopBuffering();

// Test
$m = file_get_contents("phar://brandnewphar.phar/file2.txt");
$m = explode("\n",$m);
var_dump($m);
/* Output:
* there
**/
To Top