MacOS上的Cassandra php驱动程序 - Class' Cassandra \ SimpleStatement'找不到

时间:2016-09-06 11:45:02

标签: php macos cassandra datastax datastax-php-driver

美好的一天,每个人。

通常我只是在* nix OS中使用此Official Docs

但现在我使用的是MacO,而且这些说明并没有正常运作。

如果pecl install cassandra我收到了此消息:

checking for supported DataStax C/C++ driver version... awk: can't open file /include/cassandra.h
 source line number 1
configure: error: not supported. Driver version 2.4.2+ required (found )
ERROR: `/private/tmp/pear/install/cassandra/configure --with-php-config=/usr/bin/php-config' failed

我的逻辑告诉我,在这种情况下,我需要自己制作DataStax C / C ++驱动程序。在文件夹php-driver\lib中,我删除了cpp-driver并使用this instruction制作了新的C / C ++驱动程序而没有错误。

所以在官方文件中它说:

  

注意install.sh脚本还将编译并静态链接到Apache Cassandra的DataStax C / C ++驱动程序的子模块版本的扩展。要使用系统上已有的cpp驱动程序版本,请运行phpize,。/ configure和make install。

但是当我尝试从./configure运行php-drive/ext时,我得到了几乎相同的错误:

checking for supported DataStax C/C++ driver version... awk: can't open file /include/cassandra.h
 source line number 1
configure: error: not supported. Driver version 2.4.2+ required (found )

即使我继续并且错误运行make install之后,它也会给我提供日志:

/bin/sh /Users/antvirgeo/php-driver/ext/libtool --mode=install cp ./cassandra.la /Users/antvirgeo/php-driver/ext/modules
cp ./.libs/cassandra.so /Users/antvirgeo/php-driver/ext/modules/cassandra.so
cp ./.libs/cassandra.lai /Users/antvirgeo/php-driver/ext/modules/cassandra.la
----------------------------------------------------------------------
Libraries have been installed in:
   /Users/antvirgeo/php-driver/ext/modules

If you ever happen to want to link against installed libraries
in a given directory, LIBDIR, you must either use libtool, and
specify the full pathname of the library, or use the `-LLIBDIR'
flag during linking and do at least one of the following:
   - add LIBDIR to the `DYLD_LIBRARY_PATH' environment variable
     during execution

See any operating system documentation about shared libraries for
more information, such as the ld(1) and ld.so(8) manual pages.
----------------------------------------------------------------------
Installing shared extensions:     /usr/lib/php/extensions/no-debug-non-zts-20121212/
cp: /usr/lib/php/extensions/no-debug-non-zts-20121212/#INST@24727#: Operation not permitted
make: *** [install-modules] Error 1
  

图书馆已安装在:
  /用户/ antvirgeo / PHP的驱动器/ EXT /模块

即使我在php.ini的路径中添加cassandra扩展名,我的项目仍然出现错误Class 'Cassandra\SimpleStatement' not found

php -d="extension=modules/cassandra.so" -m在PHP模块列表中显示cassandra

我做错了什么?

PS:我在Parallels中使用ubuntu操作系统,安装了DataStax php驱动程序,并且这个说明正常。

____ UPD: 在没有任何错误的@Fero的所有说明之后,命令/usr/local/bin/php -i | grep -A 10 "^cassandra$"向我显示:

cassandra

Cassandra support => enabled
C/C++ driver version => 2.4.2
Persistent Clusters => 0
Persistent Sessions => 0

Directive => Local Value => Master Value
cassandra.log => cassandra.log => cassandra.log
cassandra.log_level => ERROR => ERROR

仍然是同样的错误 - Class 'Cassandra\SimpleStatement' not found

______________最后更新:

Aaaa和它的工作!我在我的项目中编写了输出phpinfo();并意识到使用其他php版本的apache和php.ini,其中根本不是extension=cassandra.so

2 个答案:

答案 0 :(得分:4)

您需要安装DataStax C / C ++驱动程序,它是PHP驱动程序的依赖项。在成功构建驱动程序之后使用these instructions后跟make install将确保在构建PHP驱动程序时可以使用此依赖项。使用PHP驱动程序build instructions,您需要确保在运行pecl install cassandra之前GMP和PHP开发库也可用。

编辑:

由于您使用的是El Capitan,因此遇到System Integrity Protection的问题,您需要disable才能将文件复制到/usr。更好的建议选项是使用Homebrew安装PHP;但是,如果愿意,您也可以使用MacPorts

以下是在已安装Xcode和Homebrew的干净OSX El Capitan映像上重现PHP驱动程序安装的步骤:

brew install autoconf cmake libuv gmp openssl pcre homebrew/php/php55
brew link homebrew/php/php55
mkdir code
pushd code
git clone https://github.com/datastax/php-driver.git
pushd php-driver
git submodule update --init --recursive
pushd lib/cpp-driver
mkdir build
pushd build
cmake -DOPENSSL_ROOT_DIR=/usr/local/opt/openssl ..
make -j$(sysctl -n hw.ncpu)
sudo make install
popd
popd
mkdir build
pushd ext
/usr/local/bin/phpize
popd
pushd build
../ext/configure --with-php-config=/usr/local/bin/php-config
make -j$(sysctl -n hw.ncpu)
sudo make install
popd
popd
sudo sh -c 'echo "extension=cassandra.so" >> /usr/local/etc/php/5.5/php.ini'

然后,您可以使用以下命令验证安装:

/usr/local/bin/php -i | grep -A 10 "^cassandra$"

注意:上面使用的是PHP v5.5,因为这是El Capitan附带的默认版本;也可以使用PHP v5.6和v7.0。

答案 1 :(得分:-1)

如果需要在MacOS上安装Cassandra PHP扩展,则只需通过PECL进行安装即可,而无需打开或关闭系统完整性保护。我已经写了一篇博客文章,其中包含简单的分步说明。该链接还包括一个指向从Homebrew安装PHP的链接,因为他们于今年4月取消了Homebrew / php的点击。

它还会传递DataStax网站上给出的错误指示。简而言之...

安装依赖项(我一次运行一个命令以轻松查看任何消息):

$ brew install autoconf
$ brew install cmake
$ brew install automake
$ brew install libtool
$ brew install gmp
$ brew install libuv
$ brew install openssl

获取并构建C ++驱动程序,然后在cpp-driver文件夹内创建一个构建目录:

$ git clone https://github.com/datastax/cpp-driver.git --depth=1
$ mkdir cpp-driver/build
$ cd cpp-driver/build

使用合格的OpenSSL调用制作并构建驱动程序:

$ cmake -DOPENSSL_ROOT_DIR=/usr/local/opt/openssl/ -DOPENSSL_LIBRARIES=/usr/local/opt/openssl/lib ..
$ make
$ make install

现在您可以使用PECL安装Cassandra PHP扩展库了

$ pecl install cassandra

检查以确保已将Cassandra扩展名添加到您的PHP.ini文件中。如果没有添加。

[cassandra]
extension="cassandra.so"

重新启动Apache,然后就可以在PHP中使用Cassandra运行了。

如果您想详细了解上述说明中发生的事情,请在此处参阅我的博客文章:

https://medium.com/@crmcmullen/how-to-install-the-cassandra-php-driver-on-macos-10-13-high-sierra-and-10-14-mojave-c18263831ccb