请注意,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') ;
?>