SMF e PHP

Aperto da emanuele, Sabato - 27 Luglio 2013 - 15:15

0 Utenti e 1 Visitatore stanno visualizzando questa discussione.

emanuele

Nota importante
Questo articolo è stato scritto circa 6 mesi prima che venisse rilasciato SMF 2.0.7.
La situazione attuale è quindi:
* SMF 2.x pienamente compatibile con PHP 5.5 e superiori
* SMF 1.x ancora non pienamente compatibili con PHP superiori a 5.4 e potenzialmente incapaci di funzionare su host particolarmente zelanti (cioè ad esempio quelli che bloccano il parametro /e nelle espressioni regolari).

Il resto dell'articolo può restare come "memoria storica", ma non è più attuale.




SMF sempre avuto un occhio di riguardo alla "backward compatibility" (cioè compatibilità con versioni "precedenti") di PHP, infatti può ancora funzionare anche su PHP 4.1.0 (rilasciato nel dicembre 2001, 12 anni fa ed ormai non più supportato da 11 anni circa). Questo gli ha sempre permesso di funzionare anche su server "economici" che mantenevano vecchie versioni di PHP per accontentare quei clienti che ancora usavano script programmati per vecchissime versioni di php e non volevano/potevano aggiornarli.

Oggigiorno, però, dopo anni in cui lo sviluppo di PHP è stato praticamente fermo (tra PHP 5.2 e 5.4 sono passati 6 anni, quando nei precedenti 6 si era passati dal 4.0 al 5.2), i suoi sviluppatori hanno ricominciato a sfornare versioni "a raffica": a marzo dell'anno scorso è stato rilasciato PHP 5.4, ed il mese scorso invece è arrivata la nuova versione 5.5 e la 5.6 è in sviluppo.

Questo "improvviso" risveglio ha portato all'introduzione di molte novità: miglioramenti, nuove feature, correzione di bug, ecc., ma ha portato anche a deprecare alcune vecchie funzionalità, alcune delle quali usate (magari erroneamente) da SMF.

Uno dei problemi principali dell'utilizzo di SMF con PHP 5.4 è il cosiddetto "Call-time pass-by-reference". Nel caso specifico di SMF, questo errore è generato dal un errato utilizzo nel codice della funzione call_user_func_array per alcuni hook a cui viene passato come secondo argomento un valore invece di un array come invece dovrebbe essere.
Il problema in sé è facilmente risolvibile, ciò che potrebbe richiedere più lavoro è correggerne le conseguenze: alcuni mod potrebbero non funzionare. Al momento non entro nei dettagli per amor di brevità, se c'è interesse posterò prossimamente le correzioni da effettuare.
Ad ogni modo l'errore non causa altro che una serie di errori nel log.

Con l'introduzione di PHP 5.5, invece, è stato deprecato il modificatore "e" nella funzione preg_replace. Questo modificatore prende il match della espressione regolare, esegue come se fosse codice php ed il risultato poi utilizzato nel "replace". Questo è un potenziale problema di sicurezza, quindi è stato deciso di prima deprecare l'opzione e rimuoverla in futuro.
Questo fatto ha parò portato alcuni zelanti host (per ora uno a quanto pare) a disabilitare completamente la funzione preg_replace in presenza del modificatore "e", rendendo di fatto impossibile utilizzare SMF.
In SMF questo modificatore è parecchio utilizzato (circa 20 istanze in SMF 1.1, 28 in SMF 2.0, 18 in SMF 2.1, dove alcune erano state rimosse in previsione del problema) ed al momento non è ancora pronta alcuna soluzione "finale". Quindi...è sconsigliato usare SMF con PHP 5.5. ;)

Raffomix

ciao...
mi è arrivata una mail dal mio hosting server nella quale mi avvisano di un fantomatico Trasferimento hosting su nuova infrastruttura con conseguente aggiornamento di tutti i software  e quindi tutti i sistemi operativi verranno aggiornati con le ultime release dei servizi e la versione 5.2 di PHP verrà sostituita dalla 5.3

Il tutto a loro dire si svolgerà nel tempo di un ora in una notte che mi hanno indicato come data (si parla di server condiviso ove risiede mio forum SMF appena aggiornato a 2.0.5 da 1.1.18)

la domanda che vado a fare, visto che sono completamente ignorante in materia è:
che problematiche devo secondo voi prepararmi ad affrontare?

...sto già sudando freddo

Darknico

Italian SMF gira su PHP 5.3, quindi direi che non ci sono problemi, a mio parere :)
Dovrebbe essere tutto indolore...
Non supporto privatamente, non risponderei e ci rimarreste male....

emanuele

Yep.
5.3 è sostanzialmente indolore, al massimo potresti trovare qualche errore (warning) nel log, ma non sono problematici.

Raffomix


emanuele

Ho aggiornato il primo post con la seguente nota:
CitazioneNota importante
Questo articolo è stato scritto circa 6 mesi prima che venisse rilasciato SMF 2.0.7.
La situazione attuale è quindi:
* SMF 2.x pienamente compatibile con PHP 5.5 e superiori
* SMF 1.x ancora non pienamente compatibili con PHP superiori a 5.4 e potenzialmente incapaci di funzionare su host particolarmente zelanti (cioè ad esempio quelli che bloccano il parametro /e nelle espressioni regolari).

Discussioni simili (3)