Ver Mensaje Individual
  #2 (permalink)  
Antiguo 28/07/2003, 15:38
leonardop
 
Fecha de Ingreso: julio-2003
Mensajes: 165
Antigüedad: 20 años, 9 meses
Puntos: 1
Hola,

Me parece que el problema debe resultar a causa de que el cuerpo del ciclo se ejecuta tantas veces que la asignación de memoria al arreglo $valores_l termina agotando la memoria disponible para el intérprete. El mensaje de error que recibes es sólo un resultado incidental de un descuido en la construcción del ciclo. Pareciera que el intérprete tuviera un límite para la ubicación de memoria relativamente bajo (~8MB) o no hubiera un límite muy restrictivo para el tiempo de ejecución del programa, ya que de otro modo hubieras podido también recibir un mensaje del tipo:

Cita:
Fatal error: Maximum execution time of NN seconds exceeded in /ruta/hacia/archivo.php on line XX
Te recomendaría que revisaras cuidadosamente la condición del `while', y el cuerpo del ciclo en general, para asegurarte de que éste no se ejecute más veces de lo necesario.

Por ejemplo, en la condición del while comparas el valor de la variable $dia con una cadena de dos caracteres ('; '). Sin embargo, $dia no va a recibir cadenas de ese tamaño mediante el llamado a fgets(), ya que el segundo argumento de esta función es usado como un límite para leer cierto número de caracteres de un archivo, y se leen como máximo (límite - 1) caracteres. Es decir, en tu ejemplo $dia va a recibir cadenas de máximo 1 caracter de tamaño de la función fgets().

Ma parece que tu programa debería lucir algo así:

Código:
<?php

$archivo = fopen ('archivo.txt', 'r');

$dia = fgets ($archivo, 3);

$numero_l = 0;
while ($dia != '; ' and ! feof ($archivo)) {
    $valores_l[$numero_l++] = (double) $dia;
    $dia = fgets ($archivo, 3);
}

fclose ($archivo);

?>
Asumiendo que el archivo del que lees los datos (en este ejemplo `archivo.txt'), luce algo así:

Código:
10203040; 5060
En este ejemplo, se leerían los valores 10, 20, 30 y 40.

Respecto a la reservación de memoria en PHP, en realidad no hay nada exótico en el proceso. La memoria de las variables se asigna dinámicamente, y en el caso de las arreglos, el tamaño de estos puede crecer o disminuir en la medida en que el programador lo necesite, usando algoritmos bastante comunes. El problema en tu caso, te repito, parece que fuera un ciclo que no sigue la lógica que deseas realmente.

Un cordial saludo