2014-10-01 104 views
1

我试图将我的所有服务器升级到目前的php 5.6,除了安装oci8之外,这已经很好了。它与php55一起工作得很好,我甚至用一个全新的vagrantbox来测试它,并确保它是一个完全干净的安装。Pecl oci8在升级到PHP5.6后失败安装

当我尝试运行安装时,出现以下错误。

# pecl install oci8 
downloading oci8-2.0.8.tgz ... 
Starting to download oci8-2.0.8.tgz (190,854 bytes) 
.........................................done: 190,854 bytes 
11 source files, building 
running: phpize 
Configuring for: 
PHP Api Version:   20131106 
Zend Module Api No:  20131226 
Zend Extension Api No: 220131226 
Please provide the path to the ORACLE_HOME directory. Use 'instantclient,/path/to/instant/client/lib' if you're compiling with Oracle Instant Client [autodetect] : 
building in /var/tmp/pear-build-rootMIYqiX/oci8-2.0.8 
running: /var/tmp/oci8/configure --with-oci8 
checking for grep that handles long lines and -e... /bin/grep 
checking for egrep... /bin/grep -E 
checking for a sed that does not truncate output... /bin/sed 
checking for cc... cc 
checking for C compiler default output file name... a.out 
checking whether the C compiler works... yes 
checking whether we are cross compiling... no 
checking for suffix of executables... 
checking for suffix of object files... o 
checking whether we are using the GNU C compiler... yes 
checking whether cc accepts -g... yes 
checking for cc option to accept ISO C89... none needed 
checking how to run the C preprocessor... cc -E 
checking for icc... no 
checking for suncc... no 
checking whether cc understands -c and -o together... yes 
checking for system library directory... lib 
checking if compiler supports -R... no 
checking if compiler supports -Wl,-rpath,... yes 
checking build system type... x86_64-unknown-linux-gnu 
checking host system type... x86_64-unknown-linux-gnu 
checking target system type... x86_64-unknown-linux-gnu 
checking for PHP prefix... /usr 
checking for PHP includes... -I/usr/include/php -I/usr/include/php/main -I/usr/include/php/TSRM -I/usr/include/php/Zend -I/usr/include/php/ext -I/usr/include/php/ext/date/lib 
checking for PHP extension directory... /usr/lib64/php/modules 
checking for PHP installed headers prefix... /usr/include/php 
checking if debug is enabled... no 
checking if zts is enabled... no 
checking for re2c... no 
configure: WARNING: You will need re2c 0.13.4 or later if you want to regenerate PHP parsers. 
checking for gawk... gawk 
checking for Oracle Database OCI8 support... yes, shared 
checking PHP version... 5.6.0, ok 
checking OCI8 DTrace support... no 
checking size of long int... 8 
checking checking if we're on a 64-bit platform... yes 
configure: WARNING: OCI8 extension: ORACLE_HOME is not set, looking for default Oracle Instant Client instead 
checking Oracle Instant Client directory... /usr/lib/oracle/11.2/client64/lib 
checking Oracle Instant Client SDK header directory... /usr/include/oracle/11.2/client64 
checking Oracle Instant Client library version compatibility... 11.1 
checking for a sed that does not truncate output... (cached) /bin/sed 
checking for fgrep... /bin/grep -F 
checking for ld used by cc... /usr/bin/ld 
checking if the linker (/usr/bin/ld) is GNU ld... yes 
checking for BSD- or MS-compatible name lister (nm)... /usr/bin/nm -B 
checking the name lister (/usr/bin/nm -B) interface... BSD nm 
checking whether ln -s works... yes 
checking the maximum length of command line arguments... 1966080 
checking whether the shell understands some XSI constructs... yes 
checking whether the shell understands "+="... yes 
checking for /usr/bin/ld option to reload object files... -r 
checking for objdump... objdump 
checking how to recognize dependent libraries... pass_all 
checking for ar... ar 
checking for strip... strip 
checking for ranlib... ranlib 
checking command to parse /usr/bin/nm -B output from cc object... ok 
checking for dlfcn.h... yes 
checking for objdir... .libs 
checking if cc supports -fno-rtti -fno-exceptions... no 
checking for cc option to produce PIC... -fPIC -DPIC 
checking if cc PIC flag -fPIC -DPIC works... yes 
checking if cc static flag -static works... no 
checking if cc supports -c -o file.o... yes 
checking if cc supports -c -o file.o... (cached) yes 
checking whether the cc linker (/usr/bin/ld -m elf_x86_64) supports shared libraries... yes 
checking whether -lc should be explicitly linked in... no 
checking dynamic linker characteristics... GNU/Linux ld.so 
checking how to hardcode library paths into programs... immediate 
checking whether stripping libraries is possible... yes 
checking if libtool supports shared libraries... yes 
checking whether to build shared libraries... yes 
checking whether to build static libraries... no 
configure: creating ./config.status 
config.status: creating config.h 
config.status: executing libtool commands 
running: make 
/bin/sh /var/tmp/pear-build-rootMIYqiX/oci8-2.0.8/libtool --mode=compile cc -I. -I/var/tmp/oci8 -DPHP_ATOM_INC -I/var/tmp/pear-build-rootMIYqiX/oci8-2.0.8/include -I/var/tmp/pear-build-rootMIYqiX/oci8-2.0.8/main -I/var/tmp/oci8 -I/usr/include/php -I/usr/include/php/main -I/usr/include/php/TSRM -I/usr/include/php/Zend -I/usr/include/php/ext -I/usr/include/php/ext/date/lib -I/usr/include/oracle/11.2/client64 -DHAVE_CONFIG_H -g -O2 -c /var/tmp/oci8/oci8.c -o oci8.lo 
libtool: compile: cc -I. -I/var/tmp/oci8 -DPHP_ATOM_INC -I/var/tmp/pear-build-rootMIYqiX/oci8-2.0.8/include -I/var/tmp/pear-build-rootMIYqiX/oci8-2.0.8/main -I/var/tmp/oci8 -I/usr/include/php -I/usr/include/php/main -I/usr/include/php/TSRM -I/usr/include/php/Zend -I/usr/include/php/ext -I/usr/include/php/ext/date/lib -I/usr/include/oracle/11.2/client64 -DHAVE_CONFIG_H -g -O2 -c /var/tmp/oci8/oci8.c -fPIC -DPIC -o .libs/oci8.o 
In file included from /var/tmp/oci8/oci8.c:46: 
/var/tmp/oci8/php_oci8_int.h:48:29: error: oci8_dtrace_gen.h: No such file or directory 
make: *** [oci8.lo] Error 1 
ERROR: `make' failed 

所以看起来是DTRACE的问题。我环顾四周,发现这是php56并启用它,你需要运行做出了改变......

export PHP_DTRACE=yes 

运行pecl install oci8后再次我现在得到这个。

# pecl install oci8 
downloading oci8-2.0.8.tgz ... 
Starting to download oci8-2.0.8.tgz (190,854 bytes) 
.........................................done: 190,854 bytes 
11 source files, building 
running: phpize 
Configuring for: 
PHP Api Version:   20131106 
Zend Module Api No:  20131226 
Zend Extension Api No: 220131226 
Please provide the path to the ORACLE_HOME directory. Use 'instantclient,/path/to/instant/client/lib' if you're compiling with Oracle Instant Client [autodetect] : 
building in /var/tmp/pear-build-rootIwscfS/oci8-2.0.8 
running: /var/tmp/oci8/configure --with-oci8 
checking for grep that handles long lines and -e... /bin/grep 
checking for egrep... /bin/grep -E 
checking for a sed that does not truncate output... /bin/sed 
checking for cc... cc 
checking for C compiler default output file name... a.out 
checking whether the C compiler works... yes 
checking whether we are cross compiling... no 
checking for suffix of executables... 
checking for suffix of object files... o 
checking whether we are using the GNU C compiler... yes 
checking whether cc accepts -g... yes 
checking for cc option to accept ISO C89... none needed 
checking how to run the C preprocessor... cc -E 
checking for icc... no 
checking for suncc... no 
checking whether cc understands -c and -o together... yes 
checking for system library directory... lib 
checking if compiler supports -R... no 
checking if compiler supports -Wl,-rpath,... yes 
checking build system type... x86_64-unknown-linux-gnu 
checking host system type... x86_64-unknown-linux-gnu 
checking target system type... x86_64-unknown-linux-gnu 
checking for PHP prefix... /usr 
checking for PHP includes... -I/usr/include/php -I/usr/include/php/main -I/usr/include/php/TSRM -I/usr/include/php/Zend -I/usr/include/php/ext -I/usr/include/php/ext/date/lib 
checking for PHP extension directory... /usr/lib64/php/modules 
checking for PHP installed headers prefix... /usr/include/php 
checking if debug is enabled... no 
checking if zts is enabled... no 
checking for re2c... no 
configure: WARNING: You will need re2c 0.13.4 or later if you want to regenerate PHP parsers. 
checking for gawk... gawk 
checking for Oracle Database OCI8 support... yes, shared 
checking PHP version... 5.6.0, ok 
checking OCI8 DTrace support... yes 
checking for ANSI C header files... yes 
checking for sys/types.h... yes 
checking for sys/stat.h... yes 
checking for stdlib.h... yes 
checking for string.h... yes 
checking for memory.h... yes 
checking for strings.h... yes 
checking for inttypes.h... yes 
checking for stdint.h... yes 
checking for unistd.h... yes 
checking sys/sdt.h usability... no 
checking sys/sdt.h presence... no 
checking for sys/sdt.h... no 
configure: error: Cannot find sys/sdt.h which is required for DTrace support 
ERROR: `/var/tmp/oci8/configure --with-oci8' failed 

这已经在Oracle 11.2即时客户端和12.1即时客户端上尝试过。两者的结果完全相同。

编辑: 这是我在试图解决这个问题时发现的所有信息。 http://php.net/manual/en/migration56.extensions.php - 变化PHP56 http://php.net/manual/en/oci8.dtrace.php - 启用DTrace http://www.lornajane.net/posts/2011/downgrading-a-pecl-module - 回滚的版本为PECL http://pecl.php.net/package/oci8 -

+0

你编译PHP一样好,甚至你用一个回购协议是什么?你也许可以'安装php-pecl-oci8'并避免编译PECL的麻烦 – Machavity 2014-10-01 16:16:38

+0

@Machavity我从remi仓库安装了php56,所以它不应该是个问题。我相信我尝试了yum安装php-pecl-oci8,但遇到了另一个问题。我会带一个新的流浪盒,并添加任何细节安装它到这个职位。 – mschuett 2014-10-01 16:25:48

+0

@Machavity我曾用php-pecl-oci8尝试过,结果相同。看起来运行它实际上并没有为你安装oracle即时客户端。 – mschuett 2014-10-06 18:12:26

回答

4

我已经找到了解决这个虽然我不喜欢它的OCI8版本的列表,希望有人有更好的一个。回滚到最后的稳定版本似乎一切都正常工作运行..

pecl install -f oci8-1.4.10 
+0

本来喜欢选择不同的答案,但看起来我们对这个问题没有多大兴趣。然而,上述将让你离开地面和运行。 – mschuett 2014-10-05 20:25:15

8

我在CENTOS 6.6和php 5.6.8在这两种方式解决这个问题:

  1. 如果您需要的DTrace:

    • 百胜安装的systemtap-SDT-devel的
    • 出口PHP_DTRACE =是
    • PE CL安装OCI8
  2. ,如果你不喜欢的DTrace:

    • 下载OCI8焦油球和提取文件
    • 修改文件 'php_oci8_int.h',修改第48行
      #include "oci8_dtrace_gen.h"#undef HAVE_OCI8_DTRACE
    • phpize
    • 的./configure --with-OCI8 =
    • 使
    • 使安装
+0

哇,你救了我的一天! – Zolbayar 2017-05-24 03:03:35

+1

太棒了!这与CentOS 7和PHP 7.0一起工作 – 2017-09-27 07:53:10