Potresti aumentare la memoria disponibile:
Codice PHP:
ini_set('memory_limit','16M');
ma ti consiglio di cambiare metodo per effettuare il parsing:
Mettiamo che questa sia la pagina web:
codice:
<html>
<body>
testo</p>
<span class="b"> ciao</span>
<div>qualcosa</div>
<span class="b"> ciao2</span>
<span class="b"> ciao3</span>
</body>
</html>
Te devi stampare " ciao2".
Codice PHP:
$uri = 'http://www.esempio.it/'; //pagina da parsare
$get = file_get_contents($uri); // si prende il contenuto e se lo salva come testo (stringa) dentro la variabile $get
// per fare una prova potresti usare
/*
$get= '<html>
<body>
testo</p>
<span class="b"> ciao</span>
<div>qualcosa</div>
<span class="b"> ciao2</span>
<span class="b"> ciao3</span>
</body>
</html>';
*/
// adesso puoi usare le funzioni per le stringhe, nel tuo caso è utile strpos() e substr()
$pos1 = strpos($get, "span class=\"b\""); // cerca nella stringa il testo "span class="b"" e ti restituisce la posizione (in caratteri dall'inizio) della "s" iniziale di "span...".
$pos2 = strpos($get, "</", $pos1); // dalla posizione 1 (il numero appena trovato) cerca "</" e ti restituisce la posizione (sempre in caratteri)
$c = substr($get, $pos1+15, $pos2-$pos1-15); // salva in $c ula stringa dei caratteri compresi fra la posizione 1 aumentata di 15 (perchè non devi stampare '<span class...' ma solo ' ciao2' e la posizione 2 diminuita di 15
se adesso stampi $c il risultato è 'ciao' cioè il contenuto del primo span.
per avere il secondo span devi semplicemente iterare il tutto.
Codice PHP:
$uri = 'http://www.esempio.it/'; //pagina da parsare
$get = file_get_contents($uri); // si prende il contenuto e se lo salva come testo (stringa) dentro la variabile $get
$pos0 = 0; // posizione da cui parte il parsing (prima dell'iterazione da 0, poi durante l'iterazione partirà dall'ultimo span trovato
$i=0;
while ($i<=1){ //quante volte deve iterare (per l'ennesimo span aumenta il valore)
$pos1 = strpos($get, "span class=\"b\"", $pos0); // cerca partendo da pos0
$pos2 = strpos($get, "</", $pos1); // dalla posizione 1 (il numero appena trovato) cerca "</" e ti restituisce la posizione (sempre in caratteri)
$c = substr($get, $pos1+15, $pos2-$pos1-15);
if($i==1){echo $c;} // se è la seconda iterazione stampa $c
$pos0 = $pos2+5;
$i++;
}
Come per magia
stamperà "ciao2". Il tempo è solo quello del caricamento dell'url esterno, lo script in sè è velocissimo.
Buona fortuna!