PHP Conference Nagoya 2025

Phar::stopBuffering

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

Phar::stopBufferingDetener las peticiones de escritura en buffer del archivo Phar, y guardar los cambios en disco

Descripción

public Phar::stopBuffering(): void

Phar::stopBuffering() se usa junto con el método Phar::startBuffering(). Phar::startBuffering() puede proporcionar un aumento significativo de rendimiento al crear o modificar un archivo Phar con un gran número de ficheros. Normalmente, cada vez que un fichero dentro de un archivo Phar es creado o modificado de alguna manera, el archivo Phar entero se re-creará con los cambios. De esta forma, el archivo estará actualizado con la actividad realizada sobre él.

Sin embargo, esto puede ser innecesario al crear simplemente un nuevo archivo Phar, que tendría más sentido escribir el archivo entero de una vez. De forma similar, a menudo es necesario realizar una serie de cambios y asegurarse de que todos son posibles antes de hacer cualquier cambio en disco, similar al concepto de transacciones en bases de datos relacionales. La pareja de métodos Phar::startBuffering()/Phar::stopBuffering() está prevista para este propósito.

La escritura en buffer de Phar es por archivo, el almacenamiento activo en buffer del archivo Phar foo.phar no afecta a los cambios hechos al archivo Phar bar.phar.

Valores devueltos

No devuelve ningún valor.

Errores/Excepciones

Se lanza una excepción de tipo PharException si se encontró algún problema volcando los cambios al disco.

Ejemplos

Ejemplo #1 Un ejemplo de Phar::stopBuffering()

<?php
$p
= new Phar(dirname(__FILE__) . '/nuevo_phar.phar', 0, 'nuevo_phar.phar');
$p['fichero1.txt'] = 'hola';
$p->startBuffering();
var_dump($p->getStub());
$p->setStub("<?php
function __autoload(\$clase)
{
include 'phar://nuevo_phar.phar/' . str_replace('_', '/', \$clase) . '.php';
}
Phar::mapPhar('nuevo_phar.phar');
include 'phar://nuevo_phar.phar/incio.php';
__HALT_COMPILER();"
);
$p->stopBuffering();
var_dump($p->getStub());
?>

El resultado del ejemplo sería:

string(24) "<?php __HALT_COMPILER();"
string(195) "<?php
function __autoload($clase)
{
    include 'phar://' . str_replace('_', '/', $clase);
}
Phar::mapPhar('nuevo_phar.phar');
include 'phar://nuevo_phar.phar/incio.php';
__HALT_COMPILER();"

Ver también

  • Phar::startBuffering() - Iniciar las operaciones de escritura en buffer de Phar, no modifica el objeto Phar del disco
  • Phar::isBuffering() - Determinar si las operaciones de escritura de Phar está siendo almacenadas en buffer, o están siendo volcadas directamente al disco

add a note

User Contributed Notes

There are no user contributed notes for this page.
To Top