Visualizzazione dei risultati da 1 a 7 su 7

Discussione: mysqli close e free

  1. #1

    mysqli close e free

    Ciao a tutti, sto iniziando a lavoricchiare su un sito e mi è sorto un dubbio.

    Io solitamente creo un pagina master (dove apro la connessione al db) in cui includo le varie pagine/contenuti a seconda dei click su menu.

    Ho una mia classe che estende mysqli in cui infilo le mie varie funzioni...
    codice:
    class personale extends mysqli 
    {
        //Generazione stringa alfanumerica random
        public function randomAlfanumerico($n)
       { 
           .....
    }
    da cui poi apro la connesione nel master

    $mysqli = new personale(HOST, USERNAME, PASSWORD, DATABASE);

    Girando e leggendo in giro.. vedo spesso gente che chiude la connessione al DB o libera la memoria dai result.

    La mia domanda è... visto che al 90% dei casi... la chiusura della connessione la puoi fare alla fine della tua pagina PHP... perchè ovviamente all'interno della pagina hai diversi query da eseguire in diversi punti.

    E alla fine della pagina, se non sbaglio, la connessione viene chiusa in automatico...

    e se non sbaglio.. alla chiusura della connessione viene pure liberata la memoria dai result...

    serve usare mysqli close e free?

    .... forse free... lo si potrebbe usare ogni tanto se dentro la pagina si hanno molto query.. e che so.. i resultA e resultB... a metà pagina sono stati usati e nella seconda metà della pagina non vengono più usati...

    ad esempio ho trovato questo script, di cui non capisco l'utilità...

    codice:
    class myclass 
        { 
            private $hostname="localhost"; 
            private $username="root"; 
            private $password=""; 
            private $namedb="test"; 
            private $attiva="false"; 
             
            public function connetti() 
                { 
                    $attiva=false; 
                     
                    if (!$this==$attiva) 
                    { 
                        $connessione=mysqli_connect($this->hostname,$this->username,$this->password, $this->namedb); 
                        echo "Success!!!"; 
                    }else{ 
                        echo true; 
                    } 
                } 
            public function disconnetti() 
            { 
                if($this->attiva) 
                { 
                    if(mysqli_close()) 
                    { 
                     $this->attiva = false;  
                     return true;  
                    }else{ 
                        return false;  
                    } 
                } 
             } 
        } 
    
    
    $data = new myclass(); 
    $data->connetti(); 
    $data->disconnetti()
    in ultima... domanda aggiuntiva... usare per le variabili di connessione
    define("HOST", "localhost");

    è una brutta cosa? ho il sospetto che potrebbe essere poco sicuro...

  2. #2
    in pratica l'HOST e' sempre localhost. Non e' un segreto per nessuno.

    liberare il result set puo' servire per riacquistare spazio nel buffer, chiudere la connessione quando non serve piu' e' liberare una risorsa od anche per eliminare i file temporanei se ne fossero stati creati.

    Chiudere la connessione in realta' non e' una reale chiusura, ma solo l'eliminazione del resource id# , la connessione rimane in stato di sleepping per cira 28 ore. Lo puoi fare anche perche' vuoi connetterti ad altro server mysql ed evitare di fare confusioni.

    Se un'altro utente che utilizza lo stesso tuo script e quindi stesso host, user, password dovesse connettersi gli viene riassegnata la stessa connessione dormiente cambiando solo il resource id# senza rifare la procedura di connessione che e' di tipo pesante per il server.

    Il silenzio è spesso la cosa migliore. Pensa ... è gratis.

  3. #3
    Originariamente inviato da piero.mac
    in pratica l'HOST e' sempre localhost. Non e' un segreto per nessuno.

    liberare il result set puo' servire per riacquistare spazio nel buffer, chiudere la connessione quando non serve piu' e' liberare una risorsa od anche per eliminare i file temporanei se ne fossero stati creati.

    Chiudere la connessione in realta' non e' una reale chiusura, ma solo l'eliminazione del resource id# , la connessione rimane in stato di sleepping per cira 28 ore. Lo puoi fare anche perche' vuoi connetterti ad altro server mysql ed evitare di fare confusioni.

    Se un'altro utente che utilizza lo stesso tuo script e quindi stesso host, user, password dovesse connettersi gli viene riassegnata la stessa connessione dormiente cambiando solo il resource id# senza rifare la procedura di connessione che e' di tipo pesante per il server.
    L'HOST non è sempre localhost... è localhost quando lavori in locale... e diventa un IP definito quando carichi online su hosting.
    Il mio dubbio era se l'uso di Define.. per salvare appunto le variabili di connessione, fosse buona cosa o meno.

    La chiusura della connessione e liberare il result set... è chiaro, libera risorse.
    Ma la mia domanda era... se serva o meno farlo all'interno di una pagina... se, come credo, viene fatto in automatico al completo caricamento della pagina stessa.

    Mi riferisco al caso di un classico sito internet in cui la connessione è a 1 singolo db mysql...

  4. #4
    Originariamente inviato da Pandax
    L'HOST non è sempre localhost... è localhost quando lavori in locale... e diventa un IP definito quando carichi online su hosting.
    Il mio dubbio era se l'uso di Define.. per salvare appunto le variabili di connessione, fosse buona cosa o meno.

    La chiusura della connessione e liberare il result set... è chiaro, libera risorse.
    Ma la mia domanda era... se serva o meno farlo all'interno di una pagina... se, come credo, viene fatto in automatico al completo caricamento della pagina stessa.

    Mi riferisco al caso di un classico sito internet in cui la connessione è a 1 singolo db mysql...
    l'HOST e' generalmente sempre localhost, non tutti i provider (credo nessuno) permettono l'accesso al db da remoto se non hai un tuo proprio server.

    Quando da remoto ti colleghi al tuo db mysql su hosting lo fai tramite uno script locale cioe' caricato sul server e quindi e' localhost. Anche se hai una solo db mysql al sito potrebbero accedere millanta utenti ognuno con la sua connessione ed il suo buffer. Se hai limiti di spazio disco/connessioni ovviamente sgombrare il campo velocizza i millanta utenti.

    Poi se conviene o meno fare lo sgombero dipende dal tuo script e dal carico su buffer del result set e dal traffico generato dal sito.

    Il silenzio è spesso la cosa migliore. Pensa ... è gratis.

  5. #5
    Originariamente inviato da Pandax

    Il mio dubbio era se l'uso di Define.. per salvare appunto le variabili di connessione, fosse buona cosa o meno.


    Ma la mia domanda era... se serva o meno farlo all'interno di una pagina... se, come credo, viene fatto in automatico al completo caricamento della pagina stessa.
    Le mie domande/dubbi sarebbero questi (vedi sopra e sotto).

    La chiusura e i free result viene fatto a fine caricamento della pagina?
    Ha senso aprire e chiudere la connessione ad ogni query della pagina? Non è gravoso per il server? (considerando che in una classica pagina php, si possono avere query alla 10° riga, alla 50° riga.. alla 65° riga.. ecc.. )
    Se è gravoso, si potrebbe chiudere solo a fine pagina... ma allora ritorno alla domanda.. non viene chiusa in automatico a fine pagina?

    E il free result.. non è automatico alla chiusura della connessione? Se è così allora diventa inutile farlo a fine pagina, visto che a fine pagine la connessione viene chiusa in automatico.

    Allora il free result sarebbe da fare quando hai finito di usarlo all'interno della pagina. Solo che spesso e volentieri, un result viene utilizzato in più parti nella pagina, con la conseguenza che la query ce l'hai a riga 10.. e il result lo finisci di usare a 3/4 di pagina.. e li puoi liberarlo...
    ma se si libera da solo a fine pagina... dove sta il vantaggio?

  6. #6
    Originariamente inviato da Pandax
    La chiusura e i free result viene fatto a fine caricamento della pagina?
    Il caricamento della pagina e' lato browser (client), la pgina php viene chiusa sul server a fine esecuzione. Son cose diverse.

    Ha senso aprire e chiudere la connessione ad ogni query della pagina? Non è gravoso per il server? (considerando che in una classica pagina php, si possono avere query alla 10° riga, alla 50° riga.. alla 65° riga.. ecc.. )
    Non ha alcun senso chiudere dopo ogni query

    Se è gravoso, si potrebbe chiudere solo a fine pagina... ma allora ritorno alla domanda.. non viene chiusa in automatico a fine pagina?
    Ne abbiamo ampiamente parlato in precedenza. Se ritieni di dover chiudere prima chiudi la connessione prima della fine dello script. Altrimenti lascia fare alla chiusura della pagina php.

    E il free result.. non è automatico alla chiusura della connessione? Se è così allora diventa inutile farlo a fine pagina, visto che a fine pagine la connessione viene chiusa in automatico.
    Si, chiudendo ila connessione viene cancellato il resource id# e quindi il buffer perde l'indirzzamento e diventa illeggibile.

    Allora il free result sarebbe da fare quando hai finito di usarlo all'interno della pagina. Solo che spesso e volentieri, un result viene utilizzato in più parti nella pagina, con la conseguenza che la query ce l'hai a riga 10.. e il result lo finisci di usare a 3/4 di pagina.. e li puoi liberarlo...
    ma se si libera da solo a fine pagina... dove sta il vantaggio?
    Anche di questo si e' ampiamente parlato. Dipende dal tuo script e da cosa ne vuoi fare. Metti che tu abbia dei limiti nella quota disco il fatto di liberare risorse non piu' necessarie ti rende disponibile spazio.

    In solido le possibilita' ci sono, non si e' obbligati ad usarle. Ma se serve le usi proprio perche' ci sono e ti agevolano la vita. Altrimenti con questo atteggiamento si potrebbero discutere tutte le funzioni a disposizione, perche' ci sono se si puo' fare diversamente oppure perche' c'e' se non mi serve?


    Il silenzio è spesso la cosa migliore. Pensa ... è gratis.

  7. #7
    Originariamente inviato da piero.mac
    Il caricamento della pagina e' lato browser (client), la pgina php viene chiusa sul server a fine esecuzione. Son cose diverse.

    Non ha alcun senso chiudere dopo ogni query


    Ne abbiamo ampiamente parlato in precedenza. Se ritieni di dover chiudere prima chiudi la connessione prima della fine dello script. Altrimenti lascia fare alla chiusura della pagina php.


    Si, chiudendo ila connessione viene cancellato il resource id# e quindi il buffer perde l'indirzzamento e diventa illeggibile.


    Anche di questo si e' ampiamente parlato. Dipende dal tuo script e da cosa ne vuoi fare. Metti che tu abbia dei limiti nella quota disco il fatto di liberare risorse non piu' necessarie ti rende disponibile spazio.

    In solido le possibilita' ci sono, non si e' obbligati ad usarle. Ma se serve le usi proprio perche' ci sono e ti agevolano la vita. Altrimenti con questo atteggiamento si potrebbero discutere tutte le funzioni a disposizione, perche' ci sono se si puo' fare diversamente oppure perche' c'e' se non mi serve?

    Allora...

    - si chiaro, la pagina viene compilata dal server e poi spedita... mi sono spiegato male, ma per caricamento intendevo fine compilazione su server

    - la mia domanda era puramente generica... basandosi su un classico sito in php con db, che non abbia particolari funzioni. Visto che leggendo su internet, spesso viene raccomandato di chiudere la connessione, di liberare i result set... mi chiedevo "se" in via generica per un sito classico in php, fosse utile o meno questa cosa, in considerazione anche del fatto che a fine compilazione pagina come hai confermato tu, viene chiusa la connessione e liberato il result set.

    Il sito su cui sto lavorando avrà sicuramente una certa mole di utenti che faranno molte richieste di pagine al server.. perciò leggendo in giro che "si raccomanda" di chiudere e liberare.. ho pensato.. "ok, facciamolo"... ma quando mi son messo a lavorare sul codice, mi sono accorto che...

    A - la chiusura della connessione potresti farla:
    - o dopo ogni query...(come fanno in molti)
    - o praticamente a fine codice pagina... ma in quel caso.. non mi sembra utile visto che a fine pagina lo fa già da solo.

    B - il free result potresti farlo:
    - o quando hai finito di usare un certo result... il che spesso e volentieri può significare verso la fine del codice della tua pagina.
    - o a fine pagina appunto... ma come per il close.. non mi sembra utile visto che lo fa in automatico.

    Perciò... la mia domanda/dubbio era .. se ho capito male io.. o se ho capito giusto.
    Perchè magari farlo è invece utilissimo.. e sono io che non ho capito niente, nè sul come funzione, nè sul come usarlo nel codice e in questo caso, se qualcuno volesse farmi un esempio gliene sarei grato.

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.