Visualizzazione dei risultati da 1 a 2 su 2
  1. #1

    Dimensione memoria superato: ma lo script è piccolo!

    Buongiorno a tutti
    Mi trovo in una situazione un pò..come dire.. a mio avviso "anomala".
    Altervista mi riporta questo errore:
    Fatal error: Allowed memory size of 134217728 bytes exhausted (tried to allocate 35 bytes) in /membri/maniaweb/index.php on line 10
    (potete osservata il problema andando su maniaweb.altervista.org chiedo scusa se viene reputato come spamm)
    In rete ho trovato un metodo per agire sul .htaccess per modificare il limite di php all'allocazione di memoria, ho provato sia con 64M che con 128M ho perfino provato numeri astronomici come 500M o 800M ma nulla, quei 35 byte non vengono mai smaltiti.
    Il problema, oltre questo, è che non capisco come uno script PICCOLO e semplice possa addirittura rubarsi tutta la memoria!
    Osservate:

    codice:
    <?php 
    session_start();
    MySQL_connect("localhost","maniaweb");
    MySQL_select_db("my_maniaweb");
    $num=0; $politica=0; $videogames=0; $sport=0; $informatica=0; $musica=0; $tv=0; $cinema=0; $economia=0; $n=0; $autore[0]=0;
    $query=MySQL_query("SELECT * FROM articoli");
    while($rip=MySQL_fetch_array($query)){
    for($c=0;$c<=count($autore);$c++){
    if($c==count($autore)){
    $autore[$n]=$rip["autore"];
    $n++;
    }
    else if($autore[$c]==$rip["autore"]){
    $n_pag_s_aut[$autore[$c]]=$c+1;
    }}
    if($rip["sezione"]=="Informatica") $informatica++;
    if($rip["sezione"]=="Economia") $economia++;
    if($rip["sezione"]=="Politica") $politica++;
    if($rip["sezione"]=="Televisione") $tv++;
    if($rip["sezione"]=="Videogames") $videogames++;
    if($rip["sezione"]=="Cinema") $cinema++;
    if($rip["sezione"]=="Sport") $sport++;
    if($rip["sezione"]=="Musica") $musica++;
    $articoli[$num]="<h2 style='color:blue'>".$rip["titolo"]."</h2><h5 style='color:gray'>".$rip["articolo"]."</h5><span style='color:maroon'>Autore: ".$rip["autore"]."</span> || <span style='color:orange'>Sezione: ".$rip["sezione"]."</span> || Data: ".$rip["data"];
    $num++;
    }
    unset($num); unset($query);
    MySQL_close();
    ?>
    Il problema è sorto solo ed esclusivamente da quando ho inserito la variabile e le istruzioni evidenziate in rosso. Ma come è possibile che questo piccolo script si rubi tutta la memoria? e sopratutto perchè una semplice variabile ($n) e le istruzioni ad essa collegate creino tutto questo macello?

    Ci ho perso tanto tempo ma non riesco proprio a sbrogliare la situazione.
    Spero vivamente che possiate essermi di aiuto.

    Grazie mille e scusatemi della perdita di tempo
    Saluti

    Marco

  2. #2
    Forse questo provider non permette la riscrittura di questo parametro, inoltre 134217728 byte corrispondono a 128M.
    Il consumo di memoria non dipende dal fatto che uno script sia piccolo o grande, basta un ciclo che manipola qualche variabile e la memoria può esaurirsi.
    Nel tuo script ci sono vari cicli e la variabile $articoli è di tipo stringa, e potrebbe contenere una stringa molto grande.
    Altro consiglio, non chiamare più volte la funzione count, nel tuo caso ad ogni iterata viene chiamata tale funzione, quanto invece basta memorizzare la dimensione in un array e poi interroghi la variabile, es.
    Codice PHP:
    for($c=0;$c<=count($autore);$c++){
    if(
    $c==count($autore)){ 
    diventa:
    Codice PHP:
    $n=count($autore);
    for(
    $c=0;$c<=$n;$c++){
    if(
    $c==$n){ 
    CODENCODE \ Branding \ Design \ Marketing
    www.codencode.it

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.