PHP and Python

Discussion in 'PHP' started by EST a1ien, 19 Nov 2009.

  1. EST a1ien

    EST a1ien Elder - Старейшина

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

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

    login999 Elder - Старейшина

    Joined:
    12 Jun 2008
    Messages:
    491
    Likes Received:
    280
    Reputations:
    92
    Честно говоря смутно понял что это такое - понял только что из пхп нужно вызвать питон - срипт. Это изврат. Уж лучше на питоне написать какого-то демона (естественно, при условии что это вдс/впс/дед в противном случае это маразм). Подключение питона не так просто как кажется. Там хватает подводных камней. Насчет работы с БД - есть такая вещь как SQLalchemy, она все твои вопросы по поводу БД решит. Или переписать питон скрипт на пхп.
     
  3. EST a1ien

    EST a1ien Elder - Старейшина

    Joined:
    2 Apr 2006
    Messages:
    249
    Likes Received:
    48
    Reputations:
    16
    Чесно полностью согласен что это изврат НО
    Это конечно возможно НО переписывать около 2,5к строк с питона на пхп занятие для еще больших извращенцев ))
    Собстенно непонятно а причем тут демон.
    Грубо говоря совсем упрощая.
    Мне надо отдать пользователю файл после обработки его тем питон скриптом. А то что я описывал было мои идеи по решению той проблемы.

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

    login999 Elder - Старейшина

    Joined:
    12 Jun 2008
    Messages:
    491
    Likes Received:
    280
    Reputations:
    92
    Просто можно написать демона который будет проверять постоянно с заданным интервалом (ну положим там в секунду или пол секунды) БД на наличие задач по сертификации или что там. И потом обратно ложить в БД сертфицированный файл, а пхп же будет просто в БД ложить запрос на эту саму сертификацию, а потом через заданный интервал проверять БД на наличие ответного файла
    Под демоном подразумеваю скрипт, просто работающий себе на вдс , которого никто не трогает :)
    P.S. Я за четкое разделение задач.
    P.P.S. Какая предполагается пиковая нагрузка ?
    P.P.P.S. :D Свалил спать, буду завтра читать :)
     
    #4 login999, 19 Nov 2009
    Last edited: 19 Nov 2009
    1 person likes this.
  5. EST a1ien

    EST a1ien Elder - Старейшина

    Joined:
    2 Apr 2006
    Messages:
    249
    Likes Received:
    48
    Reputations:
    16
    Демон не получиться по той причине что
    1) Нужно отдать файл по запросу пользователя.
    2) Подпись файла делается моментально(ну время выполнения скрипта на питоне менее 1 сек)
    3) Выекает из 1. Пользователь может запросить на подпись любой файл любым своим сертефикатом.
    Тоесть подписать все файлы одним сертом и складировать их неполучиться.

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

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

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

    login999 Elder - Старейшина

    Joined:
    12 Jun 2008
    Messages:
    491
    Likes Received:
    280
    Reputations:
    92
    Вот вам бы тут необходимо почитать.
    http://habrahabr.ru/blogs/python/67475/#habracut
    Подозреваю, что в планируете использовать mod_python.
    Посмотрите тесты, почитайте, сделайте выводы.
    В принципе с вашей предполагаемой нагрузкой то вам оно до жопы.
    Вам его как угодно можно подключить.
    Я предполагал нагрузку поболее.

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

    EST a1ien Elder - Старейшина

    Joined:
    2 Apr 2006
    Messages:
    249
    Likes Received:
    48
    Reputations:
    16
    нет сама посебе нагрузка на сайт будет.
    А это грубо говоря некая предоставляемая услуга на сайте.
    Щас почитаю что на хабре пишут.
    ЗЫ
    Да переписывать DLE(который я и так переделываю под свои нужды) на питон это сильно ))
     
  8. LEE_ROY

    LEE_ROY Elder - Старейшина

    Joined:
    9 Nov 2006
    Messages:
    450
    Likes Received:
    188
    Reputations:
    26
    вам на free-lance.ru и подобные
     
  9. EST a1ien

    EST a1ien Elder - Старейшина

    Joined:
    2 Apr 2006
    Messages:
    249
    Likes Received:
    48
    Reputations:
    16
    Это к чему пост?
     
  10. imajo.ati

    imajo.ati Banned

    Joined:
    21 Feb 2008
    Messages:
    232
    Likes Received:
    62
    Reputations:
    8
    через http протокол можно.


    php скрипт посылает следующие заголовки:
    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-й файл
     
    #10 imajo.ati, 20 Nov 2009
    Last edited: 20 Nov 2009
  11. nerezus

    nerezus Banned

    Joined:
    12 Aug 2004
    Messages:
    3,191
    Likes Received:
    729
    Reputations:
    266
    Не изврат, а обычная рабочая ситуация. Ничего плохого в этом нету.

    Упакуй в zip.
     
  12. EST a1ien

    EST a1ien Elder - Старейшина

    Joined:
    2 Apr 2006
    Messages:
    249
    Likes Received:
    48
    Reputations:
    16
    imajo.ati,
    Это и так понятно. щас это та и живет.
    И я непрошу подсказывать как написать код ))
    Код я и сам могу написать. Меня интересует только сама идея(а точнее как это лучше/правильнее сделать)
    Проблема тут комплексная.
    О_о а зачем лишний раз грузить сервак упаковкой файла если можно и тк отдать без упаквки.
    Вся проблема сводиться насамом деле вот к чему.
    Передача питон скрипту в параметрах файл/петь к файлу.

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

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

    nerezus Banned

    Joined:
    12 Aug 2004
    Messages:
    3,191
    Likes Received:
    729
    Reputations:
    266
    1) передай в stdin
    2) читай питоном из базы
    3) передай через общую память
     
  14. EST a1ien

    EST a1ien Elder - Старейшина

    Joined:
    2 Apr 2006
    Messages:
    249
    Likes Received:
    48
    Reputations:
    16
    Можно чутка по подробней этот пункт?
     
  15. nerezus

    nerezus Banned

    Joined:
    12 Aug 2004
    Messages:
    3,191
    Likes Received:
    729
    Reputations:
    266
    shared memory
     
  16. EST a1ien

    EST a1ien Elder - Старейшина

    Joined:
    2 Apr 2006
    Messages:
    249
    Likes Received:
    48
    Reputations:
    16
    Ну какбы это понятно что шаред мемори. НО как этим пользоваться для обмена между питон скриптом и пхп
     
  17. nerezus

    nerezus Banned

    Joined:
    12 Aug 2004
    Messages:
    3,191
    Likes Received:
    729
    Reputations:
    266
    пишешь данныйе в сабж и вызываешь систем, передавая id/etc данных
     
    1 person likes this.