Rilancio la mia richiesta di aiuto in maniera più circostanziata, sperando che qualcuno mi aiuti a capire dove possa risiedere il problema!
Ho uno script che fa varie cose, tra cui parsare un file con la tecnica dell'xml_parse(). Questa parte dà problemi nel caso che il file abbia certe dimensioni, ad esempio già con un file xml di 300kB dà problemi. Il file è stato aperto da un socket ed è salvato in una variabile stringa.
La cosa strana è che il problema che vi sto per descrivere si presenta solo sul server remoto, che, sebbene budget, è un dedicato abbastanza scarico. Sul mio server locale (e su altre macchine remote) funziona correttamente.
Il loop che uso è il seguente.
Codice PHP:
$offset = 0;
$limit = 4096;
while ( $offset < strlen($data) )
{
if ( !xml_parse($parser, substr($data,$offset,$limit), $offset+$limit >= strlen($data) ) )
{
// do error stuff.....
}
$offset += $limit;
}
xml_parser_free($parser);
La cosa che non capisco è che sul dedicato che vi dicevo vi posso garantire che il loop non viene mai portato a termine, ma lo script è interrotto e il server rende come response header solamente la riga HTTP/1.x 200 OK (non essendoci output prima di quel punto), cosa che fa evidentemente ritenere al browser che i dati ricevuti siano un file da scaricare, che però è vuoto.
Indagando meglio, sembra che i loop si interrompa all'ultima iterazione, durante l'esecuzione della xml_parse col flag che indica l'ultimo loop. Dopo questa iterazione perdo il filo del flusso dello script: sembra che la funzione non finisca mai l'esecuzione e che lo script venga "segato" senza output a schermo.
Inizialmente pensavo che ci fosse un sistema di controllo di occupazione della cpu che uccide i processi troppo onerosi. Non sono più del tutto di questo parere, dato che posso verificare l'esecuzione dello stesso fino all'ultima iterazione.
Non so più che pensare!
Grazie e tutti!