请注意,phar 流包装器不适用于任何 glob。
当您决定将您的项目迁移到 phar 归档时,您需要考虑这一点。
以下代码将不起作用
<?php
glob('phar://some.phar/*');
new DirectoryIterator('glob://phar://some.phar/*');
?>
而以下代码将起作用
<?php
new DirectoryIterator('phar://some.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_fopen 和 allow_url_include INI 选项被禁用,它也被允许。
虽然可以使用流操作从头开始创建 phar 归档,但最好使用 Phar 类中内置的功能。流包装器最适合只读操作。
请注意,phar 流包装器不适用于任何 glob。
当您决定将您的项目迁移到 phar 归档时,您需要考虑这一点。
以下代码将不起作用
<?php
glob('phar://some.phar/*');
new DirectoryIterator('glob://phar://some.phar/*');
?>
而以下代码将起作用
<?php
new DirectoryIterator('phar://some.phar/');
?>
一些关于如何使用流包装器的示例将非常有用。
我摸索着尝试只发现了以下代码
<?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') ;
?>