Server IP : 104.21.38.3 / Your IP : 162.158.107.66 Web Server : Apache System : Linux krdc-ubuntu-s-2vcpu-4gb-amd-blr1-01.localdomain 5.15.0-142-generic #152-Ubuntu SMP Mon May 19 10:54:31 UTC 2025 x86_64 User : www ( 1000) PHP Version : 7.4.33 Disable Function : passthru,exec,system,putenv,chroot,chgrp,chown,shell_exec,popen,proc_open,pcntl_exec,ini_alter,ini_restore,dl,openlog,syslog,readlink,symlink,popepassthru,pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wifcontinued,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority,imap_open,apache_setenv MySQL : OFF | cURL : ON | WGET : ON | Perl : ON | Python : OFF | Sudo : ON | Pkexec : ON Directory : /www/server/php/82/src/ext/oci8/ |
Upload File : |
/* +----------------------------------------------------------------------+ | Copyright (c) The PHP Group | +----------------------------------------------------------------------+ | This source file is subject to version 3.01 of the PHP license, | | that is bundled with this package in the file LICENSE, and is | | available through the world-wide-web at the following url: | | https://www.php.net/license/3_01.txt | | If you did not receive a copy of the PHP license and are unable to | | obtain it through the world-wide-web, please send a note to | | [email protected] so we can mail you a copy immediately. | +----------------------------------------------------------------------+ | Authors: Stig Sæther Bakken <[email protected]> | | Thies C. Arntzen <[email protected]> | | | | Collection support by Andy Sautins <[email protected]> | | Temporary LOB support by David Benson <[email protected]> | | ZTS per process OCIPLogon by Harald Radi <[email protected]> | | | | Redesigned by: Antony Dovgal <[email protected]> | | Andi Gutmans <[email protected]> | | Wez Furlong <[email protected]> | +----------------------------------------------------------------------+ */ #ifdef HAVE_CONFIG_H #include "config.h" #endif #include "php.h" #include "ext/standard/info.h" #include "php_ini.h" #ifdef HAVE_OCI8 #include "php_oci8.h" #include "php_oci8_int.h" /* {{{ callback_fn() OCI TAF callback function, calling userspace function */ sb4 callback_fn(void *svchp, void *envhp, void *fo_ctx, ub4 fo_type, ub4 fo_event) { /* Create zval */ zval retval, params[3]; php_oci_connection *connection = (php_oci_connection*)fo_ctx; /* Default return value */ sb4 returnValue = 0; /* Check if userspace callback function was unregistered */ if (Z_ISUNDEF(connection->taf_callback) || Z_ISNULL(connection->taf_callback)) { return 0; } /* Initialize zval */ ZVAL_RES(¶ms[0], connection->id); ZVAL_LONG(¶ms[1], fo_event); ZVAL_LONG(¶ms[2], fo_type); /* Call user function (if possible) */ if (call_user_function(NULL, NULL, &connection->taf_callback, &retval, 3, params) == FAILURE) { php_error_docref(NULL, E_WARNING, "Unable to call Oracle TAF callback function"); } /* Set return value */ if (Z_TYPE(retval) == IS_LONG) { returnValue = (sb4) Z_LVAL(retval); } /* Setting params[0] to null so resource isn't destroyed on zval_ptr_dtor */ ZVAL_NULL(¶ms[0]); /* Cleanup */ zval_ptr_dtor(&retval); zval_ptr_dtor(¶ms[0]); zval_ptr_dtor(¶ms[1]); zval_ptr_dtor(¶ms[2]); return returnValue; } /* }}} */ /* {{{ php_oci_unregister_taf_callback() Unregister the userspace callback function for Oracle TAF, while keeping the OCI callback alive */ int php_oci_unregister_taf_callback(php_oci_connection *connection) { return php_oci_register_taf_callback(connection, NULL); } /* }}} */ /* {{{ php_oci_register_taf_callback() Register a callback function for Oracle TAF */ int php_oci_register_taf_callback(php_oci_connection *connection, zval *callback) { sword errstatus; int registered = 0; /* temporary failover callback structure */ OCIFocbkStruct failover; if (!callback) { /* Unregister callback */ if (Z_ISUNDEF(connection->taf_callback) || Z_ISNULL(connection->taf_callback)) { return 0; // Nothing to unregister } registered = 1; zval_ptr_dtor(&connection->taf_callback); ZVAL_NULL(&connection->taf_callback); } else { if (!Z_ISUNDEF(connection->taf_callback)) { registered = 1; if (!Z_ISNULL(connection->taf_callback)) { zval_ptr_dtor(&connection->taf_callback); ZVAL_NULL(&connection->taf_callback); } } /* Set userspace callback function */ ZVAL_COPY(&connection->taf_callback, callback); } /* OCI callback function already registered */ if (registered) { return 0; } /* set context */ failover.fo_ctx = connection; /* set callback function */ failover.callback_function = &callback_fn; /* do the registration */ PHP_OCI_CALL_RETURN(errstatus, OCIAttrSet, (connection->server, (ub4) OCI_HTYPE_SERVER, (void *) &failover, (ub4) 0, (ub4) OCI_ATTR_FOCBK, connection->err)); if (errstatus != OCI_SUCCESS) { zval_ptr_dtor(&connection->taf_callback); ZVAL_UNDEF(&connection->taf_callback); connection->errcode = php_oci_error(connection->err, errstatus); return 1; } /* successful conclusion */ return 0; } /* }}} */ #endif /* HAVE_OCI8 */