передавать файлы с ssh-сервера напрямую клиенту - PullRequest
0 голосов
/ 21 сентября 2011

У меня есть ssh-сервер, который используется для хранения моих файлов в Интернете.мне нужно, чтобы эти файлы были легко доступны для загрузки, поэтому я использую библиотеку paramiko для подключения к ssh-серверу (из моего скрипта на python), затем он перечисляет файлы и отображает их на веб-странице.проблема в том, что я не хочу загружать файлы на диск веб-сервера (не хватает места), а затем отправлять их клиентам, вместо этого делать что-то вроде чтения файла и плевать, как это можно сделать в php.

как-то так в python

<?php
// your file to upload
$file = '2007_SalaryReport.pdf';
header("Expires: 0");
header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT");
header("Cache-Control: no-store, no-cache, must-revalidate");
header("Cache-Control: post-check=0, pre-check=0", false);
header("Pragma: no-cache");
header("Content-type: application/pdf");
// tell file size
header('Content-length: '.filesize($file));
// set file name
header('Content-disposition: attachment; filename='.basename($file));
readfile($file);
// Exit script. So that no useless data is output-ed.
exit;
?>

Ответы [ 2 ]

1 голос
/ 21 сентября 2011

Не ответ программиста: вместо paramiko смонтировать каталог с документами с sshfs и обслуживать документы, как если бы они находились в локальной файловой системе

http://fuse.sourceforge.net/sshfs.html

0 голосов
/ 21 сентября 2011

Cgi-скрипт генерирует вывод на stdout, который доставляется на веб-сервер. Вывод начинается со строк заголовка, одной пустой строки (в качестве разделителя) и затем содержимого.

Таким образом, вы должны изменить header() вызовы на print операторы. И readfile($file) следует заменить на

 print
 print open("2007_SalaryReport.pdf","rb").read()

См. http://en.wikipedia.org/wiki/Common_Gateway_Interface

...