PHP zip_open()和php:// temp,似乎无法打开

Dan*_*ugg 6 php zip stream

不确定这是否可行,但现在已成为一场学术斗争.

使用__halt_compiler()技巧在一个PHP文件中嵌入二进制数据,我已经成功地创建了自开幕脚本将fseek()__COMPILER_HALT_OFFSET__(不是太难看,因为这精确的例子在手册中进行了说明)

不管怎么说,我已经存储的二进制数据ZIP的小疙瘩(包含一个单一的文件,上面写着"Hello World"的一个文件夹我的电话后)__halt_compiler()

我试图做的是将数据直接复制到php://temp流,并成功完成(如果我rewind()passthru()临时流句柄,它转储数据)

$php = fopen(__FILE__, 'rb');
$tmp = fopen('php://temp', 'r+b');
fseek($php, __COMPILER_HALT_OFFSET__);
stream_copy_to_stream($php, $tmp);
Run Code Online (Sandbox Code Playgroud)

我的问题带有试图打开现在php://temp1zip_open()

$zip = zip_open('php://temp');
Run Code Online (Sandbox Code Playgroud)

1从我所看到的(尽管缺乏其他诸如缺乏流支持的可能性zip_open()),这里的问题是句柄中数据php://memoryphp://temp流之间固有的非永久性.如果这可以解决,也许事实上可能.

它不断踢回错误代码11,我发现没有2个文档(看起来像大多数其他可能的错误代码)

var_dump($zip); // int(11)
Run Code Online (Sandbox Code Playgroud)

2正如@cweiske所指出的,错误代码11 = ZipArchive::ER_OPEN,无法打开文件

这是我尝试使用php://temp流或其他可能问题的结果吗?我也知道存在一种OOP方法(ZipArchive等人),但我想我会从基础开始.

有任何想法吗?

cwe*_*ske 2

11 是常数ZIPARCHIVE::ER_OPEN,手册中用它来描述

无法打开文件

请注意,手册没有说明可以使用流包装器。


请考虑使用 PHP 的phar扩展 - 它可以满足您的需求,并且经过了良好的测试。