PHP 8.5.0 Alpha 2 available for testing

Phar::startBuffering

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

Phar::startBufferingInicia el almacenamiento en búfer de escrituras Phar, sin modificar el objeto Phar en el disco

Descripción

public Phar::startBuffering(): void

Aunque técnicamente innecesario, el método Phar::startBuffering() puede proporcionar un aumento de rendimiento durante la creación o modificación de un archivo Phar con un gran número de ficheros. Normalmente, cada vez que un fichero dentro del archivo Phar es creado o modificado, el archivo Phar completo se recrea incluyendo los cambios. De esta manera, el archivo siempre estará actualizado con respecto a las operaciones que se le aplican.

Aunque esto pueda parecer innecesario durante la creación de un archivo Phar simple, adquiere sentido al escribir el archivo Phar completo de una sola vez. Asimismo, es frecuente necesitar realizar una serie de cambios y asegurarse de que todos son posibles antes de escribir en el disco, de manera similar a las transacciones de las bases de datos relacionales. Las funciones Phar::startBuffering()/Phar::stopBuffering() están disponibles con este propósito.

El almacenamiento en búfer Phar se realiza por archivo, el búfer activo para el archivo Phar foo.phar no afecta a los cambios realizados en el archivo Phar bar.phar.

Parámetros

Esta función no contiene ningún parámetro.

Valores devueltos

No se retorna ningún valor.

Ejemplos

Ejemplo #1 Un ejemplo con Phar::startBuffering()

<?php
// se asegura de que el phar no exista ya
@unlink('nouveau.phar');
try {
$p = new Phar(dirname(__FILE__) . '/nouveau.phar', 0, 'nouveau.phar');
} catch (
Exception $e) {
echo
'No puede crear el phar:', $e;
}
echo
'El nuevo phar tiene ' . $p->count() . " entradas\n";
$p->startBuffering();
$p['fichier.txt'] = 'salut';
$p['fichier2.txt'] = 'jolie';
$p['fichier2.txt']->setCompressedGZ();
$p['fichier3.txt'] = 'môme';
$p['fichier3.txt']->setMetadata(42);
$p->setStub("<?php
function __autoload(
$class)
{
include 'phar://monphar.phar/' . str_replace('_', '/',
$class) . '.php';
}
Phar::mapPhar('monphar.phar');
include 'phar://monphar.phar/demarrage.php';
__HALT_COMPILER();"
);
$p->stopBuffering();
?>

Ver también

  • Phar::stopBuffering() - Detiene el almacenamiento en búfer de las escrituras Phar y provoca la escritura en el disco
  • Phar::isBuffering() - Determina si las operaciones de escritura de Phar están en búfer o se escriben directamente en el disco

add a note

User Contributed Notes 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