Tengo un script que corrige caracteres extraños en un archivo .sql de 18mb, pero al momento he ha colocado un limitacion de recursos en mi server, dado que este consumia muchos recursos, por lo cual da el siguiente error:
Fatal error: Out of memory (allocated 57671680) (tried to allocate 19039279 bytes) in /home/myuser/public_html/script/change.php on line 20
He probado agregando al .htaccess la siguiente linea
php_value memory_limit 64M
pero me da un error 500 (Internal Server Error) debido a la misma limitacion del server... por lo cual me gustaria saber como puedo optimizar el script que copio acontinuacion:
Código PHP:
<?php
$nombre_archivo = '/home/myuser/public_html/db/dbfile.sql';
$cambiar = array("D'O", "\',", "T'S", "A 'J", "AGUILERA'", "F'", "/','", "O 'OR");
$cambiarpor = array("D´O", " ',", "T\'S", "A ´J", "AGUILERA´", "F\'", " ','", "O ´OR");
// Aseguro que el archivo existe y puede escribirse sobre el.
if (is_writable($nombre_archivo)) {
// Abrimos el archivo.
if (!$gestor = fopen($nombre_archivo, 'r+')) {
echo "No se puede abrir el archivo ($nombre_archivo)";
exit;
}
// Leemos el archivo
$archivo = fread($gestor, filesize($nombre_archivo));
// reemplazamos
$contenido = str_replace($cambiar,$cambiarpor,$archivo);
fclose($gestor);
// Abrimos el archivo.
if (!$gestor2 = fopen($nombre_archivo, 'w+')) {
echo "No se puede abrir el archivo ($nombre_archivo)";
exit;
}
//escribirmos el archivo
if (fwrite($gestor2, $contenido) === FALSE) {
echo "No se puede escribir al archivo ($nombre_archivo)";
exit;
}
echo "Con exito se cambio el archivo ($nombre_archivo)";
fclose($gestor2);
} else {
echo "No se puede escribir sobre el archivo $nombre_archivo";
}
?>
Código PHP:
<?php
$dbh=mysql_connect ("localhost", "db_user", "dbpass");
mysql_select_db ("db_db",$dbh);
mysql_query("TRUNCATE TABLE `data`");
$ultima_linea = system('mysql -u db_user -dbpass db_db < /home/myuser/public_html/db/dbfile.sql', $retval);
// ver resultados
echo "
<hr />Ultima linea de la salida: " . $ultima_linea . "
<hr />Valor de retorno: " . $retval;
?>
Cordiales Saludos,