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($parsersubstr($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!