Не уверен, что это возможно, но сейчас это стало академической борьбой.
Используя трюк __halt_compiler()
для встраивания бинарных данных в файл PHP, я успешно создал самораскрывающийся скрипт, который будет fseek()
до __COMPILER_HALT_OFFSET__
( не слишком сложным, поскольку этот точный пример документально подтверждено в руководстве )
В любом случае, после моего звонка на __halt_compiler()
я сохранил небольшой кусочек бинарных ZIP-данных (
одна папка, содержащая один файл с надписью "hello world" ).
Я пытался скопировать данные непосредственно в поток php://temp
, и с успехом сделал это (, если I 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()
), проблема здесь заключается в непостоянстве данных в php://memory
и php://temp
потоки между дескрипторами. Если это можно обойти, возможно, это действительно возможно.
Продолжает возвращаться код ошибки 11
, который я нашел нет 2 документация по (, похоже, как и большинство других возможных кодов ошибок )
var_dump($zip); // int(11)
2 Как указал @cweiske, код ошибки 11 = ZipArchive::ER_OPEN
, Не удается открыть файл
Является ли это следствием моей попытки использовать поток php://temp
или какой-либо другой возможной проблемой? Я также знаю, что существует подход ООП (ZipArchive
и др. ), но я решил, что начну с основ.
Есть идеи?