PDA

View Full Version : [PHP] Problema cookie con PHP 5.3


Andres7X
26-02-2010, 10:01
Ciao a tutti, ho un problema che mi assilla da parecchi giorni, e finalmente ho scoperto qual è la causa.
Sul server su cui poggia il mio sito è stato fatto l'upgrade alla versione 5.3 del PHP. Subito dopo l'aggiornamento, ho riscontrato un fastidioso errore all'interno del sito. Vorrei precisare che esso poggia interamente su uno script PHP. Quando accedo al sito, nella pagina centrale devo premere F5 altrimenti non visualizzo le news. Inoltre, il contatore visite non si aggiorna ad ogni cambio di sezione visitata. In pratica pare che lo script non salvi i cookie del sito. Dato che all'interno di esso c'è anche la possibilità di selezionare diverse skin (e quindi permettere di mantenere aggiornato il cookie con la skin appena selezionata, in modo che non cambi ad ogni refresh della pagina), lo script gestisce anche una funzione per il salvataggio del cookie.

Penso che il problema di tutto ciò risieda nell'upgrade di PHP alla versione 5.3, perchè ha iniziato a dare questi problemi da quel momento.

Lo script non l'ho creato io ma un mio collaboratore, che in questo periodo non può connettersi, quindi ho pensato di rivolgermi qui per sapere se ci sono state delle modifiche riguardo la sintassi del PHP con l'upgrade (preciso che di PHP non so niente, anche se programmo in C e C#, che sintatticamente si avvicinano molto ad esso).


EDIT!
Girando per il web ho scoperto che anche il Cute News potrebbe non essere compatibile con PHP 5.3 (utilizzo quel programma per scrivere le news). Può essere quello la causa di tutto? La pagina delle news (show_news.php) viene richiamata dal file home.php, che è la pagina principale del sito dove avvengono tutti questi problemi -.-

flx2000
26-02-2010, 10:54
PHP è normalmente retrocompatibile con le sue versioni precedenti.
Aggiornare la versione alla 5.3 è un bene, quindi cerca di svelare l'arcano (magari è solo un flag nel file di configurazione) e adattati tu alla nuova release, così da restare al passo coi tempi e in più ottenendo migliori sicurezza e prestazioni.

Andres7X
01-03-2010, 16:48
Ti ringrazio per la risposta.
In realtà sono "saltati" tutti i servizi annessi, ognuno dei quali costruito su script php: topsite, contatore, programma news, e di conseguenza il sito stesso.
Non ci sono errori, il sito è funzionante alla perfezione, così come i servizi. C'è solo questo fastidioso problema che, almeno penso, sia relativo ai cookie o alla cache. Se dici che le versioni di PHP sono retrocompatibili (nonostante qualche deprecated function) allora non capisco dove sia il problema... Sto veramente impazzendo.

flx2000
02-03-2010, 08:59
Perché non provi a impostare E_ALL in error_reporting e a dare un'occhiata al file di log degli errori?...

Fibrizio
02-03-2010, 09:12
PHP è normalmente retrocompatibile con le sue versioni precedenti.
Aggiornare la versione alla 5.3 è un bene, quindi cerca di svelare l'arcano (magari è solo un flag nel file di configurazione) e adattati tu alla nuova release, così da restare al passo coi tempi e in più ottenendo migliori sicurezza e prestazioni.

è solo parzialmente vero.
ha fatto bene ad aggiornare il PHP, ma la versione 5.3 taglia alcune funzioni delle versioni precedenti, ergo non è del tutto retro-compatibile.

Ti ringrazio per la risposta.
In realtà sono "saltati" tutti i servizi annessi, ognuno dei quali costruito su script php: topsite, contatore, programma news, e di conseguenza il sito stesso.
Non ci sono errori, il sito è funzionante alla perfezione, così come i servizi. C'è solo questo fastidioso problema che, almeno penso, sia relativo ai cookie o alla cache. Se dici che le versioni di PHP sono retrocompatibili (nonostante qualche deprecated function) allora non capisco dove sia il problema... Sto veramente impazzendo.

tutti i servizi che hai elencati normalmente fanno appoggio a funzioni di interpretazione di espressioni regolari quali ereg (http://it.php.net/manual/en/function.ereg.php) che è una di quelle deprecate dalla versione 5.3 in poi. Inoltre sono state apportate anche modifiche all'interpretazione delle classi, per cui sanno sorgere risultati bizzarri nel nuovo aggiornamento, per cui se una classe è inizializzata come

class Prova {
...
}

$prova = new Prova();

e si richiama una variabile di sessione

$_SESSION["prova"];

in questa sarà tentata una trasposizione delle variabili di classe, producendo un errore.


Comunque come ha suggerito flx2000 prova ad abilitare gli errori per vedere che problemi ci sono precisamente. ;)

Andres7X
02-03-2010, 18:34
Ho provato e mi vengono fuori una marea di Notice tutti riguardanti variabili non definite. Sul programma di news mi escono anche una serie di Warning riguardanti deprecated function, penso siano quelle il problema vero e proprio.

Fibrizio
03-03-2010, 11:04
Ho provato e mi vengono fuori una marea di Notice tutti riguardanti variabili non definite. Sul programma di news mi escono anche una serie di Warning riguardanti deprecated function, penso siano quelle il problema vero e proprio.

sì ti conviene scrivere "E_ALL & ~E_NOTICE", escludendo le modifiche. comunque è come ti dicevo, dipende dalle variabili deprecate, ti conviene vedere se esiste un aggiornamento dei moduli che hai utilizzato oppure correggerle a mano con i loro equivalenti.;)

Andres7X
03-03-2010, 15:31
Purtroppo non è cambiato niente :(
Non so più veramente cosa fare, mi sto pentendo seriamente di aver fatto l'upgrade...
Sembra che tutto il server abbia problemi con la cache: nel contatore i dati non si aggiornano manco premendo F5 (per farlo c'è un'opzione apposita che svuota la query apposita della cache e salva i nuovi dati nelle relative query), nel sito per visualizzare le modifiche bisogna premere F5 (anche se la cache è vuota). Non penso sia un mio problema, nè del browser: lo fa con quasi tutti i i visitatori, e con gli altri siti va tutto bene. Potrebbe essere un problema nelle impostazioni del server? Il mio capo dice che non ha modificato una virgola durante l'upgrade...

:muro: --> mia situazione dopo giorni e giorni dietro a 'sto caspio di problema...

Fibrizio
03-03-2010, 15:50
Purtroppo non è cambiato niente :(
Non so più veramente cosa fare, mi sto pentendo seriamente di aver fatto l'upgrade...
Sembra che tutto il server abbia problemi con la cache: nel contatore i dati non si aggiornano manco premendo F5 (per farlo c'è un'opzione apposita che svuota la query apposita della cache e salva i nuovi dati nelle relative query), nel sito per visualizzare le modifiche bisogna premere F5 (anche se la cache è vuota). Non penso sia un mio problema, nè del browser: lo fa con quasi tutti i i visitatori, e con gli altri siti va tutto bene. Potrebbe essere un problema nelle impostazioni del server? Il mio capo dice che non ha modificato una virgola durante l'upgrade...

:muro: --> mia situazione dopo giorni e giorni dietro a 'sto caspio di problema...

ma hai corretto le funzioni deprecate?

Andres7X
03-03-2010, 17:20
Sì, e il problema non si è risolto... Anzi, il problema sembra quasi essere un problema di cache/cookie/nonsocosa (come specificato nel mio post precedente).

EDIT
Il mio "capo" utilizza Opera come browser e non ha nessuno di questi problemi. Mi viene da pensare che sia un problema degli altri browser, ma è possibile? O_o

Fibrizio
04-03-2010, 08:29
Sì, e il problema non si è risolto... Anzi, il problema sembra quasi essere un problema di cache/cookie/nonsocosa (come specificato nel mio post precedente).

EDIT
Il mio "capo" utilizza Opera come browser e non ha nessuno di questi problemi. Mi viene da pensare che sia un problema degli altri browser, ma è possibile? O_o

firefox ha un grave problema di cache, pare essere stato in parte risolto con recenti aggiornamenti, ma non ci metterei la mano sul fuoco. Per il resto dovresti vedere come vengono evocati i cookie, insomma, compaiono altri warning o no adesso?

Andres7X
04-03-2010, 08:47
Non compaiono più warning. Tra l'altro, cosa molto strana, il contenuto di error_log del server è completamente vuoto. Abbiamo appurato anche che non è il server la causa di tutto.

Altra cosa strana: sempre al mio capo funziona tutto, pure con IE (su Firefox non ha provato, e con IE ad esempio a me non funziona). Sembra non essere per niente un problema di script, ma a questo punto non ho la più pallida idea di dove sbattere la testa.

Fibrizio
04-03-2010, 08:58
Non compaiono più warning. Tra l'altro, cosa molto strana, il contenuto di error_log del server è completamente vuoto. Abbiamo appurato anche che non è il server la causa di tutto.

Altra cosa strana: sempre al mio capo funziona tutto, pure con IE (su Firefox non ha provato, e con IE ad esempio a me non funziona). Sembra non essere per niente un problema di script, ma a questo punto non ho la più pallida idea di dove sbattere la testa.

cos'è che ha fatto sparire i warning? sono spariti così da nulla? è stato aggiornato il php?

Andres7X
04-03-2010, 12:58
Scusa, mi sono spiegato abbastanza male...
Sono spariti i warning a seguito delle correzioni che ho fatto nelle funzioni deprecate del sito e dei vari servizi (i notice rimangono, ma riguardano solo variabili non definite). Non appaiono ulteriori warning: il sito in sè e per sè funziona correttamente. Semplicemente non si aggiorna la cache, o i cookie.

Il problema è questo:
- entro nella home del sito con un template (scelto dalla index)
- visito la pagina pincopallo.php
- clicco sull'opzione per cambiare template
- rivisito la pagina pincopallo.php (sempre selezionandola dal menu) e mi visualizza sì la pagina, ma con il template precedente

Allo stesso tempo per vedere le news devo premere F5, lo stesso per il contatore visite. Penso sia un problema generale di cache/cookie, che però abbiamo appurato non essere nè a livello di script nè a livello server...

Fibrizio
04-03-2010, 13:34
Scusa, mi sono spiegato abbastanza male...
Sono spariti i warning a seguito delle correzioni che ho fatto nelle funzioni deprecate del sito e dei vari servizi (i notice rimangono, ma riguardano solo variabili non definite). Non appaiono ulteriori warning: il sito in sè e per sè funziona correttamente. Semplicemente non si aggiorna la cache, o i cookie.

Il problema è questo:
- entro nella home del sito con un template (scelto dalla index)
- visito la pagina pincopallo.php
- clicco sull'opzione per cambiare template
- rivisito la pagina pincopallo.php (sempre selezionandola dal menu) e mi visualizza sì la pagina, ma con il template precedente

Allo stesso tempo per vedere le news devo premere F5, lo stesso per il contatore visite. Penso sia un problema generale di cache/cookie, che però abbiamo appurato non essere nè a livello di script nè a livello server...

con che browser hai provato dal tuo pc? hai provato con diversi browser? probabilmente, se su altri computer funziona, è un problema inerente alla tua configurazione.

Andres7X
04-03-2010, 18:20
Uso Firefox 3.6 e IE 7 e mi dà problemi su entrambi. Le impostazioni mi sembrano settate correttamente. Il mio computer non dovrebbe essere la causa, perchè ho provato dal PC della mia facoltà e mi ha dato lo stesso problema.

EDIT
Leggendo su php.net alla voce "Backward Incompatible Changes" ho letto questo:

"The newer internal parameter parsing API has been applied across all the extensions bundled with PHP 5.3.x. This parameter parsing API causes functions to return NULL when passed incompatible parameters. There are some exceptions to this rule, such as the get_class() function, which will continue to return FALSE on error. "

Da quel che ho capito, se alcuni parametri sono incompatibili la funzione ritorna NULL. Potrebbe essere che qualche funzione relativa alla cache restituisca NULL (magari dovrebbe ritornare, per esempio, la pagina aggiornata ma ritorna NULL per colpa dei parametri).
Tutto questo discorso vale se ho capito bene quello che ho letto o_O

Fibrizio
05-03-2010, 08:48
Uso Firefox 3.6 e IE 7 e mi dà problemi su entrambi. Le impostazioni mi sembrano settate correttamente. Il mio computer non dovrebbe essere la causa, perchè ho provato dal PC della mia facoltà e mi ha dato lo stesso problema.

EDIT
Leggendo su php.net alla voce "Backward Incompatible Changes" ho letto questo:

"The newer internal parameter parsing API has been applied across all the extensions bundled with PHP 5.3.x. This parameter parsing API causes functions to return NULL when passed incompatible parameters. There are some exceptions to this rule, such as the get_class() function, which will continue to return FALSE on error. "

Da quel che ho capito, se alcuni parametri sono incompatibili la funzione ritorna NULL. Potrebbe essere che qualche funzione relativa alla cache restituisca NULL (magari dovrebbe ritornare, per esempio, la pagina aggiornata ma ritorna NULL per colpa dei parametri).
Tutto questo discorso vale se ho capito bene quello che ho letto o_O

è il problema che ho esplicato prima con le classi e le variabili di sessione.
dovresti in ogni caso controllare come vengono generati i cookie, anche se è alquanto strano che funzioni ad alcuni piuttosto che ad altri. Forse i cookie sono inizializzati male. Non ti resta che controllare i file sorgente.

flx2000
05-03-2010, 09:27
Se su alcuni browser funziona e su altri no, allora il problema è nell'applicazione e non nel motore (in questo caso PHP).

Se vuoi un consiglio, scrivi una pagina di prova che lavori sui cookie e verifica se quella funziona. Se così fosse, almeno avresti capito per certo che il problema non è nel nuovo PHP ma nel codice del prodotto che non ti funziona.

Andres7X
05-03-2010, 23:02
Ho risolto il problema del sito aggiungendo la seguente riga all'inizio del codice:

header("Cache-Control: no-cache, must-revalidate");

Io e un mio collaboratore (che programma in PHP) abbiamo controllato se il sito salvava i cookie, abbiamo fatto diverse prove e alla fine abbiamo aggiunto quel codice. Ora il cookie dei template si salva, così come le news che sono visualizzabili senza premere F5.

Penso che farò lo stesso con gli altri servizi :)

Grazie a entrambi per avermi aiutato, finalmente penso di essere giunto alla fine del calvario... :rolleyes: