Casting e comportamento anomalo a giorni alterni

Ciao ragazzi,

vi racconto cosa mi è successo nella speranza che qualcuno che ne capisce molto più di me (e non ci vuole tanto <_< ) possa spiegarmi cosa è successo.

Sto terminando di sviluppare un’applicazione, che ha al suo interno un calendario localizzato e un controller per metter su un servizio REST.

Per visualizzare i nomi dei mesi utilizzo la funzione:


Yii::app()->locale->getMonthName(<id>)

, dove l’id altro non è che l’indice numerico del mese.

Ora, io l’indice me lo ricavo da un’altra funzione, che mi ritorna lo zero davanti; e quindi la funzione era del tipo


Yii::app()->locale->getMonthName("01")

e mi ritornava “Gennaio”. Questo sino al 31-12. Da ieri l’altro ha iniziato ad andare in errore, dicendomi che l’indice “wide” non era settato.

In pratica, getMonthName, ritorna il contenuto di una matrice del tipo


['monthnames'][1]['wide']['gennaio']

. Ora invece cerca


['monthnames']["01"]['wide']

, che non esiste.

Ho fatto qualche ricerca e ho scoperto che php fa il casting automatico degli indici, convertendoli a numeri interi se equiparabili. Ovvero se incontra una stringa tipo "1", la converte in numero intero 1, se la trova come "01", la lascia così.

Ora, ho risolto forzando il casting, ovvero anteponendo (int) alla variabile. Ma non riesco a spiegarmi cosa sia successo.

Sempre ieri l’altro, ha smesso di funzionare l’aggiornamento via REST. In pratica ho una funzione che si aspetta con metodo PUT all’indirizzo sitoweb/api/modello/<id> i valori da modificare tramite POST.

Come nella guida, intercetto il post con


file_get_contents('php://input')

. Sino al 31 mi ci ritrovavo i valori in un’unica stringa. Ora è sempre vuota. Ho provato cambiando la funzione, provando a usare il costrutto con fopen ect., ma senza successo.

Per risolvere, anziché accedere direttamente all’inputstream, passo per una funzione di Yii, ovvero


Yii::app()->request->getRawBody()

, che mi ritorna la stringa contenuta nel POST.

Sempre cercando, ho capito che l’inputstream può essere letto solamente una volta e che viene svuotato subito dopo. Ma, a parte che io lo leggo solo una volta, prima funzionava (magari non doveva).

Cosa sarà successo?

Scusate del post lungo :rolleyes:

Mario.

Il server è tuo?

Se non lo è, il gestore del server ha aggiornato la versione di php ?