PHP 8.4.0 RC4 available for testing

Utilizar Archivos Phar: la envoltura de flujos phar

La envoltura de flujos phar soporta completamente fopen() para leer y escribir (no añadir), unlink(), stat(), fstat(), fseek(), rename() y operaciones de flujo de directorios opendir() y a partir de la versión 2.0.0, rmdir() y mkdir().

También se pueden manipular compresiones de ficheros individuales y metadatos por fichero en un archivo Phar usando contextos de flujo:

<?php
$contexto
= stream_context_create(array('phar' =>
array(
'compress' => Phar::GZ)),
array(
'metadata' => array('user' => 'cellog')));
file_put_contents('phar://mi.phar/fichero.php', 0, $contexto);
?>

La envoltura de flujos phar no opera sobre ficheros remotos, y no puede operar sobre ficheros remotos, and cannot operate on remote files, and so is allowed even when the allow_url_fopen and allow_url_include INI options are disabled.

Aunque es posible crear archivos phar desde cero simplemente usando operaciones de flujos, es mejor utilizar la funcionalidad interna de la clase Phar. La envoltura de flujos se usa mejor para operaciones de sólo lectura.

add a note

User Contributed Notes 2 notes

up
3
staff at pro-unreal dot de
13 years ago
Please note that the phar stream wrapper does not work with any glob.
When you decide to move your project to phar archives you need to consider this.

The following won't work:
<?php
glob
('phar://some.phar/*');
new
DirectoryIterator('glob://phar://some.phar/*');
?>

While the following will work:
<?php
new DirectoryIterator('phar://some.phar/');
?>
up
-1
carl at dot dot com
13 years ago
Some Examples of how to use the stream wrapper would be really helpful.
My floundering attempts reveal only the following:

<?php
$p
= new PharData(dirname(__FILE__).'/phartest.zip', 0,'phartest',Phar::ZIP) ;

$p->addFromString('testfile.txt',
'this is just some test text');

// This works
echo file_get_contents('phar://phartest.zip/testfile.txt');

//This Fails
file_put_contents('phar://phartest.zip/testfile.txt',
'Thist is text for testfile.txt');

$context = stream_context_create(
array(
'phar' =>array('compress' =>Phar::ZIP))
) ;

//This Fails
file_put_contents(
'phar://phartest.zip/testfile.txt',
'Thist is text for testfile.txt',0,$context);

// This works but only with 'r' readonly mode.
$f = fopen(
'phar://C:\\Inetpub\\wwwroot\\PACT\\test\\phartest.zip\\testfile.txt',
'r') ;
?>
To Top