HHVM 3.7.0 Postgresql PDO

HHVM 3.7.0 Postgresql PDO

我知道 HHVM 不支持 Postgres,但是有 hiphop 的扩展允许使用 postgres PDO。

我已经成功编译 hhvm 并使用以下命令安装 hhvm

[root@localhost ~]# git clone https://github.com/facebook/hhvm -b master  hhvm  --recursive
[root@localhost ~]# cd hhvm
[root@localhost hhvm]# ./configure
[root@localhost hhvm]# make -j5
[root@localhost hhvm]# make install

效果很好,我已经开发出连接到 postgres 数据库的需要。

尝试 1

以下页面建议在配置时添加--with-pdo-pgsql=/path/to/pg_config参数。 http://docs.hhvm.com/manual/en/ref.pdo-pgsql.php

[root@localhost hhvm]# find / -name pg_config
/usr/bin/pg_config
[root@localhost hhvm]# ./configure --with-pdo-pgsql=/usr/bin/pg_config
[root@localhost hhvm]# make -j5
[root@localhost hhvm]# make install

并没有看到任何改善

[root@localhost hhvm]# hhvm ~/test.php
Fatal error: Call to undefined function pg_connect() in /root/test.php on line 2

尝试 2

hhvm wiki 扩展页面(https://github.com/facebook/hhvm/wiki/Extensions) links to https://github.com/PocketRent/hhvm-pgsql

我按照步骤制作了 hhvm-pgsql 扩展。

[root@localhost ~]# git clone https://github.com/PocketRent/hhvm-pgsql.git
[root@localhost ~]# cd hhvm-pgsql
[root@localhost hhvm-pgsql]# hphpize
[root@localhost hhvm-pgsql]# cmake .
[root@localhost hhvm-pgsql]# make
[ 25%] Building CXX object CMakeFiles/pgsql.dir/pgsql.cpp.o
In file included from /root/hhvm-pgsql/pgsql.cpp:2:0:
/root/hhvm-pgsql/pgsql.h:6:45: fatal error: hphp/runtime/base/base-includes.h: No such file or directory
 #include "hphp/runtime/base/base-includes.h"
                                             ^
compilation terminated.
make[2]: *** [CMakeFiles/pgsql.dir/pgsql.cpp.o] Error 1
make[1]: *** [CMakeFiles/pgsql.dir/all] Error 2
make: *** [all] Error 2

显然我缺少 base-includes.h。我不确定从哪里得到它。我假设它在 repo 提到的 hhvm-dev 包中,但是我应该从哪里获得必要的文件,就像我刚刚编译 hhvm 一样?

[root@localhost hhvm]# find / -name base-includes.h

一无所获。

额外信息

[root@localhost hhvm]# cat /etc/redhat-release
CentOS Linux release 7.1.1503 (Core)
[root@localhost hhvm]# hhvm --version
HipHop VM 3.7.0-dev (rel)
Compiler: heads/master-0-g6bec157aad74985e64d3d9fe928ad5cc490f5876
Repo schema: e36ae4255d99eb78d62256c73ee53fadb05d65e0

我也按照 https://github.com/facebook/hhvm/wiki/Prebuilt-Packages-on-Centos-7.x 上的步骤通过 yum 安装了它。我发现这行得通,但是 hhvm 版本有一些错误,这些错误已被修复。 当我写这篇文章时,我尝试从 yum install hhvm-ext-pgsql 中提取 pgsql.so 安装,这导致了以下错误。 (可以理解)。

[root@localhost ~]# hhvm test.php
Uncaught exception: Could not load extension /usr/local/lib64/hhvm/extensions/pgsql.so: getModuleBuildInfo() symbol not defined. (/usr/local/lib64/hhvm/extensions/pgsql.so: undefined symbol: getModuleBuildInfo)
Core dumped: Segmentation fault
Stack trace in /tmp/stacktrace.4181.log
Segmentation fault

无论如何,我的问题是...

尝试 1 wrong/missing 我在做什么?

我怎样才能成功完成尝试 2?

尝试 1 只是行不通,文档完全错误,I filed an issue about it

尝试 2,PocketRent 扩展,是正确的方向,尽管该扩展最近可能没有更新。您应该报告编译失败 on their issue tracker(或者在跟踪器中搜索现有问题,尽管 none 突然出现在我面前)。构建它的人非常好,尽管他们有时会在 HHVM 更改时忘记更新扩展,直到有人提醒他们:)

我不会在这里使用预构建的扩展;扩展需要完全针对它们 运行 所针对的 HHVM 版本构建。我怀疑您看到的崩溃是由于将使用一个版本的 HHVM 构建的扩展与 运行 在另一个版本上混合使用造成的。 (这应该会产生一个有用的错误,但我们最近遇到了一个错误,我们无法检测到它并且会崩溃!)