Tutoriál PHP #6: Ako si vytvoriť jednoduché nahrávanie súborov na server s kontrolou dátovej veľkosti a kontrolou dátového typu

Tutoriál PHP #6: Ako si vytvoriť jednoduché nahrávanie súborov na server s kontrolou dátovej veľkosti a kontrolou dátového typu

Tutoriál PHP #5: Ako si vytvoriť jednoduché nahrávanie súborov na server - popisuje základný jednoduchý skript, ktorý vykoná upload súboru na server do príslušného adresára. Problém je ale v tom, že je možné nahrať akýkoľvek súbor a v dátovej veľkosti sa tiež medze neurčovali. Takto to samozrejme nemôžme nechať.  V tom to návode si ukážeme, ako spraviť upload súborov s kontrolou veľkosti (čo sa bajtov týka) a zároveň obmedziť možnosť nahrávaných súborov na určené typy, napr. obrázky.
Vytvoríme si jednoduchý formulár, pomocou ktorého realizujeme upload súborov na server:

<!--
keďže formulár bude odosielať priložené súbory, potrebujeme do hlavičky definovať 
atribút enctype="multipart/form-data, ktorý zabezpečí možnosť odoslať priložený 
súbor.
-->
<form action="#" method="post" enctype="multipart/form-data">
    <input type="file" name="subor">   
    <input type="submit" value="nahraj obrázok">
</form>

Vytvoríme dve funkcie, ktoré budú kontrolovať povolené prípony súborov a ich dátové veľkosti. Povolené budú dátové typy jpg, png, gif a bmp.
Povolená dátová veľkosť bude napr. 500000 bajtov.

// funkcia na kontrolu dátovej veľkosti
function kontrolaDatovejVelkosti($subor)
  {
     if($subor['size'] <= 500000)
	 return 1; 
    else
	return 0; 
  }


// funkcia na kontrolu dátového typu
function kontrolaDatovehoTypu($subor)
 {
  $povolene_koncovky = array('jpg','JPG','gif','png','bmp');
  // do poľa si uložíme povolené koncovky
			
	$pripona = pathinfo($subor['name'],PATHINFO_EXTENSION);
			
	 if(in_array($pripona,$povolene_koncovky))
           
			  return 1;
			else
			  return 0;
 }

Ďalej je potrebné napísať samotný kód, ktorý na základe vrátenej hodnoty z oboch funkcií vykoná upload súboru na server do príslušného adresára. Funkciu na upload súborov move_uploaded_file() je podrobne popísaná v predošlom článku - Tutoriál PHP #5: Ako si vytvoriť jednoduché nahrávanie súborov na server

<?php

$subor = $_FILES['subor']; // odchytenie priloženého súboru z formulára
if (isset($subor)) // ak formulár obsahuje priložený súbor
{   
   //ak funkcie vrátia hodnotu 1,súbor sa nahraje
   if(kontrolaDatovejVelkosti($subor) == 1 and kontrolaDatovehoTypu($subor) ==1 )  
 {
 move_uploaded_file($_FILES['subor']['tmp_name'],"downloads/".$_FILES['subor']['name']); 
 }
 else
 echo "súbor sa nenahral pre nepovolený formát";
}
?>

Pri volaní funkcie na kontrolu dátového typu sme použili ako vstupný parameter premennú $subor = $_FILES['subor'], ktorá obsahuje priložený súbor z formulára. Musím ale upozorniť na skutočnosť, že $_FILES[ ] je vlastne pole a okrem samotného súboru obsahuje aj ďalšie informácie ako je typ, dátová veľkosť, dočasný názov súboru a pod. Naša funkcia ako vstupný parameter potrebuje z týchto všetkých údajov len jeden - samotný názov súboru, z ktorého si vyselektuje pomocou funkcie pathinfo koncovku. Preto je potrebné pri volaní funkcie doplniť k vstupnému parametru ešte údaj, ktorý hovorí, že chceme len meno súboru. Výsledný parameter má tak tvar $subor['name']. Ak by sme použili na zobrazenie premennej $subor funkciu print_r(), videli by sme výpis celého poľa na obrazovke počítača, vyzeralo by to takto:
print_r($subor);
výsledok zobrazenia: Array ( [name] => Wavk.aha_gif.jpg [type] => image/jpeg [tmp_name] => /domains1/vx296800/public/tmp/phpUbVMnW [error] => 0 [size] => 78381 )

Rubriky: