Visualizzazione risultati 1 fino 19 di 19

Discussione: [Sessione]: Variabili "normali" SI, array di array NO!?!

  1. #1
    Guest

    Question [Sessione]: Variabili "normali" SI, array di array NO!?!

    Salve,
    ho cercato sul forum qualche discussione simile al mio problema e l'unica che ho trovato non è stata data una risposta...

    Il problema è questo:
    Ho una sessione che funziona perfettamente in locale mentre su AlterVista funziona "a metà".
    Praticamente su AlterVista non riesco a salvare nella sessione un Array di Array mentre tutte le altre variabili di sessione (stringhe, interi, booleani,etc.) sono a posto.
    A cosa potrà essere dovuto?

    P.S: La discussione che tratava un problema simile al mio aveva a che fare con un'oggetto al posto dell'array di array, e anche a quell'utente le altre variabili funzionavano correttamente.

    Grazie a tutti

  2. #2
    Guest

    Predefinito

    potresti postare un esempio di codice che nn ti funziona? io ho provato ed è tutto ok, forse ho capito male...

  3. #3
    Guest

    Predefinito

    Anche a me funziona, comunque puoi dare un'occhiata alle funzioni serialize e unserialize del PHP per ovviare al problema.

  4. #4
    Guest

    Predefinito

    Usa le funzioni session_encode e session_decode.

  5. #5
    Guest

    Predefinito

    Grazie dei consigli, ora proverò le funzioni che mi avete consigliato.

    Il problema è che vorrei memorizzare i risultati di una query nella sessione, per non dover nuovamente interrogare il DB con una query già fatta in precedenza.
    Pensavo di poterlo fare con un array di array.
    In effetti in locale funziona ma su AV no !

    Il codice è un pò lungo per essere postato sul forum.

    Se trovo il tempo ne faccio uno ad-hoc per farvelo vedere.

    Grazie
    -----------------------------------------------------------------
    P.S:
    Ho appena provato le funzioni serialize() e unserialize() ma il risultato è identico: in locale si, su AV no !

    Sto iniziando a pensare che il WebServer sia configurato in modo tale da "costringerti" a fare più query possibili...

    ...mha?!?
    ------------------------------------------------------------------
    P.S(2):
    In effetti provando con un banale array di array di interi funziona benissimo!

    Per favore se qualche "BOSS" di AlterVista legge questa discussione lo pregherei di farmi sapere se quel che penso è effettivamente così, almeno mi metto il cuore in pace e ci dò sotto con le query.

    Grazie
    Ultima modifica di grooveman : 25-10-2006 alle ore 13.02.36

  6. #6
    L'avatar di heracleum
    heracleum non è connesso Utente storico
    Data registrazione
    21-01-2004
    Messaggi
    3,333

    Predefinito

    ma una curiosità...
    ma quanto pesano questi array-di-array che metti in sessione?
    può darsi che nella configurazione di AV ci sia un limite in bytes

    Perché:
    1) se Soulhome ha fatto un test e gli ha funzionato
    2) molto probabilmente Soul avrà istanziato al volo qualche array leggero e l'ha messo in sessione
    3) a te non funzionano (con array probabilmente più pesanti).
    Avvertimento: richiedere in privato questioni tecniche produrrà inevitabilmente una supercazzola prematurata come risposta. (5 served)

  7. #7
    Guest

    Predefinito

    Ciao Heracleum,
    in effetti la tua proposta di soluzione all'enigma mi sembra buona , anche io ho provato con un array bidimensionale di interi ed effettivamente funziona...

    Esiste un modo per sapere il "peso" di un'oggetto?

    Grazie mille!

  8. #8
    L'avatar di heracleum
    heracleum non è connesso Utente storico
    Data registrazione
    21-01-2004
    Messaggi
    3,333

    Predefinito

    Così ad occhio direi che basta contare i bytes del prodotto di serialize()
    http://it2.php.net/serialize

    Per la limitazione in bytes dei dati in sessione ho provato a leggere il phpinfo() (o usi questa funzione e basta in un tuo script php oppure basta che cerchi su google "phpinfo altervista") ma non c'è nulla di palese, tranne il fatto (noto) che i file di sessione vengono salvati in una certa cartella. Ora non so se è possibile limitarne la "capienza".
    Meglio sentire chi ha le idee più chiare, in effetti potrebbe essere molto interessante conoscerne i limiti per -eventualmente- adeguarsi.
    Avvertimento: richiedere in privato questioni tecniche produrrà inevitabilmente una supercazzola prematurata come risposta. (5 served)

  9. #9
    Guest

    Predefinito

    Potresti fare strlen() ad ogni valore dell'array e sommare i risultati:
    Codice PHP:
    function array_size($array, $size = 0){
    if(
    is_array($array)){
    foreach(
    $array as $key => $value){
    if(!
    is_array($value){
    $size = $size + strlen($value);
    }else{
    $size = $size + array_size($value, $size);
    }
    }
    }else{
    return
    false;
    }
    }
    Questa funzione dovrebbe calcolare la dimensione in byte totale di tutti i valori, non l'ho testata ma mi sembra che possa funzionare.

  10. #10
    L'avatar di funcool
    funcool non è connesso Utente storico
    Data registrazione
    05-02-2004
    Residenza
    Qui... Non lì, qui!
    Messaggi
    15,433

    Predefinito

    Citazione Originalmente inviato da tuttoeniente2
    Potresti fare strlen() ad ogni valore dell'array e sommare i risultati:
    Codice PHP:
    function array_size($array, $size = 0){
    if(
    is_array($array)){
    foreach(
    $array as $key => $value){
    if(!
    is_array($value){
    $size = $size + strlen($value);
    }else{
    $size = $size + array_size($value, $size);
    }
    }
    }else{
    return
    false;
    }
    }
    Questa funzione dovrebbe calcolare la dimensione in byte totale di tutti i valori, non l'ho testata ma mi sembra che possa funzionare.
    strlen restituisce il numero di caratteri di una stringa, quindi non credo sia la funzione più esatta da usare.
    Mattia vi manda a FunCool - Matriz - Directory Gogol - Sfondo rosso per la Birmania
    «Tu mi dai fastidio perché ti credi tanto un Dio!» «Bè, dovrò pur prendere un modello a cui ispirarmi, no?» Woody Allen

  11. #11
    Guest

    Predefinito

    Comunque non credo si tratti di un problema di dimensioni di variabili di sessione.
    Premesso che ad ogni modo il il mio DB è di esigue dimensioni sia come struttura che come dati, ho comunque provato a svuotarlo e a lasciare solo un record in ogni tabella: il risultato è identico.

    L'array bidimensionale di stringhe che salta fuori dopo l'interrogazione sarà al massimo di dimensioni 20 x <numero_di_record> (che nella prova è 1!). Il numero di campi è circa 20 (forse anche meno!).

    Attendo fiducioso il passaggio (se mai passerà) di qualche amministratore dei WebServer di AV che possa svelarmi l'arcano!

  12. #12
    Guest

    Predefinito

    Citazione Originalmente inviato da funcool
    strlen restituisce il numero di caratteri di una stringa, quindi non credo sia la funzione più esatta da usare.
    Infatti, ma 1 carattere = 1 byte (di solito) e quindi giungi alla dimensione totale dell'array.

  13. #13
    L'avatar di funcool
    funcool non è connesso Utente storico
    Data registrazione
    05-02-2004
    Residenza
    Qui... Non lì, qui!
    Messaggi
    15,433

    Predefinito

    Citazione Originalmente inviato da tuttoeniente2
    Infatti, ma 1 carattere = 1 byte (di solito) e quindi giungi alla dimensione totale dell'array.
    Questo vale solo per le stringhe...
    Mattia vi manda a FunCool - Matriz - Directory Gogol - Sfondo rosso per la Birmania
    «Tu mi dai fastidio perché ti credi tanto un Dio!» «Bè, dovrò pur prendere un modello a cui ispirarmi, no?» Woody Allen

  14. #14
    Guest

    Predefinito

    a dire al verità anche per i file binari...in realtà strlen restituisce il numero di byte e lo fa indipendentemente dal contenuto della stringa

  15. #15
    L'avatar di funcool
    funcool non è connesso Utente storico
    Data registrazione
    05-02-2004
    Residenza
    Qui... Non lì, qui!
    Messaggi
    15,433

    Predefinito

    Citazione Originalmente inviato da SoulHome
    a dire al verità anche per i file binari...in realtà strlen restituisce il numero di byte e lo fa indipendentemente dal contenuto della stringa
    Sulla documentazione ufficiale non l'ho visto. Dove lo hai letto?
    Mattia vi manda a FunCool - Matriz - Directory Gogol - Sfondo rosso per la Birmania
    «Tu mi dai fastidio perché ti credi tanto un Dio!» «Bè, dovrò pur prendere un modello a cui ispirarmi, no?» Woody Allen

  16. #16
    Guest

    Predefinito

    sulla documentazione effettivamente non lo dice, am ala funzione strlen per calcolare il numero di caratteri conta il numero di byte (e come sai non c'è differenza tra i byte di una stringa e quelli di un file binario...sempre byte sono) comuqnue per toglierti ogni dubbio:
    Codice PHP:
    <?php
    $file
    ="file.ext";
    if(
    strlen(file_get_contents($file)) == filesize($file))
    {
    echo
    "strlen() funziona anche con dati binari!";
    }
    else
    {
    echo
    "SoulHome spara cazzate";
    }
    ?>
    l'unica cosa che forse potrebbe produrre dei risultati inattesi è il conteggio di valori interi e in virgola mobile, che verrebbero convertiti in stringhe numeriche (generalemtne di dimensioni diverse da interi e float [che occupano rispettivamente 32 e 64 bit in genere]) basterebbe aggiungere qualche controllo con is_integer e is_float

  17. #17
    L'avatar di heracleum
    heracleum non è connesso Utente storico
    Data registrazione
    21-01-2004
    Messaggi
    3,333

    Predefinito

    Non ho riflettuto parecchio, anzi scrivo di getto, però:

    sicuri che è lo stesso? avete provato con un file contenete caratteri particolari unicode, per es. accentate e altro? il conteggio byte/numerocaratteri non dovrebbe affatto coincidere
    Avvertimento: richiedere in privato questioni tecniche produrrà inevitabilmente una supercazzola prematurata come risposta. (5 served)

  18. #18
    L'avatar di funcool
    funcool non è connesso Utente storico
    Data registrazione
    05-02-2004
    Residenza
    Qui... Non lì, qui!
    Messaggi
    15,433

    Predefinito

    Che conta i byte di stringhe ci credevo, ma comunque non conta per altri tipi di variabili. O mi sbaglio?
    Mattia vi manda a FunCool - Matriz - Directory Gogol - Sfondo rosso per la Birmania
    «Tu mi dai fastidio perché ti credi tanto un Dio!» «Bè, dovrò pur prendere un modello a cui ispirarmi, no?» Woody Allen

  19. #19
    Guest

    Predefinito

    per contare conta tutti i tipi di dati scalari (int float string e bool) solo che int e float per contarli li converte in strighe numeriche e può restituire dei valori diversi di alcuni bit da quelli reali, ineffetti mi sono reso conto di non aver capito bene quello che intedevi dire prima

    @heracleum: è vero che la codifica unicode impiega 3-4 byte per carattere, tuttavia ho salvato un file in formato unicode con dentro caratteri unicode, e poi ho usato lo script che ho postato sopra...le dimensioni in byte del file sono risultate essere uguali alla lunghezza della stringa...forse è un problema di gestione del php però a quanto pare strlen si limita a restituire le dimensioni in byte della stringa e non i caratteri che al compongono, è strano ma pare prorpio che sia così...
    Ultima modifica di SoulHome : 26-10-2006 alle ore 18.54.22

Regole di scrittura

  • Non puoi creare nuove discussioni
  • Non puoi rispondere ai messaggi
  • Non puoi inserire allegati.
  • Non puoi modificare i tuoi messaggi
  •