Fatal error: memoria allocata esaurita

di il
1 risposte

Fatal error: memoria allocata esaurita

Un errore curioso mi sta facendo impazzire:
Fatal error: Allowed memory size of 67108864 bytes exhausted (tried to allocate 8388608 bytes) in /home/mhd-01/www.pizza-flash.it/htdocs/stuff/sumDoubleItems.ph on line 18
a prescindere dal fatto che 8388608 bytes sono meno di 67108864, e giá per questo non capisco come si possa creare un errore simile, ma il codice che sto eseguendo é veramente molto molto semplice, e non capisco dove sta l'errore. Forse sono stato troppe ore davanti allo schermo e non vedo un ; o un $ mancante....
Ho cercato su google e tra gli altri che ho trovato che avevano il mio stesso problema, non sono riuscito a trovare chi l'abbia risolto, solo conversazioni lunghissime con domande su quante persone navigassero contemporaneamente sui loro forum, o su che versione di software vari stavano utilizzando.
Ho provato a inserire
ini_set('memory_limit', '16M');
come da diverse parti si consiglia, ma il risultato é stato ancora piú assurdo:
Fatal error: Allowed memory size of 16777216 bytes exhausted (tried to allocate 32 bytes) in /home/mhd-01/www.pizza-flash.it/htdocs/stuff/sumDoubleItems.ph on line 5
La funzione e la classe presenti in questo file che vi allego servono per smaltire le informazioni ridondanti in un cookie contenente oggetti di un carrello elettronico, salvati nella forma NUMEROx:NUMERO#; dove i due numeri rappresentano quantitá e id dell'oggetto.
Quando un utente scegliesse due volte lo stesso oggetto si produrrebbero due semistringhe riferenti allo stesso id, e con il mio codice sto cercando di sommare le quantitá e riprodurre la stessa stringa di partenza senza ripetizioni di id.
<?php
class order_from_string{
  public function __construct($order_str){
    $temp=explode(":", $order_str);

// le due seguenti espressioni estrapolano ID e QUANTITA dalla stringa del cookie in cui le informazioni sono salvate secondo la forma QUANTITA_1x:ID_1#;QUANTITA_2x:ID_2#;QUANTITA_3x:ID_3#;...ecc
    $this->amount=substr($temp[0],0,(strlen($temp[0])-1));
	$this->id=substr($temp[1],0,(strlen($temp[1])-1));
 }
  public $amount=0;
  public $id=0;
}

function sumDoubleItems($cookie_string){
	ini_set('memory_limit', '16M');        // riga aggiunta senza risultati apparenti
	$returnString="";
	$order_raw=explode(";", $cookie_string);
	$order=Array();

	for($i=0; i<count($order_raw); $i++){
		$order[$i]=new order_from_string($order_raw[$i]);
	}

	for($i=0; $i<count($order); $i++){
		for($j=0; $j<count($order); $j++){
			if($i!=$j && $order[$i]->id==$order[$j]->id){
				$tempAmount=$order[$i]->amount+$order[$j]->amount;
				$order[$i]->amount=$tempAmount;
				unset($order[$j]);
				$order=array_values($order);
			}
		}
	}

	foreach($order as $o)
		$returnString.=$o->amount."x:".$o->id."#;";

	return returnString;
}

?>
grazie dell'attenzione

1 Risposte

  • Re: Fatal error: memoria allocata esaurita

    Aggiungo per completezza che la funzione sumDoubleItems() é chiamata nel seguente modo
    $sumDoubleItems($_COOKIE['cart_content']);
    dove il cookie potrebbe contenere ad esempio la seguente stringa
    1x:3#;12x:3#;44x:1#;33x:3#;
    e l'obiettivo sarebbe precisamente di ottenere come output la seguente stringa da salvare nuovamente nel cookie
    46x:3#;44x:1#;
Devi accedere o registrarti per scrivere nel forum
1 risposte