Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/257.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/apache/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP zip_open()和php://temp,can';我好像打不开_Php_Stream_Zip - Fatal编程技术网

PHP zip_open()和php://temp,can';我好像打不开

PHP zip_open()和php://temp,can';我好像打不开,php,stream,zip,Php,Stream,Zip,不确定这是否可能,但现在已经成为一场学术斗争 使用\uuuuu halt\u compiler()技巧在PHP文件中嵌入二进制数据,我成功地创建了一个自打开脚本,该脚本将fseek()转换为\uuuuuu compiler\uu halt\u OFFSET\uuuuu(不太难看到,因为手册中记录了这个精确的示例) 无论如何,在调用\uuu halt\u compiler() 我尝试将数据直接复制到php://tempstream,并且已成功完成(如果我revind()和passthru()临时流

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

使用
\uuuuu halt\u compiler()
技巧在PHP文件中嵌入二进制数据,我成功地创建了一个自打开脚本,该脚本将
fseek()
转换为
\uuuuuu compiler\uu halt\u OFFSET\uuuuu
(不太难看到,因为手册中记录了这个精确的示例)

无论如何,在调用
\uuu halt\u compiler()

我尝试将数据直接复制到
php://temp
stream,并且已成功完成(如果我
revind()
passthru()
临时流句柄,它将转储数据)

我的问题是现在试图打开
php://temp
1带
zip\u open()

1从我所看到的情况来看(尽管存在其他可能性,如
zip\u open()
缺乏流支持),这里的问题是
php://memory
php://temp
句柄之间的流。如果能解决这个问题,也许事实上是可能的

它不断地回溯错误代码
11
,我发现没有2文档(似乎与大多数其他可能的错误代码一样)

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

这是我尝试使用
php://temp
stream,还是其他一些可能的问题?我也知道有一种面向对象的方法(
ZipArchive
,等等),但我想我应该从基础开始


有什么想法吗?

11是恒定的
ZIPARCHIVE::ER_OPEN
,手册对此进行了描述

无法打开文件

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



请考虑使用PHP的phar扩展-它做了您想要的事情,并且经过了很好的测试。

好的,因此错误代码11是一个根据关于
ZipArchive
类打开的错误。我假设这个类是相同扩展功能的包装器。之前链接的注释还提到了在不同的Windows操作系统上返回的错误,尝试解压缩存储在
c:\windows\temp
中的文件时,我的尝试使用了
php://temp
stream,当数据长度超过上限时,它可以转储到一个文件中,它就不存在了,于是我切换到
php://memory
无论如何,仍然会导致错误打开。谢谢@Gordon-Edited;不,不是写,实际上只是阅读。谢谢@cweiske-我知道phar,不过这更多的是一个学术调查,同时了解更多关于流和档案支持的信息。如果没有明确提到流包装器可以在这种情况下使用,我们可以安全地假设这是不可能的吗?我想确实是这样。我是否应该进一步假设PHP几乎不支持(读取,不支持)以任何方式处理内存中的ZIP归档二进制数据?实际上,将临时文件用于中间转储是可以的,但我仍然对严格在内存中工作感到好奇。我还发现,通过重新打开
php://temp
stream,它刷新现有内容。无论
zip\u open()
是否支持流包装器,这肯定是一个问题,因为我实际上是在传递一个空缓冲区,而我无法将现有的流资源句柄传递给
zip\u open()
$php = fopen(__FILE__, 'rb');
$tmp = fopen('php://temp', 'r+b');
fseek($php, __COMPILER_HALT_OFFSET__);
stream_copy_to_stream($php, $tmp);
$zip = zip_open('php://temp');
var_dump($zip); // int(11)