Upload obrázků na server v PHP

Zde je jednoduchý skript, který Vám přiložený obrázek uloží do složky obrazky. Název souboru se pojmenovává podle timestampu (aktuální čas, den, měsíc, rok…) – trošku nevýhoda při kolizi. Nejdříve si vytvoříme HTML formulář a následně PHP skript:

<form method="post" enctype="multipart/form-data">
    <input type="file" name="obrazky[]" />
    <input type="submit" value="Nahrát na server!" />
</form>
 
<?php
 
// konfigurace
$uploadDir = 'obrazky'; // adresar, kam se maji nahrat obrazky (bez lomitka na konci)
$allowedExt = array('jpg', 'jpeg', 'png', 'gif'); // pole s povolenymi priponami
 
// zpracovani uploadu
if(isset($_FILES['obrazky']) && is_array($_FILES['obrazky']['name'])) {
 
    $counter = 0;
    $allowedExt = array_flip($allowedExt);
    foreach($_FILES['obrazky']['name'] as $klic => $nazev) { // zde poslané obrázky proměníme na proměnnou $nazev
        
        $nazev = htmlspecialchars($nazev, ENT_QUOTES);
        $fileName = basename(time() . ".png");
        $fileName = sprintf(time() . ".png", pathinfo($nazev, PATHINFO_EXTENSION));
        $tmpName = $_FILES['obrazky']['tmp_name'][$klic];
        $fileName = htmlspecialchars($fileName, ENT_QUOTES);
        
 
        // kontrola souboru
        if(
            !is_uploaded_file($tmpName)
            || !isset($allowedExt[strtolower(pathinfo($fileName, PATHINFO_EXTENSION))])
        ) {
            // neplatny soubor nebo pripona
            continue;
        }
 
        // presun souboru
        if(move_uploaded_file($tmpName, "{$uploadDir}".DIRECTORY_SEPARATOR."{$fileName}")) {
            ++$counter;
        }
 
    }
 
    if ($counter > 0)
    echo "<hr><p>Úspěšně byl nahrán {$counter} z ".sizeof($_FILES['obrazky']['name'])." obrázků, děkujeme!<br>
    <br>
    <b>Odkazy na obrázek</b>:<br>
    Klikatelný odkaz na obrázek:<br> 
    <a href='http://web.cz/$uploadDir/$fileName'  target='_blank'>http://web.cz/$uploadDir/$fileName</a><br>
    
    Kopírovatelný odkaz na obrázek:<br> 
    <input type='text' name='f1' id='url' size='100%' value='http://web.cz/$uploadDir/$fileName' onclick='this.select(); PS.clickUrl();'><br>
    </p>"."<br>";
    else
    echo "<hr><b><font color='red'>CHYBA: Nenahráli jste žádný obrázek, nebo má obrázek špatnou příponu!</font></b><br>"; 
}
 
?>

 

A teď, co je v jednotlivých proměnných (tyto proměnné jsou znázorněny v kódu):

$uploadDir= relativně umístěná složka, do které se mají obrázky uložit (bez lomítka na konci)

$allowedExt = povolené přípony obrázku, ostatní nebudou nahrány

$nazev = nezpracovaný název souboru (tak jak jej má uživatel ve svém PC)

$fileName = koncový název souboru, se kterým můžeš dále pracovat

 

Proměnná $fileName se pro jistotu na řádku 23 ještě kontroluje pomocí htmlspecialchars, to aby se nemohl provést nebezpečný XSS útok (více zde). Proměnnou $nazev také radši kontroluji (ačkoliv to není nutné).

Živá ukázka

Velmi podobnou ukázku najdete na foto.mujskript.cz

Ke stažení zde 

 

V článku používáme materiály a funkce, které najdete také na MůjSkript.cz!

Napsat komentář

Vaše emailová adresa nebude zveřejněna. Vyžadované informace jsou označeny *