Autor Zpráva
HomerJay
Profil
Zdravím.
Chcel som do svojho filehost scriptu dať okamžité sťahovanie bez obmedzenia, potom ma však napadli možné dôsledky, tak by som si to chcel ošetriť. Jednoducho chcem spraviť aby po kliknutí na link daný uživateľ dostal presmerovanie na súbor (cez PHP pravdepodobne). Povedzme si príklad:

http://mojserver.sk/ijijowjfwf/subor.zip

Na ten súbor ho to presmeruje, ale s tým, že zložka ijijowjfwf bude NEPRÍSTUPNÁ užívateľom, len PHP.
Obávam sa že na to Header funkcia nestačí, ako potom na to? Vďaka za pomoc (ospravedlňujem sa ak to tu už bolo).
Beavis
Profil
HomerJay:
Htaccess
Option -Indexes
by mělo vyřešit problém s nepřístupností složky.
HomerJay
Profil
Počkaj, asi som sa zle vyjadril.
V .htaccess mám deny for all, čiže prístup nemá nikto, len PHP. O to mi ide - využiť PHP, chlapec klikne na link a ten ho presmeruje a rovno stiahne súbor, no bez kliknutia na link ho nemôže stiahnuť - o to mi ide.
Beavis
Profil
HomerJay:
Aha. Tak použít třeba v URL nějaký hash, a poté přes podmínku ověřit shodu.
bohyn
Profil
$file = "adresar/soubor.zip";

if(is_readable($file)) {
  $filename = basename($file);

  header("Content-Type: application/zip");
  header("Content-Encoding: binary");
  header("Content-Disposition: attachment; filename=\"{$filename}\";");

  readfile($file);
}
else {
  // soubor nenalezen
}


Pokud předáváš název souboru externě tak to ještě chce ošetřit aby si nikdo nestáhnul třeba PHP soubory.
HomerJay
Profil
To som zatiaľ nikdy nepoužíval. Ale aj keby, na tú podmienku je treba použiť PHP ktoré to "skontroluje" a potom ho na daný súbor hodí, mne stačí len to druhé.
HomerJay
Profil
bohyn:
vysvetlíš mi tie veci prosím?

Čo ak nejde o súbor .zip ? Čo ak ide o .mpeg?
bohyn
Profil
HomerJay:
header("Content-Type: application/zip");
header("Content-Encoding: binary");

Řiká prohlížeči jaký je to typ souboru a jaké je kódování

header("Content-Disposition: attachment; filename=\"{$filename}\";");

Zajistí že se nabídne stažení souboru a nastaví se správný název. Bez toho by se obsah souboru zobrazil v prohlížeči

Pokud dopředu nevíš jaký typ souboru to bude tak koukni na fileinfo a mime_content_type(). To první nemusí být na tvém hostingu dostupné, druhé je zase označené za zastaralé.
HomerJay
Profil
bohyn:
Ak správne chápem čo si napísal, fungovalo by toto? Len príklad, povedz či som to pochopil správne :D

$filename = "http://mojastranka.sk/wqkwep274942/subor.mp4";
header("Content-Type: application/mp4");
header("Content-Encoding: binary");
header("Content-Disposition: attachment; filename=\"{$filename}\";");


Teda application/--- <- môže byť hocijaký typ súboru ?
bohyn
Profil
HomerJay:
application/mp4
konkrétně pro MPEG4 video by to bylo "video/mp4". Obsáhlý seznam MIME typů

header("Content-Disposition: attachment; filename=\"{$filename}\";");
Do téhle hlavičky dávej jen jméno souboru, tak jak chceš aby se nabídlo k uložení (nemusí být stejné jako jméno na serveru).

<?php
$file = $_SERVER['DOCUMENT_ROOT']."/wqkwep274942/subor.mp4";
$filename = basename($file);
$mime = get_mime_type($filename);

header("Content-Type: {$mime}");
header("Content-Encoding: binary");
header("Content-Disposition: attachment; filename=\"{$filename}\";");
readfile($file);

function get_mime_type($file) {
  $mime = "";

  if(function_exists("finfo_open")) {
    $fi = finfo_open(FILEINFO_MIME);
    $mime = finfo_file($fi, $file);
  }
  else {
    $mime = mime_content_type($file);
  }

  return $mime;
}
?>
HomerJay
Profil
Ďakujem ti pekne, týmto si mi ušetril veľa trápenia :)

Vaše odpověď

Mohlo by se hodit

Odkud se sem odkazuje


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0