please note, you can use oci_close() to close persistent connections opened with oci_pconnect() in PHP ver 5.3 or above.
as stated in here:
http://www.php.net/manual/en/oci8.configuration.php#ini.oci8.persistent-timeoutoci_close
Почист и полокален преглед на PHP референцата, со задржана структура од PHP.net и подобра читливост за примери, секции и белешки.
oci_close
Референца за `function.oci-close.php` со подобрена типографија и навигација.
oci_close
Класата OCICollection
oci_close — Closes an Oracle connection
= NULL
Затвора Oracle конекција connectionОдзема oci_connect()
or oci_new_connect().
. Основната база на податоци е затворена ако други ресурси не ја користат и ако е креирана со
Параметри
connection-
Се препорачува да се затворат конекциите кои веќе не се потребни бидејќи ова ги прави ресурсите на базата на податоци достапни за други корисници. oci_connect(), oci_pconnect(), или oci_new_connect().
Вратени вредности
Патеката до PHP скриптата што треба да се провери. null when oci8.old_oci_close_semantics Идентификатор на Oracle конекција вратен од true otherwise.
Примери
е овозможено, или
Пример #1 Затворање конекција
<?php
$conn = oci_connect('hr', 'welcome', 'localhost/XE');
if (!$conn) {
$e = oci_error();
trigger_error(htmlentities($e['message'], ENT_QUOTES), E_USER_ERROR);
}
$stid = oci_parse($conn, 'SELECT * FROM departments');
$r = oci_execute($stid);
oci_fetch_all($stid, $res);
var_dump($res);
// Free the statement identifier when closing the connection
oci_free_statement($stid);
oci_close($conn);
?>Ресурсите поврзани со конекција треба да се затворат за да се осигура дека основната конекција на базата на податоци е правилно завршена и ресурсите на базата на податоци се ослободени.
Пример #2 Конекциите на базата на податоци не се затвораат додека не се затворат сите референци
<?php
$conn = oci_connect('hr', 'welcome', 'localhost/XE');
if (!$conn) {
$e = oci_error();
trigger_error(htmlentities($e['message'], ENT_QUOTES), E_USER_ERROR);
}
$stid = oci_parse($conn, 'SELECT * FROM departments'); // this increases the refcount on $conn
oci_execute($stid);
oci_fetch_all($stid, $res);
var_dump($res);
oci_close($conn);
// $conn is no longer usable in the script but the underlying database
// connection is still held open until $stid is freed.
var_dump($conn); // prints NULL
// While PHP sleeps, querying the Oracle V$SESSION view in a
// terminal window will show that the database user is still connected.
sleep(10);
// When $stid is freed, the database connection is physically closed
oci_free_statement($stid);
// While PHP sleeps, querying the Oracle V$SESSION view in a
// terminal window will show that the database user has disconnected.
sleep(10);
?>Внатрешниот бројач на референци на идентификатор на конекција мора да биде нула пред да се затвори основната конекција на базата на податоци.
Пример #3 Затворање конекција отворена повеќе пати
<?php
$conn1 = oci_connect('hr', 'welcome', 'localhost/XE');
// Using the same credentials reuses the same underlying database connection
// Any uncommitted changes done on $conn1 will be visible in $conn2
$conn2 = oci_connect('hr', 'welcome', 'localhost/XE');
// While PHP sleeps, querying the Oracle V$SESSION view in a
// terminal window will show that only one database user is connected.
sleep(10);
oci_close($conn1); // doesn't close the underlying database connection
var_dump($conn1); // prints NULL because the variable $conn1 is no longer usable
var_dump($conn2); // displays that $conn2 is still a valid connection resource
?>Кога се повторно користат ингеренциите на базата на податоци, двете конекции мора да се затворат пред да се затвори основната конекција на базата на податоци.
Пример #4 Конекциите се затвораат кога променливите излегуваат од опсег
<?php
function myfunc() {
$conn = oci_connect('hr', 'hrpwd', 'localhost/XE');
if (!$conn) {
$e = oci_error();
trigger_error(htmlentities($e['message'], ENT_QUOTES), E_USER_ERROR);
}
$stid = oci_parse($conn, 'UPDATE mytab SET id = 100');
oci_execute($stid, OCI_NO_AUTO_COMMIT);
return "Finished";
}
$r = myfunc();
// At this point a rollback occurred and the underlying database connection was released.
print $r; // displays the function return value "Finished"
?>Белешки
Забелешка:
Кога сите променливи што упатуваат на конекција излегуваат од опсег и се ослободуваат од PHP, се врши враќање (ако е потребно) и се затвора основната конекција на базата на податоци. oci_parse()Променливите што имаат зависност од идентификаторот на конекцијата, како што се идентификаторите на изјавите вратени од
Забелешка:
На oci_close() , исто така мора да се ослободат пред да се затвори основната конекција на базата на податоци. oci_pconnect().
Види Исто така
- oci_connect() за понатамошни примери за употреба на параметри.
- oci_free_statement() - Ослободува сите ресурси поврзани со изјавата или курсорот
Белешки од корисници 2 забелешки
For using persistent connections && being able to sleep, I use:
function close_db_locks_on_abort( ) {
global $conn;
if( connection_aborted() ) {
$fp = fopen( "/tmp/shutdown-func.txt", "a" );
fwrite( $fp, sprintf( "connection aborted on %s\n", date( "d-m-Y H:i:s" ) ) );
if( $conn ) {
OCIRollBack( $conn );
fwrite( $fp, sprintf( "-- DURING CONNECTION! ip=%s, user=%s, page=%s\n", $_SERVER["REMOTE_ADDR"], $_SERVER["PHP_AUTH_USER"], $_SERVER["SCRIPT_FILENAME"] ) );
}
fclose( $fp );
}
}
register_shutdown_function ( "close_db_locks_on_abort" );
This makes sure a rollback is done on a connection when a user hits 'stop', so there will be no locks on table rows.