PDA

Просмотр полной версии : PHP and Python


EST a1ien
19.11.2009, 22:54
В общем есть следующая проблема.
Есть скрипт на питоне которому передаются 3 файла и он делает на их основе четвертый(если быть откровенным то это просто подпись файла, тобеж 1 это файл сертификата 2 это файл ключей а 3 это тот фйл который мы подписываем).
Собственно есть дилемма, как лучше отдать 4 файл пользователю(как будет правильнее)?
Вы наверно спросите причем тут пхп, дело в том что сайт написан на пхп и думаю так будет проще кое какие варианты реалиовать.
Я вижу пару варианта. При этом хотелось бы(я бы даже сказал ооочень хотелось, так как это облегчит в будущем мне жизнь:), хранить сертификат и ключ в базе а не в отдельных файлах ).
1) Сертификат и ключ храним не в базе ( :( ) , а в базе просто храним путь до них.
через passthru в php мы запускаем скрипт на питоне а скрипт правим так чтобы он делал вывод не в файл а на стандартный поток вывода.
Тут соответственно + в том что это все довольно просто в реализации. Но вот насколько это грамотно(имееться ввиду запуск через passthru скрипта)
2) Вариант близкий к идеальному но не не совсем )
Мы просто разрешаем исполнение python скриптов на сайте(честно некогда не подключал питон на сайтах но думаю это не проблема, и если все таки подключать. тут наверно лучше как cgi приложение его подключать, ведь этот python скрипт будет не часто вызываться), и в самом скрипте на питоне подключаться к базе забирать из нее сертификат и ключ подписывать файл и отдавать ссылку на файл пользователю.
Тут не идельно вот что. Насколько питон нормально работает с mysql? ))
3) Вариант мы питон скрипту через параметры передаем сертификат и ключ подписываем приложение и дальше схоже с 1 вариантом.
Тут + в том что сертификат и ключ хранятся как и хотелось бы, в базе.
4 Некая комбинация 1-3 варианта?
5 ваши предложения ?

ЗЫ файлы которые мы будем отдавать и подписывать будут в среднем 1-3мб максимум 8-10 мб

login999
19.11.2009, 23:49
В общем есть следующая проблема.
Есть скрипт на питоне которому передаются 3 файла и он делает на их основе четвертый(если быть откровенным то это просто подпись файла, тобеж 1 это файл сертификата 2 это файл ключей а 3 это тот фйл который мы подписываем).
Собственно есть дилемма, как лучше отдать 4 файл пользователю(как будет правильнее)?
Вы наверно спросите причем тут пхп, дело в том что сайт написан на пхп и думаю так будет проще кое какие варианты реалиовать.
Я вижу пару варианта. При этом хотелось бы(я бы даже сказал ооочень хотелось, так как это облегчит в будущем мне жизнь:), хранить сертификат и ключ в базе а не в отдельных файлах ).
1) Сертификат и ключ храним не в базе ( :( ) , а в базе просто храним путь до них.
через passthru в php мы запускаем скрипт на питоне а скрипт правим так чтобы он делал вывод не в файл а на стандартный поток вывода.
Тут соответственно + в том что это все довольно просто в реализации. Но вот насколько это грамотно(имееться ввиду запуск через passthru скрипта)
2) Вариант близкий к идеальному но не не совсем )
Мы просто разрешаем исполнение python скриптов на сайте(честно некогда не подключал питон на сайтах но думаю это не проблема, и если все таки подключать. тут наверно лучше как cgi приложение его подключать, ведь этот python скрипт будет не часто вызываться), и в самом скрипте на питоне подключаться к базе забирать из нее сертификат и ключ подписывать файл и отдавать ссылку на файл пользователю.
Тут не идельно вот что. Насколько питон нормально работает с mysql? ))
3) Вариант мы питон скрипту через параметры передаем сертификат и ключ подписываем приложение и дальше схоже с 1 вариантом.
Тут + в том что сертификат и ключ хранятся как и хотелось бы, в базе.
4 Некая комбинация 1-3 варианта?
5 ваши предложения ?

ЗЫ файлы которые мы будем отдавать и подписывать будут в среднем 1-3мб максимум 8-10 мб
Честно говоря смутно понял что это такое - понял только что из пхп нужно вызвать питон - срипт. Это изврат. Уж лучше на питоне написать какого-то демона (естественно, при условии что это вдс/впс/дед в противном случае это маразм). Подключение питона не так просто как кажется. Там хватает подводных камней. Насчет работы с БД - есть такая вещь как SQLalchemy, она все твои вопросы по поводу БД решит. Или переписать питон скрипт на пхп.

EST a1ien
20.11.2009, 00:09
Честно говоря смутно понял что это такое - понял только что из пхп нужно вызвать питон - срипт. Это изврат.
Чесно полностью согласен что это изврат НО
....переписать питон скрипт на пхп.
Это конечно возможно НО переписывать около 2,5к строк с питона на пхп занятие для еще больших извращенцев ))
Уж лучше на питоне написать какого-то демона (естественно, при условии что это вдс/впс/дед в противном случае это маразм).
Собстенно непонятно а причем тут демон.
Грубо говоря совсем упрощая.
Мне надо отдать пользователю файл после обработки его тем питон скриптом. А то что я описывал было мои идеи по решению той проблемы.

Да действия будут происходить на ВДС

login999
20.11.2009, 00:24
Просто можно написать демона который будет проверять постоянно с заданным интервалом (ну положим там в секунду или пол секунды) БД на наличие задач по сертификации или что там. И потом обратно ложить в БД сертфицированный файл, а пхп же будет просто в БД ложить запрос на эту саму сертификацию, а потом через заданный интервал проверять БД на наличие ответного файла
Под демоном подразумеваю скрипт, просто работающий себе на вдс , которого никто не трогает :)
P.S. Я за четкое разделение задач.
P.P.S. Какая предполагается пиковая нагрузка ?
P.P.P.S. :D Свалил спать, буду завтра читать :)

EST a1ien
20.11.2009, 00:48
Демон не получиться по той причине что
1) Нужно отдать файл по запросу пользователя.
2) Подпись файла делается моментально(ну время выполнения скрипта на питоне менее 1 сек)
3) Выекает из 1. Пользователь может запросить на подпись любой файл любым своим сертефикатом.
Тоесть подписать все файлы одним сертом и складировать их неполучиться.

Итог. Запрос пользователся (имя файла+выбранный серт)=> (Както подписывам) => както отдаем файл пользвателю. ))

Собственно а где подводные камни зарыты при подключении питона к апатчу?

Пиковая нагрузка ну думаю что 1-2 файла на подпись в минуту МАКСИМУМ ))

login999
20.11.2009, 11:27
Вот вам бы тут необходимо почитать.
http://habrahabr.ru/blogs/python/67475/#habracut
Подозреваю, что в планируете использовать mod_python.
Посмотрите тесты, почитайте, сделайте выводы.
В принципе с вашей предполагаемой нагрузкой то вам оно до жопы.
Вам его как угодно можно подключить.
Я предполагал нагрузку поболее.

P.P.S. Предлагаю маразм еще круче - переписать сайт на Python :D

EST a1ien
20.11.2009, 11:41
нет сама посебе нагрузка на сайт будет.
А это грубо говоря некая предоставляемая услуга на сайте.
Щас почитаю что на хабре пишут.
ЗЫ
P.P.S. Предлагаю маразм еще круче - переписать сайт на Python
Да переписывать DLE(который я и так переделываю под свои нужды) на питон это сильно ))

LEE_ROY
20.11.2009, 11:56
вам на free-lance.ru и подобные

EST a1ien
20.11.2009, 11:59
вам на free-lance.ru и подобные
Это к чему пост?

imajo.ati
20.11.2009, 18:59
Собственно есть дилемма, как лучше отдать 4 файл пользователю(как будет правильнее)?

через http протокол можно.


php скрипт посылает следующие заголовки:
header('Content-Type: application/force-download');
header('Content-Type: application/octet-stream');
header('Content-Type: application/download');
header('Content-Transfer-Encoding: binary');
header('Content-Disposition: attachment; filename="4file.txt"');


и браузер предлагает скачать 4-й файл

nerezus
20.11.2009, 19:44
понял только что из пхп нужно вызвать питон - срипт. Это изврат. Не изврат, а обычная рабочая ситуация. Ничего плохого в этом нету.

как лучше отдать 4 файл пользователю Упакуй в zip.

EST a1ien
20.11.2009, 22:39
imajo.ati,
Это и так понятно. щас это та и живет.
И я непрошу подсказывать как написать код ))
Код я и сам могу написать. Меня интересует только сама идея(а точнее как это лучше/правильнее сделать)
Проблема тут комплексная.
Упакуй в zip
О_о а зачем лишний раз грузить сервак упаковкой файла если можно и тк отдать без упаквки.
Вся проблема сводиться насамом деле вот к чему.
Передача питон скрипту в параметрах файл/петь к файлу.

В общем либо передавать скрипту на питоне пути к файлу. но это нехотелось бы поскольку просто будет захламелн винт тупо файлами размером в 2 кб.
Хотелось бы просто питон скрипту передать первый и 2 файл(тобеж сертификат и ключ) как просто строки параметров обжатых в base64. Но тут встает пороблемма а Насколько длинные команды можно передать через командную строку ))

Просто оочень нехочеться хранить сертефикат и ключ в файлах а хотелось бы их в базе
Хотя может вы меня переубедите(и да я знаю что базы для ханения файлов неподходят) Но строчку размером в пару кб мне както не тянет назвать файлом.
Хотя может я и неправ.
Или всетаки не париться и хранить сертификаты просто как файлы. в базе пути до них и запускать питон скрипт просто указывая пути до них?
Тогда может нестоит делать бинарный вывод на питон скрипте, а просто сохранять файл и отдавать линк на скачку преобразователям. И через час удалять этот файл?

nerezus
21.11.2009, 00:38
1) передай в stdin
2) читай питоном из базы
3) передай через общую память

EST a1ien
21.11.2009, 02:03
3) передай через общую память

Можно чутка по подробней этот пункт?

nerezus
21.11.2009, 15:55
shared memory

EST a1ien
21.11.2009, 16:15
Ну какбы это понятно что шаред мемори. НО как этим пользоваться для обмена между питон скриптом и пхп

nerezus
21.11.2009, 19:36
пишешь данныйе в сабж и вызываешь систем, передавая id/etc данных