PHP - Fatal error: Allowed memory size

 
Vista:

Fatal error: Allowed memory size

Publicado por rvsso (3 intervenciones) el 08/12/2014 22:50:24
Buenas, antes de todo, soy MUY nuevo en esto del PHP y lenguajes web varios, por lo que si lo que estoy intentando hacer es una burrada, o existe algún método mejor, encantado en que me lo digáis.

Lo que intento hacer, es coger datos de una web e ir rellenando mi base de datos. Voy a necesitar muchos datos, asi que la base de datos sera grande. Lo que haré sera, mirar muchas fichas de partidos, e ir cogiendo datos de cada partidos para al final hacer un "estudio"... pego mi código a ver que opináis


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
<?php
    //Basic HTML parsing with PHP
    include("simple_html_dom.php");
 
 
    $my_connect = mysql_connect("blabla","bleble","blibli");
	if (!$my_connect) {
		die('Error connecting to the database: ' . mysql_error()); }
 
	mysql_select_db("blublu", $my_connect);
 
    for ($id_partit = 50155913; $id_partit < 50155924; $id_partit++){
 
        $web = "http://www.hattrick.org/Club/Matches/Match.aspx?matchID=";
 
        (string)$url = $web.(string)$id_partit;
 
        $htmlCode = file_get_html($url);
 
        $i = 0;
        foreach($htmlCode ->find('<td class="teamNumberRatings" style="width:35%">') as $element) {
            if ( $i == 3 )
                $mig_campL = strip_tags($element);
            elseif ( $i == 4 )
                $mig_campV = strip_tags($element);
            elseif ( $i == 10 )
                $def_drL = strip_tags($element);
            elseif ( $i == 11 )
                $def_drV = strip_tags($element);
            elseif ( $i == 17 )
                $def_cenL = strip_tags($element);
            elseif ( $i == 18 )
                $def_cenV = strip_tags($element);
            elseif ( $i == 24 )
                $def_esqL = strip_tags($element);
            elseif ( $i == 25 )
                $def_esqV = strip_tags($element);
            elseif ( $i == 31 )
                $at_drL = strip_tags($element);
            elseif ( $i == 32 )
                $at_drV = strip_tags($element);
            elseif ( $i == 38 )
                $at_cenL = strip_tags($element);
            elseif ( $i == 39 )
                $at_cenV = strip_tags($element);
            elseif ( $i == 45 )
                $at_esqL = strip_tags($element);
            elseif ( $i == 46 )
                $at_esqV = strip_tags($element);
            elseif ( $i == 54 )
                $tacticaL = strip_tags($element);
            elseif ( $i == 55 )
                $tacticaV = strip_tags($element);
            $i = $i + 1;
        }
 
        mysql_query("INSERT INTO partits (id_partit, mig_campL, def_drL, def_cenL, def_esqL, at_drL, at_cenL, at_esqL, tacticaL, mig_campV, def_drV,
                                          def_cenV, def_esqV, at_drV, at_cenV, at_esqV, tacticaV) 
	             VALUES ($id_partit, '$mig_campL', '$def_drL', '$def_cenL', '$def_esqL', '$at_drL', '$at_cenL', '$at_esqL', '$tacticaL', '$mig_campV',
                             '$def_drV', '$def_cenV', '$def_esqV', '$at_drV', '$at_cenV', '$at_esqV', '$tacticaV')");
 
    }
    mysql_close($my_connect);
 
?>


Consigo que me coja unos 5-6 partidos y todo correcto, pero salta el siguiente error:

1
Fatal error: Allowed memory size of 67108864 bytes exhausted (tried to allocate 128 bytes) in /home/a2578532/public_html/simple_html_dom.php on line 1310
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de xve
Val: 3.943
Oro
Ha mantenido su posición en PHP (en relación al último mes)
Gráfica de PHP

Fatal error: Allowed memory size

Publicado por xve (6935 intervenciones) el 09/12/2014 08:10:34
Hola rvsso, yo he probado tu código sin añadir a la base de datos, y me ha funcionado perfectamente...

Lo que yo tengo mi php bastante tocado... por lo que yo te diría que aumentaras el tamaño de la variable memory_limit en el archivo php.ini

En mi caso, tengo puesto:
memory_limit = 512M

Coméntanos si con esto se soluciona, ok?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Vainas
Val: 34
Ha aumentado su posición en 3 puestos en PHP (en relación al último mes)
Gráfica de PHP

Fatal error: Allowed memory size

Publicado por Vainas (262 intervenciones) el 09/12/2014 09:12:57
Buenas:

La documentacion dice que podrias liberar memoria usando:

1
2
$html->clear();
unset($html);

yo creo que con el "clear" te puede valer. Sino has lo que dice xve.

Saludos.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar

Fatal error: Allowed memory size

Publicado por rvsso (3 intervenciones) el 09/12/2014 17:31:09
He probado con lo de $html->clear(); y me "funciona", porque me rellena 8 filas, cuando antes de 4 no pasaba, pero me da el siguiente error:

1
Fatal error: Maximum execution time of 10 seconds exceeded in...

Esto creo que ya es cosa del servidor con el que trabajo (que es uno gratuito...) y puede que ese sea el problema, ya que yo quiero sacar mucha mas información que solo 8 partidos.

En cuanto a lo de añadir:

1
memory_limit = 512M

no encuentro el php.ini por ningún lado, lo único que hay en el servidor es un: default.php y .htacces...

P.D: y ahora ya desde mi ignorancia, puedo ejecutar este "script" para guardar los datos en una base da datos local? y no hacerlo via navegador?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de xve
Val: 3.943
Oro
Ha mantenido su posición en PHP (en relación al último mes)
Gráfica de PHP

Fatal error: Allowed memory size

Publicado por xve (6935 intervenciones) el 09/12/2014 19:25:55
Si trabajas con un servidor gratuito, no tendrás acceso al archivo php.ini.

Puedes intentar aumentar el timeout con la instrucción:
1
set_time_limit(300);

Aunque puede ser que este desactivada... lo puedes probar?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Fatal error: Allowed memory size

Publicado por rvsso (3 intervenciones) el 09/12/2014 19:35:47
1
set_time_limit() has been disabled for security reasons

Lo he probado, pero no funciona...
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de xve
Val: 3.943
Oro
Ha mantenido su posición en PHP (en relación al último mes)
Gráfica de PHP

Fatal error: Allowed memory size

Publicado por xve (6935 intervenciones) el 09/12/2014 20:32:08
La otra cosa que puedes hacer, es montar un servidor web en tu casa... desde ahí no tendrás estas problemas...
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Vainas
Val: 34
Ha aumentado su posición en 3 puestos en PHP (en relación al último mes)
Gráfica de PHP

Fatal error: Allowed memory size

Publicado por Vainas (262 intervenciones) el 10/12/2014 09:37:14
xve: A veces me da por leer la documentacion

guardar en una bbdd local? ya lo estas guardando en una bbdd no?.

Montate lo que dice xve, un servidor local con apache, php, mysql y demas. te dejo nombres:

xampp
bitnami
wamp

pero hay muchos mas. Si lo haces asi no es necesario correr el script en un navegador. basta que pongas en un prompt: php nombre_de_archivo.php y lo tendrias.

Saludos.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de xve
Val: 3.943
Oro
Ha mantenido su posición en PHP (en relación al último mes)
Gráfica de PHP

Fatal error: Allowed memory size

Publicado por xve (6935 intervenciones) el 09/12/2014 19:23:47
Muy bueno Vainas!!!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar