Haber a simple Vista de tu Script.
En una Sola
Variable estas metiendo un Archivo de 18mb, es decir esa variable pesa 18mb.
Al parecer, lo que te puede ayudar a optimizar el Scripts, es lo siguiente
1.- Leer el Fichero por Linea
2.- Aplicar a la Linea una funcion que corrija los Caracteres
3.- Mandar la Linea a una Funcion que Cree un Archivo
La funcion
nuevoarchivo debes crearla, y deberia ser una funcion que reciba por parametro una linea, y la agregue al final de un archivo (que este archivo siempre sea el mismo, se entiende la idea). Entonces si esa funcion la llamamos 100 veces, vamos a tener un archivo con 100 lineas.
De esta forma no usamos tantos recursos, ya que vamos trabajando Linea por Linea (Leyendo una Linea, Corrigiendo la Linea, Guardando la Linea).
Código PHP:
<?
//Abrimos el Archivo
$archivo = fopen("bd.sql" , "r");
if ($archivo)
{
while (!feof($archivo))
{
// En $linea tenemos la linae del Archivo
$linea = fgets($archivo, 4096);
// Aplicai dos Funciones
$linea=corregir($linea);
nuevoarchivo($linea);
}
}
fclose ($archivo);
?>
Lo otro si de ta muxa lata OPTIMIZAR tu Script, al parecer esta tarea que estas haciendo lo haces una vez nomas, lo que puedes hacer es trabajar en tu propia maquina, editai valos del php.ini (para la memoria y tiempo de ejecucion del script), dejai que el script trabaje en tu archivo, y finalmente (despues de un buen rato xD) vas a tener tu fichero.sql correjido, lo subes y lo cargai en tu mysql de tu server