Fatal error upload immagini

LaKanka

Utente Attivo
29 Ago 2008
166
0
0
Salve a tutti!!
Ho un problema con il caricamento delle immagini che superano i 2 MB..
Non so più dove sbattere la testa!!! :crying:

Fatal error: Allowed memory size of 25165824 bytes exhausted (tried to allocate 17323 bytes) in ... /classes/resize.class.php on line 54

Ho dato un occhio alla mia classe resize ma non ho trovato alcun problema:
PHP:
class resize{	
	var $urlimage = "";
	var $maxX = 700;
	var $maxY = 700;
	var $fisso = 0;
	var $latofisso = "XY";
	var $folder = "upload_img/";
	var $newName = "";
	
	
	
	function controlladati(){
		$this->errore = array();
		$this->Estensione = "";
		$this->originalX = 0;
		$this->originalY = 0;
		$this->originalName = "";
		$this->newX = 0;
		$this->newY = 0;
		
		if($this->urlimage==""){
			array_push($this->errore,"Scegliere un file da ridimensionare");
		}elseif(!file_exists($this->urlimage) || !is_file($this->urlimage)){
			array_push($this->errore,"Il file selezionato non esiste");
		}
		if(!is_numeric($this->maxX) || !is_numeric($this->maxY) || $this->maxX<0 || $this->maxY<0){
			array_push($this->errore,"L'altezza e la larghezza dell'immagine devono essere numerici");
		}
		if(!file_exists($this->folder) || !chmod($this->folder,0777)){
			array_push($this->errore,"La cartella di destinazione non esiste o non è scrivibile");
		}
		if($this->fisso!=0 && $this->fisso!=1){
			array_push($this->errore,"La variabile di dimensione fissa deve essere 0 o 1");
		}
		if($this->latofisso!="XY" && $this->latofisso!="X" && $this->latofisso!="Y"){
			array_push($this->errore,"La variabile di lato fisso devono essere X o Y o XY");
		}
		if(count($this->errore)>0){
			return false;
		}else{
			return true;
		}
	}
	
	function go(){
		if($this->controlladati()){
			$filename = basename($this->urlimage);
			$this->originalName = $filename;
			if($this->newName==""){$this->newName=$filename;}
			$this->Estensione = strtolower(substr($filename, strrpos($filename, "."), strlen($filename)-strrpos($filename, ".")));
			if($this->Estensione==".jpeg" || $this->Estensione==".jpg"){
/[COLOR="Red"]/Questa è la linea 54
				$handle_immagine = imagecreatefromjpeg($this->urlimage);[/COLOR]
			}elseif($this->Estensione==".gif"){
				$handle_immagine = imagecreatefromgif($this->urlimage);
			}elseif($this->Estensione==".png"){
				$handle_immagine = imagecreatefrompng($this->urlimage);
			}else{
				array_push($this->errore,"Formato immagine non valido");
				return null;
			}
			$handle_immagine_adattata=$this->adatta($handle_immagine);
			imagejpeg($handle_immagine_adattata, $this->folder.$this->newName, 80);
			chmod($this->folder.$this->newName,0777);
			unset($handle_immagine);
			unset($handle_immagine_adattata);
		}
	}
	
	function adatta($handle_immagine){
		$this->originalX=imagesx($handle_immagine);
		$this->originalY=imagesy($handle_immagine);
		if($this->fisso==1){
			$this->newX=$this->maxX;
			$this->newY=$this->maxY;
		}else{
			if($this->latofisso=="XY"){
				if ($this->originalX/$this->originalY>$this->maxX/$this->maxY) {
					$this->newX=$this->maxX;
					$this->newY=($this->originalY/$this->originalX)*$this->maxX;
				} else {
					$this->newX=($this->originalX/$this->originalY)*$this->maxY;
					$this->newY=$this->maxY;
				}
			}elseif($this->latofisso=="X"){
				$this->newX=$this->maxX;
				$this->newY=($this->originalY/$this->originalX)*$this->maxX;
			}elseif($this->latofisso=="Y"){
				$this->newX=($this->originalX/$this->originalY)*$this->maxY;
				$this->newY=$this->maxY;
			}else{
				if ($this->originalX/$this->originalY>$this->maxX/$this->maxY) {
					$this->newX=$this->maxX;
					$this->newY=($this->originalY/$this->originalX)*$this->maxX;
				} else {
					$this->newX=($this->originalX/$this->originalY)*$this->maxY;
					$this->newY=$this->maxY;
				}
			}
		}
		$tmp_immagine = imagecreatetruecolor($this->newX, $this->newY);
		$handle_immagine_adattata = imagecopyresampled($tmp_immagine, $handle_immagine, 0, 0, 0, 0, $this->newX, $this->newY, $this->originalX, $this->originalY);
		return $tmp_immagine;
		
	}

}

Ma cosa può essere????
 

satifal

Utente Attivo
25 Set 2008
522
13
0
Roma
Il problema dovrebbe essere dovuto al superamento del limite di memoria massima disponibile per l'esecuzione dello script. Tale valore è impostato nel file php.ini ed il valore di default dovrebbe essere di 8 mega (memory_limit = 8M), ma probabilmente nel tuo caso esso è impostato a 2M.
Puoi provare a modificare tale valore direttamente nel file php.ini oppure inserendo all'inizio dello script php la seguente riga di codice:

PHP:
ini_set("memory_limit", "12M");

Ovviamente al posto di 12M puoi scegliere il migliore compromesso per le tue esigenze.
 
Ultima modifica:

LaKanka

Utente Attivo
29 Ago 2008
166
0
0
Bugia!

Non è vero.. Continua a darmi lo stesso errore..
avevo le allucinazioni da speranza...
Ma il codice che mi hai dato lo devo inserire nel file php.ini???
O basta nel file resize.php???
 

satifal

Utente Attivo
25 Set 2008
522
13
0
Roma
Sul mancato salvataggio non saprei cosa risponderti, dovrei fare delle prove. Il problema iniziale era sicuramente dovuto al parametro memory_limit. Ma per immagini di dimensioni più ridotte funzionava e se si continua a funzionare anche dopo la modifica al memory_limit?
Se la risposta è affermativa, allora credo che la dimensione dell'immagine oltre a superare il limite di memoria per lo script impatti anche sulle funzioni che utilizzi per il suo ridimensionamento.
Così al volo non saprei risponderti, magari faccio delle ricerche.
 

satifal

Utente Attivo
25 Set 2008
522
13
0
Roma
Non è vero.. Continua a darmi lo stesso errore..
avevo le allucinazioni da speranza...
Ma il codice che mi hai dato lo devo inserire nel file php.ini???
O basta nel file resize.php???

Se hai accesso al file php.ini puoi modificare il valore del parametro memory_limit. Fatto ciò credo tu debba stoppare e restartare apache o IIS. Altrimenti puoi aggiungere la riga di codice che ti ho postato all'inizio del file resize.php.
 

satifal

Utente Attivo
25 Set 2008
522
13
0
Roma
La funzione ini_set() ti permette di modificare a runtime i parametri di configurazione di PHP.
 

LaKanka

Utente Attivo
29 Ago 2008
166
0
0
Ho aggiunto la riga di codice all'inizio del file resize.php. ma non è servito a nulla.. ora provo a guardare il file ini
 

satifal

Utente Attivo
25 Set 2008
522
13
0
Roma
Prova ad inserire la riga di codice non all'inizio del file resize.php ma nel del file php in cui utilizzi i metodi della classe resize.
 

Eliox

Utente Attivo
25 Feb 2005
4.390
3
0
Controlla che la direttiva upload_max_filesize nel php non sia settata su 2 Mb.
La puoi modificare anche con ini_set(), ad esempio per 8Mb:
PHP:
ini_set('max_upload_filesize', 8388608);
 

LaKanka

Utente Attivo
29 Ago 2008
166
0
0
Dove mi consigli di inserirla??
all'inizio del file resize.class.php o all'inizio del file dove utilizzo i metodi della classe resize?
 

Eliox

Utente Attivo
25 Feb 2005
4.390
3
0
se lo inserisci all'interno del file che contiene la classe è più comodo perché in questo modo la regola vale per tutti i file in cui lo includi.
 

LaKanka

Utente Attivo
29 Ago 2008
166
0
0
Ho scoperto che è il numero di px dell'immagine che da dei problemi non il peso perchè mi da lo stesso fatal error per un img da 600Kb... ho provato ad inserire il codice all'interno del file class ma non cambia...
 

LaKanka

Utente Attivo
29 Ago 2008
166
0
0
Aiuto!!!

"lo script esegue un resize al volo dell'immagine, il problema allora dipende dalle librerie GD. Esse hanno un noto bug, indicato dagli stessi sviluppatori:
“Why does gd cause my PHP script to run out of memory?

Most often, the problem is that the memory_limit parameter in php.ini is set to something very conservative, like 8M (eight megabytes). Increase that setting and restart the web server.

Of course, opening truly huge images can cause real memory problems, if several are open at once. 8,000 pixels times 8,000 pixels times four bytes for truecolor equals a walloping 256 megabytes.”"

Questo è quello che mi sono sentita rispondere da Aruba quando ho chiesto se c'era un limite di memoria.........
Cosa posso fare????:dipser:
 

satifal

Utente Attivo
25 Set 2008
522
13
0
Roma
Questo riconduce al memory_limit di cui ti accennavo all'inizio e che ti consigliavo di modificare nel file php.ini oppure a codice mediante l'utilizzo della funzione ini_set(). Purtroppo per quanto ne so la funzione ini_set() può essere disabilitata dal fornitore del servizio di hosting (anche giustamente a mio avviso) in quanto si potrebbero creare script troppo avidi di risorse.
Se hai già contattato Aruba ed appurato che non è possibile modificare tale impostazione credo non ci sia nulla da fare se non provare con un differente fornitore oppure con un server virtuale nel quale si ha un maggiore controllo delle configurazioni di sistema.
 

LaKanka

Utente Attivo
29 Ago 2008
166
0
0
imagemagik!

Come posso sostituire il resize class con image magick??
Mi hanno consigliato di usare quello... ma sinceramente non ci ho mai messo le mani....
Ho provato a guardare un pò ma non capisco.......
dovrei utilizzare la funzione system???
 

LaKanka

Utente Attivo
29 Ago 2008
166
0
0
ok.. il manuale mi sembrava chiaro ma ovviamente non sono stat buona.....
invece di richiamare la resize class faccio:

convert $_FILES['image']['name'] -resize 600x600 $_FILES['image']['name'];

ma a questo punto mi da un parse error... dove sbaglio???
Ho tralasciato qualcosa di importante vero???:(
 

LaKanka

Utente Attivo
29 Ago 2008
166
0
0
Magic!

Certo che imagemagick è davvero magic!!!!!!!!!!
Non mi da più alcun problema con nessun tipo di img!
Grazie!!!! :tifoso:
 
Discussioni simili
Autore Titolo Forum Risposte Data
S [RISOLTO] Fatal error in Upload Multiplo di immagini PHP 2
U Campo vuoto data errore Fatal error: PHP 2
I Fatal error: Query Failed! SQL: SELECT * INTO OUTFILE PHP 1
L [PHP] Fatal error: Call to a member function prepare() on null in PHP 0
D [PHP] Fatal error: Class 'COM' not found in C:\..... PHP 6
T [PHP] aiuto....Fatal error: Uncaught Error:non riesco a capire PHP 1
C [PHP] Errore "Fatal error: Call to undefined function getTotalUsers()" PHP 2
J [PHP] Recoverable fatal error: PHP 4
J [PHP] fatal error PHP 1
C PHP errore Fatal Error: Allowed Memory Size of ... Bytes Exhausted PHP 7
U [PHP] Fatal error: Call to a member function Query() PHP 1
Antoyosh Fatal error con Wordpress WordPress 5
G Fatal error: Uncaught Error: Call to undefined method UserController PHP 0
O Fatal error: Call to undefined function testNome() in C:\xampp\...\...\index.php on line 51 PHP 4
JackIlPazzo Fatal error: Call to a member function execute() on a non-object PHP 2
filippino Fatal error: Cannot redeclare (function) PHP 2
JackIlPazzo PHP: Fatal error: Call to a member function bind_param() on a non-object PHP 0
P Fatal error: Call to undefined method SMTP::setTimeout() PHP 4
C errore su wordpress _ fatal error PHP 1
M fatal error: Call to undefined function gdrcd_filter() PHP 6
F Fatal error: t3import not found object Joomla 0
Mauro Guardiani Fatal error HTML e CSS 2
T Fatal error: Call to a member function show_crom() on a non-object PHP 1
T Fatal error: Cannot access empty property PHP 2
G Fatal error: Uncaught exception 'PDOException' PHP 12
F Fatal error: Call to undefined function PHP 9
L Fatal error: Call to undefined method Paging::listaPagine() PHP 2
L Fatal error: Call to undefined function virtual() in C:\Inetpub\wwwroot\... PHP 1
S 404 Error " Page not Find" Error SEO e Posizionamento 0
L Error Code: 1215. Cannot add foreign key constraint MySQL 3
M HTTP Status 500 - Internal Server Error. Java 0
A Uncaught Error: jQuery 1
F Uncaught (in promise) Error: 3000ms timeout exceeded Javascript 0
W ADODB.Recordset error '800a0bb9' Classic ASP 2
D error text in table HTML e CSS 11
W Microsoft OLE DB Provider for Visual FoxPro error '80040e14' Function name is missing ). Classic ASP 0
W Parse error: syntax error, unexpected '$result' (T_VARIABLE) PHP 4
W Errore di run-time di Microsoft VBScript error '800a0035' Impossibile trovare il file Classic ASP 0
G Upload file error Apache 0
A Server Apache immagine not found (ERROR 404) Apache 5
T MySQL ERROR 1064 MySQL 1
T [PHP] ...Parse error che non c'è... PHP 7
V [MySQL] You have an error in your SQL syntax MySQL 1
G PHPMailer: SMTP error Gmail PHP 8
G [WordPress] [PHP] Parse error: syntax error, unexpected '$x332cbce1' WordPress 2
I [PHP] Login Facebook SDK returned an error: No URL set! PHP 0
bubino8 [PHP] Query syntax error PHP 6
momeraths [WordPress] cURL error: problema aggiornamento/installazione plugin WordPress 4
A [PHP] FPDF error: Some data has already been output, can't send PDF file PHP 5
otto9due Error anomalo durante invio dati $.ajax Ajax 20

Discussioni simili