Лучший способ передачи потока данных приличного размера между серверами в php

У меня есть сервер «автономной обработки», который очень мало взимает с меня за циклы процессора, и сервер «обслуживания мультимедиа», который очень мало взимает с меня за пропускную способность. У меня есть zip-файл ~ 1,3 МБ, который генерирует автономный сервер обработки, а затем отправляет на сервер медиа-обслуживания для фактического размещения для загрузки. Способ, которым я это делал, заключался в том, что автономный сервер обработки создавал файл на себе и передавал его по ftp на другой сервер, но мне пришлось переместить хосты, и теперь автономный сервер обработки не имеет возможности сохранять файлы на сам.

Моя первая мысль заключалась в том, что я могу создать прослушивающий php-скрипт на сервере медиа-обслуживания, а затем отправить содержимое в этот скрипт, который сохранит его в zip-файле. В разархивированном виде это ~ 4,1 МБ, так что было бы неплохо опубликовать столько данных? Второе, о чем я подумал, это потоки в php... но я не знал, что будет лучше.

Как мне лучше всего перенести эти 4,1 МБ данных с одного сервера на другой, если я не могу сохранить их в виде файла на сервере, который генерирует данные?


person hackartist    schedule 14.07.2012    source источник
comment
Как часто нужно делать эту обработку?   -  person corsiKa    schedule 14.07.2012
comment
примерно раз в неделю, и из-за этого он выполняет задание cron - по мере изменения моего базового набора данных это создает сводку для загрузки на мобильном клиенте.   -  person hackartist    schedule 14.07.2012
comment
На первый взгляд кажется, что он достаточно мал, чтобы поместиться в памяти для отправки на сервер контента ... но я отмечу, что я не большой специалист по php.   -  person corsiKa    schedule 14.07.2012
comment
Почему вы должны использовать PHP? Rsync или FTP хорошо подходят для такого рода задач.   -  person Eric J.    schedule 14.07.2012
comment
если вам нужно использовать php, вы можете опубликовать такой объем данных. все хорошо. но убедитесь, что настройки вашего медиа-сервера позволяют это, и время ожидания php не истекает: stackoverflow.com/questions/2364840/   -  person Dreaded semicolon    schedule 14.07.2012
comment
Я должен использовать php, потому что это php-скрипт, который общается с базой данных и выполняет обработку, поэтому данные находятся в памяти php и не могут попасть в файл. В противном случае я бы просто использовал FTP, как раньше, но часть вопроса заключалась именно в том, что php не мог создавать файлы.   -  person hackartist    schedule 14.07.2012


Ответы (1)


Если ваш хост поддерживает это, я могу попробовать что-то вроде:

$fp = fopen('php://memory', 'w+');
fwrite($fp, "Hello, World!"); // create your file
fseek($fp, 0, SEEK_SET);

// connect to ftp
ftp_fput($ftp, '/foo', $fp, FTP_BINARY);   

fclose($fp);
person Matthew    schedule 14.07.2012
comment
Очень-очень интересно - я никогда раньше не слышал о php://memory, но я посмотрю на это. - person hackartist; 14.07.2012
comment
В худшем случае вы можете поместить все в переменную (строку) и написать над ней тонкую оболочку потока. Это определенно сработает. (Для уродливого примера: php.net/manual/en/stream. streamwrapper.example-1.php) - person Matthew; 14.07.2012
comment
Большое спасибо за ваш ответ. Это сработало очень хорошо, но у меня также есть дополнительный вопрос, который вы, возможно, сможете решить, так как это связано - person hackartist; 15.07.2012