PHP zip_open () и php: // temp, не могут показаться открытыми

Не уверен, что это возможно, но теперь это стало академической борьбой.

Используя __halt_compiler() для встраивания двоичных данных в файл PHP, я успешно создал сценарий самообслуживания, который будет fseek() до __COMPILER_HALT_OFFSET__ ( не слишком сложно увидеть, как этот точный пример задокументирован в руководстве )

В любом случае, я записал небольшой кусок двоичных данных ZIP ( одна папка, содержащая один файл, который говорит «привет мир» ) после моего вызова __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); 

Моя проблема связана с попыткой открыть php://temp 1 с помощью zip_open()

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

1 Из того, что я вижу ( несмотря на другие такие возможности, как отсутствие поддержки потока с помощью zip_open() ), проблема здесь заключается в неотъемлемой zip_open() данных в php://memory и php://temp потоках между ручками. Если это можно обойти, возможно, это действительно возможно.

Он продолжает отменять код ошибки 11 , на который я не нашел 2 документации (по- видимому, как и большинство других возможных кодов ошибок )

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

2 Как отметил @cweiske, код ошибки 11 = ZipArchive::ER_OPEN , не 11 = ZipArchive::ER_OPEN открыть файл

Является ли это следствием для моей попытки использования потока php://temp или какой-либо другой возможной проблемы? Я также знаю, что существует подход ООП ( ZipArchive и др. ), Но я решил, что начну с основ.

Есть идеи?

11 – это постоянный ZIPARCHIVE::ER_OPEN , который описывается в руководстве с помощью

Не удается открыть файл

Обратите внимание, что в руководстве не указано, что могут использоваться обертки потоков.


Пожалуйста, подумайте об использовании PHP phar extension – он делает то, что вы хотите, и хорошо протестирован.