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

时间:2011-08-02 10:06:36

标签: php stream zip

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

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

无论如何,在我打电话给__halt_compiler() 包含单个文件的单个文件夹,上面写着“hello world”) >

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

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

我的问题在于尝试使用php://temp

打开zip_open() 1
$zip = zip_open('php://temp');
  

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

它一直在追回错误代码11,我发现没有 2 文档(看似与大多数其他可能的错误代码一样< / em>的)

var_dump($zip); // int(11)
  

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

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

有什么想法吗?

1 个答案:

答案 0 :(得分:2)

11是常量ZIPARCHIVE::ER_OPEN,手册用

描述
  

无法打开文件

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


请考虑使用PHP的 phar 扩展程序 - 它可以满足您的需要,并经过充分测试。