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