Не уверен, возможно ли это, но сейчас это превратилось в академическую борьбу.
Используя трюк __ halt_compiler ()
для встраивания двоичных данных в файл PHP, я успешно создал самооткрывающийся скрипт, который будет fseek ()
в __ COMPILER_HALT_OFFSET __
( нетрудно заметить, поскольку этот точный пример задокументирован в руководстве )
В любом случае, я сохранил небольшой кусок двоичных данных ZIP ( в одной папке, содержащей один файл с надписью "hello world" ) после моего вызова __ 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);
Моя проблема связана с попыткой к n ow open 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
и др. ), но я решил начать с основ.
Есть идеи?