PHP 4.0 Bug #7847 Updated: OCI8 support with Oracle 8.1.5 doesn't work

From: Date: Mon, 20 Nov 2000 18:29:47 +0000
Subject: PHP 4.0 Bug #7847 Updated: OCI8 support with Oracle 8.1.5 doesn't work
Groups: php.dev 
Request: Send a blank email to php-dev+get-38656@lists.php.net to get a copy of this message
ID: 7847 Updated by: jason Reported By: msquillace@sogei.it Status: Open Bug Type: OCI8 related Assigned To: Comments: If you are expecting a segfault, why dont you try running httpd -X, make the request and see if it fails. Does AIX have a signal tracing tool similar to truss or strace? If you are getting a seg, send us a bactrace. -Jason Previous Comments: --------------------------------------------------------------------------- [2000-11-20 13:22:34] msquillace@sogei.it I rebuilt the entire environment while writing the bug database entry, and sqlplus works in this scenario. The details of several checks follow: 1) I log in as root. 2) set | grep ORACLE returns: ORACLE_HOME=/ora815 ORACLE_SID=8T ORACLE_TERM=hft ORACLE_UID=oracle LD_PRELOAD, LD_LIBRARY_PATH, NLS_LANG and ORA_NLS33 should not be needed in AIX 4.2. 3) sqlplus system/manager@ZZZ gives ORA-12154 sqlplus system/manager@f40_7 works perfectly. 4) I now try starting apache with 3 different httpd.conf: a) user=nobody group=nobody b) user=nobody group=dba (nobody has been added to the dba group in /etc/group) c) user=apache group=dba (I created a new user apache - uid=70 - with base group=dba - gid=203 - in order to avoid having user/group ids > 60000) 5) repeating all my tests gives me the same results as in the bug report. 6) I log in as user apache. Oracle environment is the same as in 2). 7) sqlplus system/manager@ZZZ gives ORA-12154 sqlplus system/manager@f40_7 works perfectly. This morning I created a new test script, to verify PHP to Oracle connectivity using tnsping: <?php function prnit($value, $key) { echo "$value<br>"; } $t0 = microtime(); exec("tnsping f40_7", $rows); $t1 = microtime(); $ta = explode(" ", $t0); $tb = explode(" ", $t1); $t = bcsub(bcadd($tb[1], $tb[0], 6), bcadd($ta[1], $ta[0], 6), 6); echo "exec time: $t sec<br>"; array_walk($rows, 'prnit'); ?> This script works very well, producing the following output: exec time: 0.212467 sec TNS Ping Utility for IBM/AIX RISC System/6000: Version 8.1.5.0.0 - Production on 20-NOV-00 16:49:09 (c) Copyright 1997 Oracle Corporation. All rights reserved. Attempting to contact (address=(protocol=tcp)(port=1521)(host=26.2.161.96)) OK (20 msec) I believe this confirms the Oracle environment is sound, as viewed from the httpd process and, therefore from PHP. --------------------------------------------------------------------------- [2000-11-20 10:16:07] msquillace@sogei.it I rebuilt the entire environment while writing the bug database entry, and sqlplus works in this scenario. The details of several checks follow: 1) I log in as root. 2) set | grep ORACLE returns: ORACLE_HOME=/ora815 ORACLE_SID=8T ORACLE_TERM=hft ORACLE_UID=oracle LD_PRELOAD, LD_LIBRARY_PATH, NLS_LANG and ORA_NLS33 should not be needed in AIX 4.2. 3) sqlplus system/manager@ZZZ gives ORA-12154 sqlplus system/manager@f40_7 works perfectly. 4) I now try starting apache with 3 different httpd.conf: a) user=nobody group=nobody b) user=nobody group=dba (nobody has been added to the dba group in /etc/group) c) user=apache group=dba (I created a new user apache - uid=70 - with base group=dba - gid=203 - in order to avoid having user/group ids > 60000) 5) repeating all my tests gives me the same results as in the bug report. 6) I log in as user apache. Oracle environment is the same as in 2). 7) sqlplus system/manager@ZZZ gives ORA-12154 sqlplus system/manager@f40_7 works perfectly. This morning I created a new test script, to verify PHP to Oracle connectivity using tnsping: <?php function prnit($value, $key) { echo "$value<br>"; } $t0 = microtime(); exec("tnsping f40_7", $rows); $t1 = microtime(); $ta = explode(" ", $t0); $tb = explode(" ", $t1); $t = bcsub(bcadd($tb[1], $tb[0], 6), bcadd($ta[1], $ta[0], 6), 6); echo "exec time: $t sec<br>"; array_walk($rows, 'prnit'); ?> This script works very well, producing the following output: exec time: 0.212467 sec TNS Ping Utility for IBM/AIX RISC System/6000: Version 8.1.5.0.0 - Production on 20-NOV-00 16:49:09 (c) Copyright 1997 Oracle Corporation. All rights reserved. Attempting to contact (address=(protocol=tcp)(port=1521)(host=26.2.161.96)) OK (20 msec) I believe this confirms the Oracle environment is sound, as viewed from the httpd process and, therefore from PHP. --------------------------------------------------------------------------- [2000-11-18 22:45:44] sniper@php.net Have you set the Oracle specific environment vars mentioned on http://www.php.net/manual/ref.oci8.php before starting Apache? --Jani --------------------------------------------------------------------------- [2000-11-16 12:15:18] msquillace@sogei.it I can't get OCI8 support to work on AIX 4.2. During the last few weeks I have been able to configure an Apache 1.3.12 server (with and without SSL support) to load PHP 4 and several extensions (cURL, zlib, ClibPDF, openLDAP) on this RS600 model F40 but the single extension that I absolutely need (OCI8) doesn't want to work. I use gcc and want to create a DSO module for PHP, but have also tried static compilation and the standard AIX 4.2 cc compiler without success; further, I started out with PHP 4.0.3 then tried 4.0.3pl1 and now downloaded the latest CVS, to no avail. In the following I detail the steps needed to create a "stripped down" version of Apache+PHP4+OCI8, and describe the behaviour I observe. I am available for whatever further information you may need in order to solve the problem; please reply as soon as possible since I need to meet a deadline and, more importantly, am trying to introduce this technology in a company where Open Source software is still viewed skeptically. Prerequisite packages installation and setup ------------------------------- 01) login as root 02) gcc-2.95.2 (AIX 4.2 binaries from aixpdslib.seas.ucla.edu) 03) (GNU) make-3.79 (AIX 4.2 binaries from aixpdslib.seas.ucla.edu) 04) perl.5.005_03 (AIX 4.2 binaries from aixpdslib.seas.ucla.edu) 05) bison-1.28 [./configure, make, make install] 06) flex-2.5.4 [./configure, make, make install] 07) setup environment in order to force usage of gcc and GNU make. 08) setup environment in order to connect to Oracle 8.1.5 and test connection via sqlplus. 09) untar in /opt/src Apache 1.3.12 and latest PHP 4 sources. Apache+mod_so installation -------------------- 01) delete const keyword from the char *dlerror definitions in /opt/src/apache_1.3.12/src/os/unix/os.h and /opt/src/apache_1.3.12/src/os/unix/os-aix-dso.c to avoid eventual make failure in the PHP4 step(s) 02) cd /opt/src/apache_1.3.12 03)./configure --enable-module=so --prefix=/opt/www 04) make 05) make install 06) uncomment ServerName directive in /opt/www/conf/httpd.conf Apache installation test (OK) -------------------- 01) /opt/www/bin/apachectl start 02) connect to the server via netscape 03) /opt/www/bin/apachectl stop Build PHP4 as a dynamic module via APXS with OCI8 support (Oracle 8.1.5) and a minumum of directly supported modules. Latest build (php4-200011151045) from snaps.php.net. Oracle 8.1.5 is the last version supported on AIX 4.2; I observed the exact same behaviour with Oracle 8.0.5. ------------------------------------------ 01) in /ora815/lib, execute the command ln -s libclntsh.a libclntsh.sx.8.0 to force correct detection of Oracle 8.1 in step 03. 02) cd /opt/src/php4-200011151045 mkdir /opt/www/php mkdir /opt/www/php/bin tar xvf ../number.tar 03) ./configure --prefix=/opt/www --mandir=/usr/man --with-config-file-path=/opt/www/conf --enable-safe-mode --with-exec-dir=/opt/www/php/bin --enable-track-vars --enable-magic-quotes --with-apxs=/opt/www/bin/apxs --with-mysql=no --enable-sigchild --enable-trans-sid --enable-versioning --enable-bcmath --enable-wddx --enable-xml --enable-calendar --without-gd --with-oci8=/ora815 04) make During this step I only observe the following warning: fsock.c: In function `connect_nonb': fsock.c:182: warning: passing arg 5 of `getsockopt' from incompatible pointer type 05) make install 06) cp php.ini-optimized /opt/www/conf/php.ini uncomment the following in /opt/www/conf/httpd.conf: #AddType application/x-httpd-php .php #AddType application/x-httpd-php-source .phps Test Apache+PHP+OCI8 ------------------ 01) /opt/www/bin/apachectl start 02) connect to the server via netscape ... OK 03) invoke the info.php script on the server via netscape ... OK info.php contains: <?php phpinfo(); ?> 04) invoke ociver1.php on the server via netscape ... NOK ociver1.php contains: <?php OCIInternalDebug(1); echo "Attempting OCILogon<br>"; error_log("Before OCILogon", 0); $conn = OCILogon("system","manager", "ZZZ"); error_log("After OCILogon", 0); echo "Connection handle: >".$conn."<<br>"; echo "Server Version: " . OCIServerVersion($conn); OCILogOff($conn); ?> This I expect to fail, since ZZZ is not a defined alias in Oracle's tnsnames.ora; accordingly on the browser I get: Attempting OCILogon Warning: _oci_open_server: ORA-12154: TNS:could not resolve service name in /opt/www/htdocs/ociver1.php on line 5 OCIDebug: _oci_open_server: FAILURE -> CLEANUP called OCIDebug: START _oci_close_server: detaching conn=0 dbname=ZZZ OCIDebug: _oci_close_server: closing DEAD server OCIDebug: oci_do_connect: FAILURE -> CLEANUP called OCIDebug: START _oci_conn_list_dtor: id=0 OCIDebug: END _oci_conn_list_dtor: id=0 Connection handle: >< Warning: Supplied argument is not a valid OCI8-Connection resource in /opt/www/htdocs/ociver1.php on line 8 Server Version: Furthermore, if I tail /opt/www/logs/error_log I can correctly see: [Thu Nov 16 17:18:09 2000] [error] Before OCILogon [Thu Nov 16 17:18:09 2000] [error] After OCILogon OCIDebug: START php_rshutdown_oci<br> OCIDebug: END php_rshutdown_oci<br> 05) invoke ociver2.php on the server via netscape ... NOK ociver2.php contains: <?php OCIInternalDebug(1); echo "Attempting OCILogon<br>"; error_log("Before OCILogon", 0); $conn = OCILogon("system","manager", "f40_7"); error_log("After OCILogon", 0); echo "Connection handle: >".$conn."<<br>"; echo "Server Version: " . OCIServerVersion($conn); OCILogOff($conn); ?> In this case I expect the script to _WORK_, since f40_7 _IS_ a defined alias in Oracle's tnsnames.ora; the browser instead sends a popup along the lines: The document contained no data. Try again later, or contact the server's administrator. The /opt/www/logs/error_log only registers: [Thu Nov 16 17:23:17 2000] [error] Before OCILogon and doing a ps aux | grep http I note that one of the original httpd daemons has disappeared WITHOUT tracing anything on the error_log (I'd expect a segfault). Since I am using net8 (SQL*Net), I have also tried to trace it and also activated tracing for the Oracle listener, but nothing gets written in either trace file. 06) /opt/www/bin/apachectl stop --------------------------------------------------------------------------- The remainder of the comments for this report are too long. To view the rest of the comments, please view the bug report online. Full Bug description available at: http://bugs.php.net/?id=7847

« previous php.dev (#38656) next »