不确定这是否可行,但现在已成为一场学术斗争。
使用__halt_compiler()
技巧将二进制数据嵌入到PHP文件中,我已经成功创建了一个自我打开的脚本,fseek()
到__COMPILER_HALT_OFFSET__
(不太难看到这个精确的例子记录在手册)
无论如何,在我打电话给__halt_compiler()
我尝试做的是将数据直接复制到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://memory
和php://temp
流中的数据。如果可以解决这个问题,也许它实际上是可能的。
它一直在追回错误代码11
,我发现没有 2 文档(看似与大多数其他可能的错误代码一样< / em>的)
var_dump($zip); // int(11)
2 正如@cweiske所指出的,错误代码
11 = ZipArchive::ER_OPEN
,无法打开文件
这是我尝试使用php://temp
流或其他可能问题的结果吗?我也知道存在一种OOP方法( ZipArchive
,等等。)但我想我会从基础开始。
有什么想法吗?
答案 0 :(得分:2)
11是常量ZIPARCHIVE::ER_OPEN
,手册用
无法打开文件
请注意,手册不表明可以使用流包装器。
请考虑使用PHP的 phar 扩展程序 - 它可以满足您的需要,并经过充分测试。