使用 Phar 归档:phar 流包装器

Phar 流包装器完全支持 fopen() 用于读写(不追加),unlink()stat()fstat()fseek()rename() 以及目录流操作 opendir()rmdir() 以及 mkdir().

使用流上下文也可以操作 Phar 归档中的单个文件压缩和每个文件的元数据

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

phar 流包装器不操作远程文件,也不允许操作远程文件,因此即使 allow_url_fopenallow_url_include INI 选项被禁用,它也被允许。

虽然可以使用流操作从头开始创建 phar 归档,但最好使用 Phar 类中内置的功能。流包装器最适合只读操作。

添加注释

用户贡献的注释 2 个注释

3
pro-unreal.de 上的 staff
13 年前
请注意,phar 流包装器不适用于任何 glob。
当您决定将您的项目迁移到 phar 归档时,您需要考虑这一点。

以下代码将不起作用
<?php
glob
('phar://some.phar/*');
new
DirectoryIterator('glob://phar://some.phar/*');
?>

而以下代码将起作用
<?php
new DirectoryIterator('phar://some.phar/');
?>
-1
carl@...
13 年前
一些关于如何使用流包装器的示例将非常有用。
我摸索着尝试只发现了以下代码

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

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

// 此代码有效
echo file_get_contents('phar://phartest.zip/testfile.txt');

// 此代码无效
file_put_contents('phar://phartest.zip/testfile.txt',
'Thist is text for testfile.txt');

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

// 此代码无效
file_put_contents(
'phar://phartest.zip/testfile.txt',
'Thist is text for testfile.txt',0,$context);

// 此代码有效,但仅适用于 'r' 只读模式。
$f = fopen(
'phar://C:\\Inetpub\\wwwroot\\PACT\\test\\phartest.zip\\testfile.txt',
'r') ;
?>
To Top