2014-10-01 103 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