intanto $nomi è un array, l'indice devi usarlo, poi $nomi lo fai diventare $nome, e infine se te ne crea uno soltanto significa che il ciclo è sbagliato... infatti il punto e virgola dopo il foreach non ci va se sotto ci sono altre istruzioni.

Codice PHP:
<?php
$listaurl 
"lista.txt";
$lista file_get_contents($listaurl);
$nomi=explode("\n",$lista);
for(
$i=0$i<sizeof($nomi); $i++){
   
$riscrivi_file=fopen("$nomi[$i].htm","w+");
   
fwrite($riscrivi_file"<html><head></head><body>ciao io sono $nome</body></html>");
   
fclose($riscrivi_file);
}
?>
Soltanto non saprei come puoi gestire questa situazione:

Codice PHP:
fopen("$nomi[$i].htm","w+"); 


forse così?

Codice PHP:
open($nomi[$i].".htm","w+"); 
a me da errore...