Строка в Zip Stream в php

У меня есть сервер обработки с моей базой данных и обслуживающая база данных для обслуживания файлов с низкой стоимостью полосы пропускания. На сервере обработки php не может создавать файлы, поэтому все должно быть сделано с потоками и / или оставаться в памяти перед отправкой на другой сервер для загрузки. Несколько дней назад я узнал об абстракции потока с помощью & php: // memory & php; и что я могу сделать что-то вроде

$fp=fopen('php://memory','w+');
fwrite($fp,"Hello world");
fseek($fp,0,SEEK_SET);

//make a ftp connection here with $conn_id
$upload = ftp_fput($conn_id,"targetpath/helloworld.txt",$fp,FTP_BINARY);

сделать файл в памяти, а затем позволить мне перенести его на другой сервер. Это именно то, что я хочу, за исключением того, что я также хочу заархивировать данные перед отправкой - предпочтительно используя только собственные части php, такие как ziparchive, а не дополнительные пользовательские классы для специальной обработки потока. Я знаю, что я очень близок со следующим ...

$zip = new ZipArchive();
if($zip->open('php://memory', ZIPARCHIVE::CREATE)) {
  $zip->addFromString('testtext.txt','Hello World!');
  $fp = $zip->getStream('test'); if(!$fp) print "no filepointer";

  //make a ftp connection here with $conn_id
  $upload = ftp_fput($conn_id,"targetpath/helloworld.zip",$fp,FTP_BINARY);
} else print "couldn't open a zip like that";

Точка, в которой это терпит неудачу, является вызовом getStream (который всегда возвращает false, хотя я думаю, что я использую правильно). Похоже, что zip прекрасно работает, создавая файл в & php; php: // memory & apos; но по какой-то причине getStream все еще не работает, хотя, возможно, я недостаточно понимаю, как ZipArchive делает молнии ...

Как я могу перейти от строки к заархивированному указателю файла, чтобы я мог ftp переместить zip на другой сервер? Помните, что я не могу создавать какие-либо файлы, иначе я бы просто сделал zip-файл, затем перевернул его.

EDIT: основываясь на предложениях скиннинерда, приведенных ниже, я попробовал следующее

$zip = new ZipArchive();
if($zip->open('php://memory', ZIPARCHIVE::CREATE)) {
  $zip->addFromString('testtext.txt','Hello World!');
  $zip->close(); 

  $fp = fopen('php://memory','r+');
  fseek($fp,0,SEEK_SET);

  //connect to ftp
  $upload = ftp_fput($conn_id,"upload/transfer/helloworld.zip",$fp,FTP_BINARY);
}

Это делает zip и отправляет его поверх, но zip имеет размер 0 байт, поэтому я не думаю, что & php: // memory & apos; работает так, как я думал ... на самом деле происходит сбой при закрытии - $ zip-> close () возвращает false, что заставляет меня задуматься, могу ли я открывать zip в & php: // memory & apos; совсем. Кто-нибудь знает, что я могу попробовать по этой линии, чтобы получить почтовый индекс?

Ответы на вопрос(3)

Ваш ответ на вопрос