pihedy

File dowload count

May 13th, 2021
609
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. <?php
  2.  
  3. try {
  4.     /**
  5.      * Megvizsgálod, hogy a kérés létezik-e, és ha létezik, akkor a kérés tartalma string-e.
  6.      * Ha nem akkor, nincs mit kezdeni ezzel a kéréssel.
  7.      */
  8.     if (!array_key_exists('file', $_REQUEST) || !is_string($_REQUEST['file'])) {
  9.         return null;
  10.     }
  11.  
  12.     $file = __DIR__ . DIRECTORY_SEPARATOR . $_REQUEST['file'];
  13.  
  14.     /**
  15.      * Megvizsgálod, hogy a kért file létezik-e.
  16.      * Ez azért jó, mert a php futási környezetén kívül is ki tudod helyezni.
  17.      */
  18.     if (!file_exists($file)) {
  19.         return null;
  20.     }
  21.  
  22.     /**
  23.      * A count-ot itt most én egy file-ba mentem ki.
  24.      * Ha db-be akarod kimenteni, akkor előtte count-old a filenevet a db-ben, így megtudod hogy létezik-e, vagy sem.
  25.      * A kiolvasott értéket pedig növeld egyel, vagy hozd létre.
  26.      *
  27.      * Én most csak az egyszerűség kedvéért írom file-ba.
  28.      */
  29.     $fileNameHash       = md5($_REQUEST['file']);
  30.     $fileDownloadCount  = 0;
  31.  
  32.     if (file_exists(__DIR__ . DIRECTORY_SEPARATOR . "{$fileNameHash}.txt")) {
  33.         $fileDownloadCount = (int) file_get_contents(__DIR__ . DIRECTORY_SEPARATOR . "{$fileNameHash}.txt");
  34.     }
  35.  
  36.     $fileDownloadCount++;
  37.  
  38.     file_put_contents(__DIR__ . DIRECTORY_SEPARATOR . "{$fileNameHash}.txt", $fileDownloadCount);
  39.  
  40.     /**
  41.      * A header adatokat add meg a file-hoz mérten.
  42.      */
  43.     header("Cache-Control: public");
  44.     header("Content-Description: File Transfer");
  45.     header("Content-Disposition: attachment; filename=valami.zip");
  46.     header("Content-Type: application/zip");
  47.     header("Content-Transfer-Encoding: binary");
  48.  
  49.     /**
  50.      * A header meghatározza a böngészőben, hogy pontosan mi a file type-ja, és mivel ő nem tudja értelmezni, ezért triggereli a letöltést.
  51.      */
  52.     readfile($file);
  53.  
  54. } catch (\Exception $e) {
  55.     echo $e->getMessage();
  56. }
  57.  
RAW Paste Data