Quieres apostar a que ese contador sí incrementa?
Basta con que pongas
echo "$i<br />"; para comprobarlo; de hecho, si no incrementara PHP se quedaría dándole vueltas a ese ciclo.
El problema real es que desde la primera iteración reemplazas el contenido de $tmp, por lo que en las siguientes vueltas ya no existen {origen}, {puerto}, etc.
Código PHP:
Ver original// Cambia de nombre a tu variable
$codigo = <<<EOPAGE
/* aquí todo tu código */
EOPAGE;
for(/* aquí las características de tu for */) {
$tmp = $codigo;
/* Aquí todos los str_replace() y el echo */
}
// voilà!!!