ShareThis

Mostrando entradas con la etiqueta PHP. Mostrar todas las entradas
Mostrando entradas con la etiqueta PHP. Mostrar todas las entradas

martes, 22 de junio de 2010

PHP Fatal error Allowed memory size xxx exhausted ¿como resolverlo?

Este mensaje de error puede presentarse cuando un los requerimientos de memoria de un script PHP exceden el limite por defecto establecido.

Para resolverlo, hay dos opciones:

Cambiar el limite de memoria de un script específico incluyendo la siguiente linea:

ini_set("memory_limit","12M");

Para el ejemplo anterior el limite se establece en 12 Megabytes.

Este cambio tambien se puede hacer de manera global (aplica para todos los scripts). Para ello es necesario modificar el archivo php.ini (normalmente ubicado en la ruta /etc)

memory_limit = 12M

Tenga cuidado de utilizar este comando pues es poco frecuente que un script requiera estos niveles de memoria para su ejecución. Excepciones frecuentes para esto son operaciones como importar y procesar archivos batch de gran tamaño.

Leer CSV con PHP

Comparto este fragmento de código muy sencillo, útil para procesar archivos CSV con el lenguaje PHP:


$archivo = fopen("archivo.csv");
while($linea = fgetcsv($archivo,0,",")){
$columna1 = $linea[0];
$columna2 = $linea[1];
$columna3 = $linea[2];
$columna4 = $linea[3];
}
fclose($archivo);

martes, 21 de julio de 2009

Codigo PHP genera página en blanco

Recientemente estuve adelantando un desarrollo en PHP. Con gran sorpresa me encontre con que al pasar el código al ambiente de producción, algunas porciones de la aplicación dependientes de una conexión a base de datos MySQL no funcionaban apropiadamente.

Lo primero que intente fue habilitar las opciones de debug:


error_reporting(E_ALL);
ini_set('error_reporting', E_ALL);
ini_set('display_errors',1);
ini_set('display_errors', 'On');
...el resto de código...


Sin embargo, la salida no evidenciaba ningun mensaje de error fatal.
De manera seguida, intente extraer la información de configuración del hosting mediante el siguiente codigo PHP:


php phpinfo();


Alli se indicaba que se trataba de una versión PHP 5.2.
Finalmente, despues de dos dias indagando en Internet, encontre que el error se debia a un bug de PHP al usar fetch_assoc()


Hay dos workarounds para este problema:

Primera alternativa
Utilice fetch_row en lugar de fetch_assoc.


"//$row=$result->fetch_assoc();" the code is not working...
"$row=$result->fetch_row();" the code is working...



Segunda alternativa
Utilice el siguiente código de workaround.


$finfo = $result->fetch_fields(); $nc=0; foreach ($finfo as $val)
{$row_key[$nc++]=$val->name;} //---
for ($i=0; $i<$num_results; $i++) {
//$row=$result->fetch_assoc();
$row_val=$result->fetch_row();$row=array_combine($row_key,$row_val);
echo "

".($i+1)." Title: ";
echo htmlspecialchars(stripslashes($row['title']));
echo "
Author: ";
echo stripslashes($row['author']);
}



Este problema al parecer estaba presente en 2002 de acuerdo a un reporte en bugs.php.net.

Espero que sea de utilidad.