getimagesize în PHP

Imagini PHP 4+

Află lățimea, înălțimea și tipul unei imagini (JPG, PNG, GIF, WebP etc.) fără să o încarce complet.

Sintaxă
getimagesize(string $filename, &$image_info = null): array|false

Ce face getimagesize

getimagesize citește antetul unui fișier imagine și returnează un tablou: [0] lățimea, [1] înălțimea, [2] tipul (o constantă IMAGETYPE_*), [3] textul width="..." height="..." pentru HTML și cheia mime (de exemplu image/png).

Nu are nevoie de extensia GD. Dacă fișierul nu este o imagine recunoscută, returnează false, ceea ce o face utilă pentru a verifica fișierele încărcate de utilizatori.

Parametri

Parametru Descriere
$filename Calea către fișier (sau un URL, dacă serverul permite).
$image_info Opțional. Variabilă în care se pun informații suplimentare (de exemplu blocurile APP din JPEG).

Ce returnează

Un tablou cu dimensiunile și tipul, sau false dacă fișierul nu este o imagine.

Exemple

Exemplul 1: Dimensiunile și tipul unei imagini

Imaginea de test este creată cu GD, ca exemplul să poată rula oriunde.

<?php
imagepng(imagecreatetruecolor(800, 600), "poza.png");

[$latime, $inaltime] = getimagesize("poza.png");
echo "Dimensiuni: {$latime} x {$inaltime} px\n";

$info = getimagesize("poza.png");
echo "Tip: " . $info["mime"] . "\n";
echo '<img src="poza.png" ' . $info[3] . '>';

Rezultat

Dimensiuni: 800 x 600 px
Tip: image/png
<img src="poza.png" width="800" height="600">

Exemplul 2: Verificarea unui fișier încărcat

Extensia din numele fișierului poate fi falsă. getimagesize se uită la conținut.

<?php
imagejpeg(imagecreatetruecolor(2400, 1600), "vacanta.jpg");
file_put_contents("virus.jpg", "<?php echo 'nu sunt o imagine';");

foreach (["vacanta.jpg", "virus.jpg"] as $fisier) {
    $info = getimagesize($fisier);

    if ($info === false) {
        echo "$fisier: nu este o imagine\n";
    } elseif ($info[0] > 2000) {
        echo "$fisier: prea mare ({$info[0]} px lățime, maximum 2000)\n";
    } else {
        echo "$fisier: acceptat\n";
    }
}

Rezultat

vacanta.jpg: prea mare (2400 px lățime, maximum 2000)
virus.jpg: nu este o imagine

Greșeli frecvente

  • Te bazezi doar pe getimagesize ca protecție la încărcarea fișierelor. Un fișier poate avea antet de imagine și cod PHP ascuns în el. Salvează fișierele cu nume generat de tine, cu extensie impusă, într-un director în care PHP nu rulează.
  • Folosești getimagesize pe un URL extern la fiecare afișare. Funcția descarcă imaginea de fiecare dată și încetinește pagina. Salvează dimensiunile o singură dată.

Comenzi înrudite

  • file_get_contents: Citește tot conținutul unui fișier (sau al unei adrese URL) într-un text.
  • base64_encode / base64_decode: Transformă orice date (inclusiv binare) într-un text format doar din litere, cifre, +, / și =.
  • uniqid: Generează un identificator bazat pe ora curentă, în microsecunde. Unic în practică, dar previzibil.