Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 13

Discussione: Liberare la memoria

  1. #1

    Liberare la memoria

    Ciao ragazzi,

    talvolta dalle pagine del mio sito esce il fastidiosissimo errore:
    Fatal error: Allowed memory size of 8388608 bytes exhausted (tried to allocate 6400 bytes) in ....

    Per prima cosa ho alzato il limite da 8 a 16 mb,

    ma vorrei sapere se esiste un modo in php per liberare la memoria usata in modo tale che non si finisca la memoria disponibile!

    Ciao e grazie

  2. #2
    il modo è fare lo script in modo che consumi meno risorse.. del tipo: mandare variabili via riferimento quando non è del tutto necessario non farlo... eliminare variabili che non servono piu... dichiarare variabili prima di usarle e solo nei blocchi dove vengono usate... insomma: il metodo è fare lo script in modo pulito. Pero è strano che php ti consumi tutta quella memoria a meno che nello script non ci siano ricorsioni o chiamate a funzioni che cunsumano una certa quantità di memoria
    Chiamatemi sven se volete non ho voglia di fare una nuova email per una nuova registrazione xD
    Mac Future User , Ventilatore for PC Cooler user , - dry is coming -

  3. #3
    credo sia dovuto la fatto che lo scritp ridimensiona delle foto prima di salvarle sul server.

    Che dici, può essere?

    Ciao

  4. #4
    dipende dal modo in cui le ridimensiona. Spiegati meglio
    Chiamatemi sven se volete non ho voglia di fare una nuova email per una nuova registrazione xD
    Mac Future User , Ventilatore for PC Cooler user , - dry is coming -

  5. #5
    Diciamo che a grandi linee il codice è questo:

    $image = imagecreatefromjpeg($source);
    $image_resized = imagecreatetruecolor($w, $h);
    imagecopyresampled($image_resized, $image, 0, 0, 0, 0, $w, $h, $width, $height);

    Dove $image è l'immagine originale, $width & $height sono le sue dimensioni,

    e $w e $h sono le dimensioni dell'immagine ridimensionata.

    Solitamente l'errore compare quando esegue $image_resized = imagecreatetruecolor($w, $h);

    Ciao

  6. #6
    volevo sapere come utilizzi questo script: fai un upload e poi crei la thumbs o altro ?
    Chiamatemi sven se volete non ho voglia di fare una nuova email per una nuova registrazione xD
    Mac Future User , Ventilatore for PC Cooler user , - dry is coming -

  7. #7
    sì, faccio l'upload di una immagine e la ridimensiono in modo da poter occupare poco spazio sul server.

    La procedura prende in input o un file o uno zip con tutte le immagini

  8. #8
    Ecco.. quindi lo script ridimensiona e salva piu immagini in un solo momento ? puoi postare lo script col ciclo ?
    Chiamatemi sven se volete non ho voglia di fare una nuova email per una nuova registrazione xD
    Mac Future User , Ventilatore for PC Cooler user , - dry is coming -

  9. #9
    codice:
    if($_FILES[foto][size] > 0){ //se è stata inviata una foto
    					if($_FILES[foto][type]!="application/x-zip-compressed"){//se si tratta di un singolo jpeg
    						
    						addPhoto($_FILES[foto][tmp_name], $_POST[ide], $_POST[aid], $conn);
    
    						print "<span class=\"testo\">La foto è stata inserita correttamente. Puoi inserirne un'altra o  tornare all'evento.
    
    ";
    					}
    					else{ //è stato inviato uno zip
    						require_once('../../pclzip.lib.php');
    						$archive = new PclZip($_FILES[foto][tmp_name]);
    						$list = $archive->extract(PCLZIP_OPT_PATH, "../../eventi/temp",
    											PCLZIP_OPT_REMOVE_ALL_PATH);
    
    						for($n=0; $n<count($list); $n++){ //per ogni file nell'archivio
    							if(!$list[$n][folder]){//se è un file
    								addPhoto($list[$n][filename], $_POST[ide], $_POST[aid], $conn);
    								unlink($list[$n][filename]);
    							}
    							else{
    								rmdir($list[$n][filename]);
    							}
    						}
    }
    
    //la funzione addPhoto è questa:
    
    function addPhoto($filename, $idevento, $aid, $conn){
    		mysql_query("...")or die("Errore nell'inserimento della foto: ".mysql_error());
    		$r=mysql_query("...", $conn);
    		$ri=mysql_fetch_row($r);
    
    		copyResized($filename, "../../eventi/foto/".$ri[0].".jpg", 485, '*', 'image/pjpeg') or die("Impossibile copiare la foto");
    
    	}
    
    //e la funzione copyResized è questa:
    
    function copyResized($source, $dest, $w, $h, $mime){
    	if($mime=='image/pjpeg') $image = imagecreatefromjpeg($source);
    	elseif($mime=='image/gif') $image = imagecreatefromgif($source);
    	elseif($mime=='image/x-png')	$image = imagecreatefrompng($source);
    	else return false;
    
    	if ($image === false) return false;
    
    	// Get original width and height
    	$width = imagesx($image);
    	$height = imagesy($image);
    
    
    	if($w=='*' && $h=='*'){
    		copy($source, $dest);
    		return true;
    	}
    	if($h=='*'){
    		if($width<=$w){
    			copy($source, $dest);
    			return true;
    		}
    		$h=$height * ($w/$width);
    	}
    	elseif($w=='*'){
    		if($height<=$h){
    			copy($source, $dest);
    			return true;
    		}
    		$w=$width * ($h/$height);
    	}
    	else{
    		if($height<=$h && $width<=$w){
    			copy($source, $dest);
    			return true;
    		}
    		if($height/$h > $width/$w)
    			$w=$width * ($h/$height);
    		else
    			$h=$height * ($w/$width);
    	}
    
    	$image_resized = imagecreatetruecolor($w, $h);
    	imagecopyresampled($image_resized, $image, 0, 0, 0, 0, $w, $h, $width, $height);
    
    	if($mime=='image/pjpeg') imagejpeg($image_resized, $dest);
    	elseif($mime=='image/gif') imagegif($image_resized, $dest);
    	elseif($mime=='image/x-png')	imagepng($image_resized, $dest);
    	else return false;
    
    	return true;
    }

  10. #10
    Se la funzione che estraree tutte le img della zip le mette tutte in memoria allora il problema è li... se ci sono troppe img la memoria disponibile viene saturata
    Chiamatemi sven se volete non ho voglia di fare una nuova email per una nuova registrazione xD
    Mac Future User , Ventilatore for PC Cooler user , - dry is coming -

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.