Ciąg do strumienia skompresowanego w php

Mam serwer przetwarzania z moją bazą danych i obsługującą bazę danych do obsługi plików o niskim koszcie łącza. Na serwerze przetwarzania php nie jest w stanie tworzyć plików, więc wszystko musi być wykonane ze strumieniami i / lub pozostać w pamięci przed wysłaniem na inny serwer w celu pobrania. Kilka dni temu dowiedziałem się o abstrakcji strumienia z „pamięcią php: //” i że mogę zrobić coś takiego

$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);

aby utworzyć plik w pamięci, a następnie pozwól mi go przełączyć na inny serwer. To jest dokładnie to, czego chcę, z wyjątkiem tego, że chcę również skompresować dane przed wysłaniem - najlepiej używając tylko rodzimych części php, takich jak ziparchive, a nie dodatkowych klas niestandardowych do specjalnej manipulacji strumieniem. Wiem, że jestem bardzo blisko z następującymi ...

$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";

Punktem, w którym to się nie powiedzie, jest wywołanie getStream (które zawsze zwraca false, chociaż myślę, że używam poprawnie). Wygląda na to, że plik zip tworzy plik w pamięci 'php: //', ale z jakiegoś powodu getStream nadal nie działa, chociaż może nie rozumiem wystarczająco, jak ZipArchive tworzy zamki ...

Jak mogę przejść od ciągu znaków do skompresowanej filipointera, dzięki czemu mogę przesłać zip na mój inny serwer? Pamiętaj, że nie mogę tworzyć żadnych plików, bo inaczej po prostu utworzę plik zip, a następnie przekaż go ftp.

EDYTOWAĆ: w oparciu o sugestie skinnynerda poniżej spróbowałem następujących rzeczy

$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);
}

Robi to zip i wysyła go, ale zip jest 0 bajtów dużych, więc nie sądzę, że 'pamięć php: //' działa tak, jak myślałem ... w rzeczywistości nie działa z bliska - $ zip -> close () zwraca false, co sprawia, że ​​zastanawiam się, czy mogę w ogóle otworzyć zip do pamięci 'php: //'. Czy ktoś wie, co mogę spróbować w tej linii, aby uzyskać zamek?

questionAnswers(3)

yourAnswerToTheQuestion