Editor knih (vypnout)

PHP prakticky/Upload a download

Z Wikiknih

Přejít na: navigace, hledání

Tato kapitola popisuje celý princip přetahování souborů mezi serverem a návštěvníkem webu. Pro názornost je u každého příkladu zpracován formou jednoduchého příkladu.

[editovat] Nahrávání souboru na server (Upload)

Protože zde je nutné uvést i HTML formulář, je následující příklad kompletním zdrojovým kódem ukázkové stránky. (Název souboru je upload.php)

<HTML><BODY>

<!-- Zde si povšiměte parametru ENCTYPE: -->
<FORM method="post" action="upload.php" enctype="multipart/form-data">
<INPUT name="soubor" type="file">
<INPUT type="submit" value="OK">
<INPUT type="hidden" name="odeslano" value="ano">
</FORM>

<?
 if($odeslano=="ano"):
  move_uploaded_file($soubor,"soubory/".$soubor_name); // Překopírujeme soubor do zadaného umístění
  echo "Původní název souboru: ".$soubor_name."<br>";
  echo "Velikost souboru: ".$soubor_size."B<br>";
 endif;
 ?>
</HTML>

Tato stránka nejprve zobrazí formulář pro výběr souboru. Při odeslání se soubor nahraje do složky soubory se zachováním originálního názvu. Po dokončení se návštěvníkovi zobrazí informace o názvu a velikosti souboru.

Princip:

  • Parametr ENCTYPE v HTML prvku FORM určí, že se mají odesílat jak soubor, tak i formulářová data (Lze přidat další políčka)
  • Při odeslání formuláře uloží server soubor do dočasné složky s náhodným názvem a uloží tuto adresu do PHP proměné, jejíž název je shodný se jménem INPUT prvku FILE. (Políčkem pro zadání souboru)
  • PHP skript překopíruje soubor z dočasné složky do složky soubory a vypíše příkazy ECHO název a velikost nahrávaného souboru souboru. (Ukládají se do proměné $x_name a $x_size, kde x je název políčka FILE.
  • Po dokončení PHP skriptu server soubor z dočasné složky smaže!

[editovat] Stahování souborů ze serveru (Download)

Následující zdrojový kód je veškterým obsahem stránky download.php (ovšem můžete ji libovolně přejmenovat)

<? 
$soubor = "soubor.txt"; // Adresa souboru jež chcete dát na stažení

header("Content-Description: File Transfer"); 
header("Content-Type: application/force-download"); 
header("Content-Disposition: attachment; filename=\"$soubor\""); 

ReadFile ($soubor); 
?>

Po kliknutí na odkaz vedoucí na tuto stránku se zobrazí dialog, zdali chcete soubor otevřít nebo uložit. Po kliknutí na uložit se zobrazí dialog pro výběr umístění a názvu a po potvrzení se soubor stáhne.

Princip:

  • Hlavičky HTTP (header) zajistí že se zobrazí dialog a stáhne výstup PHP skriptu. Když bude skript obsahovat pouze příkaz ReadFile, bude totožný s obsahem souboru a tudíž to bude to samé, jako kdyby se stáhl tento soubor.