Рубрики
Uncategorized

PHP вызывает службу Python

Автор оригинала: David Wong.

PHP вызывает службу Python

Кан Кан: компания использует Popen php для вызова Python в виде команды. Прежде всего, давайте поговорим о недостатках этого. Недостатки PHP, выполняющего вызов командной строки в Python Popen (‘тест python. Py [параметр], ‘R’); Недостаток 1: по умолчанию для Windows используется кодировка GBK. Когда китайские параметры UTF-8 передаются в PHP, у python возникнут проблемы с получением параметров.

Существует ограничение по длине команд CMD или команд оболочки. Если переданные параметры слишком длинные, полученные параметры не будут полными. Опасно выполнять команду оболочки. Если в параметре что-то есть, вы это знаете.

Тогда что мне делать? сервер сокетов python Не говоря уже о непонятном Байду “сокете”, следующем коде (написан PHP-сервис вызова Python для украшения приложения JavaScript, серверный Python):

импорт sys, json импорт обратной трассировки импорт SocketServer из демона импорт демона импорт jsbeautifier

сегодня урок:

def __init__(self):
    print('Welcome!')
def test(self, args):
    res = jsbeautifier.beautify(args[0].encode('utf-8'))
    return res;
def error(self, args):
    return 'not function!'

класс ThreadedTCPRequestHandler(SocketServer.базовый запрос):

def handle(self):
    while True:
        try:
            data = self.request.recv(2*1024*1024)
            if not data:
                print('end')
                break
            data = json.loads(data)
            res =  getattr(self._object, data['func'], 'error')(data['args'])
            if not res:
                res = ''
            res = str(len(res)).rjust(8, '0') + str(res)
            self.request.send(res)
        except:
            print('error in ThreadedTCPRequestHandler :%s, res:%s' % (traceback.format_exc(), data))

класс ThreadedTCPServer(сокетсервер.Смешивание нитей, SocketServer.TCPServer):

pass

сервер классов(Демон):

def conf(self, host, port, obj):
    self.host = host
    self.port = port
    self.obj = obj
    ThreadedTCPServer.allow_reuse_address = True
def run(self):
    ThreadedTCPRequestHandler._object = self.obj
    server = ThreadedTCPServer((self.host, self.port), ThreadedTCPRequestHandler)
    server.serve_forever()

если имя :

server = Server('/tmp/daemon-tortoise.pid')
server.conf('0.0.0.0', 1990, Todo())
if len(sys.argv) == 2:
    if 'start' == sys.argv[1]:
        server.start()
    elif 'stop' == sys.argv[1]:
        server.stop()
    elif 'restart' == sys.argv[1]:
        server.restart()
    else:
        print("Unknown command")
        sys.exit(2)
    sys.exit(0)
else:
    print("usage: %s start|stop|restart" % sys.argv[0])
    sys.exit(2)

Объясните, что приведенный выше код предназначен для создания сервера сокетов с Python и присоединения к демонам системы. Вы знаете, какова фабрика стратегии внедрения в todo. способ использования: python sever.py [запуск|остановка|перезапуск]

PHP вызывает Python через сокет //Файлы, на которые ссылается код, будут указаны во вложении, в котором также указан метод параллельной записи PHP заголовок(“Тип содержимого: текст/ html ;-8”); требуется ‘socketapi.php’; $s сервер(‘192.168.1.8’, 1990); $код = << / Украсить: форматируйте код, чтобы его было легко читать / / Очистка: удалите избыточные комментарии, новые строки, пробелы и т.д. В коде / /| Сжатие: сожмите код в меньший объем для удобства передачи |/ /Распаковка: преобразуйте сжатый код в формат, читаемый человеком / / Украсить: форматируйте код, чтобы его было легко читать

/ Если это работает, не забудьте порекомендовать его своим друзьям: / /Онлайн-украшение, очистка, сжатие и декомпрессия JavaScript: http://box.inote.cc/js /

/ Вот демо-код /

var getPositionLite = function(el) {        var x = 0,        y = 0;        while (el) {            x += el.offsetLeft || 0;            y += el.offsetTop || 0;            el = el.offsetParent        }        return {            x: x,            y: y        }    };

/ Обновленные записи: /

var history = {
    'v1.0': ['2011-01-18 ','javascript tool online']
};

EOT; $res = $s->obj(‘Todo’)->тест($код); echo ‘<предварительно>’.$rec.”;