PHP prakticky/Upload a download

Z Wikiknih

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.

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

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>

<?php
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 />";
}
?>

</body>
</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!

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

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

<?php
$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.