2011-12-13 11 views
21

Come posso controllare altezza e larghezza prima di caricare un'immagine, usando PHP.Controllare le dimensioni dell'immagine (altezza e larghezza) prima di caricare l'immagine usando PHP

È necessario caricare prima l'immagine e utilizzare "getimagesize()"? O posso controllare questo prima di caricarlo usando PHP?

<?php 

foreach ($_FILES["files"]["error"] as $key => $error) { 
if(
$error == UPLOAD_ERR_OK 
&& $_FILES["files"]["size"][$key] < 500000 
&& $_FILES["files"]["type"][$key] == "image/gif" 
|| $_FILES["files"]["type"][$key] == "image/png" 
|| $_FILES["files"]["type"][$key] == "image/jpeg" 
|| $_FILES["files"]["type"][$key] == "image/pjpeg" 
){ 


$filename = $_FILES["files"]["name"][$key]; 








if(HOW TO CHECK WIDTH AND HEIGHT) 
{ 
echo '<p>image dimenssions must be less than 1000px width and 1000px height'; 
} 


} 







?> 
+5

Non è possibile controllare un file utilizzando PHP che non viene caricato sul server. Se deve essere PHP, non è possibile. – deceze

+1

Indovina che devo caricarlo, quindi "decomprimerlo" se supera 1000px :) O usare JavaScript se posso renderlo un'opzione. – Hakan

risposta

4

È necessario eseguire qualcosa sul client prima che si verifichi il caricamento effettivo.
Con php (sul lato server) è possibile controllare la dimensione solo dopo che il file è stato caricato o con upload hooks, magari mentre l'immagine viene caricata (dai dati dell'intestazione del file immagine).

Quindi le opzioni sono flash, forse HTML5 con il suo FileAPI (non hanno testato questo, forse non è fattibile), java-applet, Silverlight, ...

5

Se il file è nella matrice $_FILES (perché è stato selezionato in una forma Multipart), è già stato caricato sul server (di solito a/tmp o simile percorso file) in modo da poter solo andare avanti e utilizzare la funzione getimagesize() in php per ottenere le dimensioni (compresi tutti i dettagli come matrice).

0
array getimagesize (string $filename [, array &$imageinfo ]) 

La getimagesize) Funzione (volontà determinare la dimensione di ogni dato file immagine e restituire le dimensioni insieme al tipo di file e una stringa di testo altezza/larghezza da utilizzare all'interno di un normale tag HTML IMG e del corrispondente tipo di contenuto HTTP.

Per ulteriori aggiornamento del sito visita: http://www.php.net/manual/en/function.getimagesize.php

8

Ecco come ho risolto.

$test = getimagesize('../bilder/' . $filnamn); 
$width = $test[0]; 
$height = $test[1]; 

if ($width > 1000 || $height > 1000) 
{ 
echo '<p>iamge is to big'; 
unlink('../bilder/'.$filnamn); 
} 
+1

Perché controllare dopo l'immagine è già stata caricata? e poi passare il tempo per scollegare ancora –

74

Possiamo farlo facilmente con il file temporaneo.

$image_info = getimagesize($_FILES["file_field_name"]["tmp_name"]); 
$image_width = $image_info[0]; 
$image_height = $image_info[1]; 
+6

Questa risposta dovrebbe essere accettata definitivamente. – igaurav

+0

Sì, questa risposta dovrebbe essere accettata .... –

+0

@Hakan puoi farlo come la risposta accettata? – Tharanga

3

per ottenere la larghezza e l'altezza dell'immagine dell'uso getimagesize(path_name), questa funzione restituisce la matrice che contiene l'altezza, larghezza, image_type costante e altra immagine informazioni correlate. Con il seguente codice puoi ottenerlo.

Nota - Necessità di passare posizione temporanea dell'immagine, e utilizzare il seguente pezzo di codice prima di utilizzare move_upload_file(), altrimenti sarà spostare il file percorso di destinazione e voi non ottenere il risultato desiderato per l'immagine

$imageInformation = getimagesize($_FILES['celebrity_pic']['tmp_name']); 
print_r($imageInformation); 

$imageWidth = $imageInformation[0]; //Contains the Width of the Image 

$imageHeight = $imageInformation[1]; //Contains the Height of the Image 

if($imageWidth >= your_value && $imageHeight >= your_value) 
{ 
    //Your Code 
} 
0

Molto importante - se si utilizza Dreamweaver per codice e si tenta di ottenere la dimensione dell'immagine utilizzando il $_FILES[anyFormName][tmp_name] verrà visualizzato un errore nella visualizzazione dal vivo .. mi c'è voluto un po 'per capirlo.

+0

hai impostato il modulo come "multipart/form-data"? – Popsyjunior

3

questo lavoro per me

$file = $_FILES["files"]['tmp_name']; 
list($width, $height) = getimagesize($file); 

if($width > "180" || $height > "70") { 
    echo "Error : image size must be 180 x 70 pixels."; 
    exit; 
} 
+0

Come buona pratica dovresti anche spiegare la tua risposta un po 'in quanto aiuta la comprensione –

+0

@ Kumar: Penso che la sua risposta sia praticamente auto-esplicativa ... – Stefan

Problemi correlati