Visualizzazione dei risultati da 1 a 4 su 4
  1. #1
    Utente di HTML.it
    Registrato dal
    Feb 2005
    Messaggi
    1,150

    [PHP 4] Disconnettere una connessione Oracle Persistent

    Ciao a tutti,
    premetto che il problema si verifica su un vecchio applicativo, sviluppato in Php 4, che ora sto migrando a Zend, ma che purtroppo attualmente e' in produzione.

    Ho riscontrato un problema al momento di disconnettersi da Oracle, nel solo caso in cui la connessione sia stata aperta in maniera Persistent, ovvero con la funzione OCI_PLogin.
    Infatti non rilascia le risorse ma la pone come "inactive".

    Mentre se apro la connessione con OCI_Login, la funzione che esegue il disconnect, non da questo problema.

    Questa e' la funzione che fa la disconnessione.

    Codice PHP:
    function desconectar(){
          global 
    $sesion_idioma;
          global 
    $conf;

        if (
    $this->conexion){
           if (
    $conf['base_datos'] == "MySql"){
                       
    mysql_close ($this->conexion);
           }elseif(
    $conf['base_datos']=="Oracle" or $conf['base_datos']=="Oracle_base"){
               
    OCILogOff($this->conexion);
           }elseif(
    $conf['base_datos'] == "SQLServer"){
                       
    mssql_close ($this->conexion);
           }
        }

    Qualsiasi consiglio e' ben accetto.

    Ciao

    Edit
    Qui indicano che e' un bug, non risolto

    http://bugs.php.net/bug.php?id=17245

    Puo' essere che non ci sia soluzione

  2. #2
    non puoi chiudere una connessione persistente perché, per definizione, è persistente tra le richieste e di conseguenza php non termina la connessione ma la mette di nuovo a disposizioni di altre richieste ne necessitano di connettersi

    ociplogon è un alias (nelle nuove versioni di php) a oci_pconnect
    http://it.php.net/manual/en/function.oci-pconnect.php

    Qui maggiori informazioni sul funzionamento delle connessioni persistenti
    http://it.php.net/manual/en/features...onnections.php

    Se vuoi evitare di usare in toto connessioni persistenti dai un occhio a questa funzione
    http://it.php.net/manual/en/function...ew-connect.php

  3. #3
    Utente di HTML.it
    Registrato dal
    Feb 2005
    Messaggi
    1,150
    Originariamente inviato da daniele_dll
    non puoi chiudere una connessione persistente perché, per definizione, è persistente tra le richieste e di conseguenza php non termina la connessione ma la mette di nuovo a disposizioni di altre richieste ne necessitano di connettersi

    ociplogon è un alias (nelle nuove versioni di php) a oci_pconnect
    http://it.php.net/manual/en/function.oci-pconnect.php

    Qui maggiori informazioni sul funzionamento delle connessioni persistenti
    http://it.php.net/manual/en/features...onnections.php

    Se vuoi evitare di usare in toto connessioni persistenti dai un occhio a questa funzione
    http://it.php.net/manual/en/function...ew-connect.php
    Intanto grazie per la veloce risposta e per i link.

    Il problema e' che io non so per quale motivo abbiamo utilizzato connessioni persistenti (e non so nemmeno a chi chiederlo) e quindi non so le conseguenze di una modifica inserendo la oci_new_connect che mi hai indicato con l'ultimo link.

    Sai quale sono le differenze tra quest'ultima e la oci_pconnect?

  4. #4
    in realtà ti basterebbe usare semplicemente la oci_connect invece della ociplogon

    non ci sono differenze, almeno cosi come risulta dalla documentazione ... ociplogon == oci_pconnect ... oci_pconnect si differenzia da oci_connect solo per le connessioni persistenti

    però, oci_connect, se la richiami 2 volte all'interno dello stesso codice con gli stessi parametri ti restituisce la connessione precedentemente avviata piuttosto che una nuova ed è che viene fuori oci_new_connect

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.