Задать вопрос

KPHP — обмен опытом, кто работал?

Есть очень много вопросов.

1. Замечательно компилируется из php в elf (бинарник). Elf отрабатывает замечательно. Получается, что можно использовать kphp только как компиляцию консольных приложений?
2. Каким образом можно всё это дело использовать в web'е? Как, например, подрубить скомпилированное чудо к nginx'у в виде backend'а?
3. Возможно ли скомпилировать php-extension из kphp кода? Если да - то как? Без танцев с бубнами в виде kphp2cpp, а затем портировать его под phpize.
4. Как собирать и пользоваться kphpdb примерами, которые идут в комплекте с kphp?

Может быть, я слишком туп для этого, но продукт сыроват в плане "документации". Отлично расписаны архитектура, цели, кейсы, но сборка и использование - ничего.
  • Вопрос задан
  • 6871 просмотр
Подписаться 10 Оценить Комментировать
Пригласить эксперта
Ответы на вопрос 6
Настройка Engine

При условии что kphp-kdb здесь: /usr/local/src/kphp-kdb/

cd /usr/local/src/kphp-kdb/
make all

mkdir /usr/share/engine/
mkdir /usr/share/engine/bin/
mkdir /var/log/engine/
mkdir /etc/engine

cp /usr/local/src/kphp-kdb/objs/bin/* /usr/share/engine/bin/
cp /usr/local/src/kphp-kdb/scripts/debian-init.d-engine /etc/init.d/engine
cp /usr/local/src/kphp-kdb/scripts/_etc_logrotate.d_engine /etc/logrotate.d/engine
cp /usr/local/src/kphp-kdb/scripts/start-engine /usr/share/engine/bin/

logrotate -d /etc/logrotate.d/engine
logrotate -v -f /etc/logrotate.d/engine

Теперь можно запускать KDB движки.

Для примера запуск lists-engine:

touch /etc/engine/engine.1.conf
Вставляем содержимое:
execute lists-engine
arg1 groups23
-p 11200
-vvv

touch /var/lib/engine/groups23.bin
/usr/local/src/kphp-kdb/scripts/create_binlog.sh 0x6ef20101 128 98 > /var/lib/engine/groups23.bin
hexdump -C /var/lib/engine/groups23.bin
Выдаст такое:

00000000 4b 64 4c 04 01 01 f2 6e 00 00 00 00 80 00 00 00 |KdL....n........|
00000010 62 00 00 00 63 00 00 00 |b...c...|
00000018

chown -R kitten:kitten /var/lib/engine/

echo 1 > /proc/sys/vm/overcommit_memory

service engine start 1
service engine status

Если fail смотрим логи

cat /var/log/engine/engine-1.log
Ответ написан
Комментировать
Сборка KPHP
Ubuntu 12.04.4 LTS

sudo apt-get install git-core openssl zlib1g-dev libcg libprcre3-dev

Ставим libre2:
wget re2.googlecode.com/files/re2-20140304.tgz
tar -zxvf re2-20140304.tgz
cd re2/
make
make test (Не обращаем внимание на ошибку)
make install
make testinstall

cd /usr/local/src/
git clone https://github.com/vk-com/kphp-kdb
cd /usr/local/src/kphp-kdb/

make kphp

Проверяем сборку: /usr/local/src/kphp-kdb/objs/bin/kphp2cpp
Если все ок:

export KPHP_PATH=/usr/local/src/kphp-kdb

Пример компиляции php в kphp:

Для примера возмем файл bench.php
Лежит он здесь: https://gist.github.com/anonymous/9391146
Скачиваем, кладем.
mkdir /var/www/testkphp
cd /var/www/testkphp/
Компилируем bench.php в kphp
python /usr/local/src/kphp-kdb/KPHP/tests/kphp.py bench.php -o bench
После компиляции запускаем
./bench
Увидим таблицу тестов.

Сравниваем с php:
php bench.php

Радуемся!
Ответ написан
Комментировать
Запуск Web-Сервера

Пример с учетом установки по инструкции выше.

KPHP работает под юзером "kitten"
Нужно его создать:

mkdir /var/lib/engine - лучше всего здесь, потом пригодится.
sudo useradd kitten -b /var/lib/engine -u 239
chown -R kitten:kitten /var/lib/engine/

cd /var/www/testkphp/
Создаем файлик:
touch index.php
Вставляем тестовое содержимое:
<?
print_r($_GET);
print_r($_SERVER);
?>

Компилим наш файлик в бинарник с ключом -n:
python /usr/local/src/kphp-kdb/KPHP/tests/kphp.py index.php -o server -n

На выходе получаем исполняемый файл "server"
Запускаем ./server -H 8080

Идем на 127.0.0.1:8080
Ответ написан
Комментировать
А вообще, го сюда https://vk.com/kitphp - я создал.
Ответ написан
Комментировать
Fesor
@Fesor
Full-stack developer (Symfony, Angular)
1. Чем WEB приложение принципиально отличается от консольного? Задумайтесь. Вам нужно просто каким-то образом проксировать запросы от вашего web сервера (думаю nginx) в приложение.
2. Смотри ответ к 1-ому пункту. Как именно связать не вкурсе, не использовал и не вижу практической пользы от KPHP.
3. Нет, это не возможно. Попробуйте зефир.

На самом деле KPHP очень сомнительная штука. и если у вас возникают вопросы подобного рода, то вам оно и не нужно.
Ответ написан
Комментировать
Господа, подскажите пожалуйста как на CentOs 6.5 x64 kphp установить

Сейчас имею следующую проблему:
[root@centos64 kphp-kdb]# make kphp
cc -Wall -O3 -m64 -march=core2 -mfpmath=sse -mssse3 -ggdb -fno-strict-aliasing -fno-strict-overflow -fwrapv -DCOMMIT=\"ce6dead5b3345f4b38487cc9e45d55ced3dd7139\" -I common -I binlog -I net -I kfs -I drinkless -I skat -I vv -I objs -I . -c -MP -MD -MF dep/TL/tlc-new.d -MQ objs/TL/tlc-new.o -o objs/TL/tlc-new.o TL/tlc-new.c
TL/tlc-new.c: In function ‘main’:
TL/tlc-new.c:73:9: warning: variable ‘expr_filename’ set but not used [-Wunused-but-set-variable]
char *expr_filename = NULL;
^
cc -Wall -O3 -m64 -march=core2 -mfpmath=sse -mssse3 -ggdb -fno-strict-aliasing -fno-strict-overflow -fwrapv -DCOMMIT=\"ce6dead5b3345f4b38487cc9e45d55ced3dd7139\" -I common -I binlog -I net -I kfs -I drinkless -I skat -I vv -I objs -I . -c -MP -MD -MF dep/TL/tl-parser-new.d -MQ objs/TL/tl-parser-new.o -o objs/TL/tl-parser-new.o TL/tl-parser-new.c
cc -Wall -O3 -m64 -march=core2 -mfpmath=sse -mssse3 -ggdb -fno-strict-aliasing -fno-strict-overflow -fwrapv -DCOMMIT=\"ce6dead5b3345f4b38487cc9e45d55ced3dd7139\" -I common -I binlog -I net -I kfs -I drinkless -I skat -I vv -I objs -I . -c -MP -MD -MF dep/common/kdb-data-common.d -MQ objs/common/kdb-data-common.o -o objs/common/kdb-data-common.o common/kdb-data-common.c
cc -Wall -O3 -m64 -march=core2 -mfpmath=sse -mssse3 -ggdb -fno-strict-aliasing -fno-strict-overflow -fwrapv -DCOMMIT=\"ce6dead5b3345f4b38487cc9e45d55ced3dd7139\" -I common -I binlog -I net -I kfs -I drinkless -I skat -I vv -I objs -I . -c -MP -MD -MF dep/common/server-functions.d -MQ objs/common/server-functions.o -o objs/common/server-functions.o common/server-functions.c
cc -Wall -O3 -m64 -march=core2 -mfpmath=sse -mssse3 -ggdb -fno-strict-aliasing -fno-strict-overflow -fwrapv -DCOMMIT=\"ce6dead5b3345f4b38487cc9e45d55ced3dd7139\" -I common -I binlog -I net -I kfs -I drinkless -I skat -I vv -I objs -I . -c -MP -MD -MF dep/common/crc32.d -MQ objs/common/crc32.o -o objs/common/crc32.o common/crc32.c
cc -o objs/bin/tlc-new objs/TL/tlc-new.o objs/TL/tl-parser-new.o objs/common/kdb-data-common.o objs/common/server-functions.o objs/common/crc32.o -m64 -ggdb -rdynamic -lm -lrt -lcrypto -lz -lpthread
/usr/bin/ld: cannot find -lcrypto
collect2: error: ld returned 1 exit status
make: *** [objs/bin/tlc-new] Error 1
[root@centos64 kphp-kdb]# make kphp
cc -o objs/bin/tlc-new objs/TL/tlc-new.o objs/TL/tl-parser-new.o objs/common/kdb-data-common.o objs/common/server-functions.o objs/common/crc32.o -m64 -ggdb -rdynamic -lm -lrt -lcrypto -lz -lpthread
/usr/bin/ld: cannot find -lcrypto
collect2: error: ld returned 1 exit status
make: *** [objs/bin/tlc-new] Error 1
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы