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.”;