Задачка

Тема в разделе "PHP", создана пользователем AlexGood, 25 май 2017.

  1. AlexGood

    AlexGood

    Регистрация:
    28 ноя 2016
    Сообщения:
    254
    Симпатии:
    7
    Схема файловой структуры на сервере:

    server/

    |

    |-- docs/

    | |

    | |-- archive.zip

    |

    |-- public_html/

    |

    |-- index.php

    |

    |-- archive.php


    Домен www.example.com ведет в корень папки public_html

    Необходимо при обращении к адресу http://www.example.com/archive.php давать пользователю на скачивание файл archive.zip из папки docs

    Приведите произвольную реализацию содержимого archive.php

    Как это можно реализовать при помощи php?
     
  2. web2us

    web2us

    Регистрация:
    10 мар 2013
    Сообщения:
    18
    Симпатии:
    1
    а что мешает сделать в файле на пхп редирект на скачку
    <?php
    header('Location: /docs/ archive.zip');
    ?>
     
  3. alex_storm

    alex_storm webdev

    Регистрация:
    11 дек 2012
    Сообщения:
    1.151
    Симпатии:
    667
    Или так
    PHP:
    $document_root$_SERVER["DOCUMENT_ROOT"];
    define('DIR_DOCS',$document_root.'/docs/');
    if(isset(
    $_GET)){
     
    file_force_download(DIR_DOCS.$_GET);
    }

    function 
    file_force_download($file) {
      if (
    file_exists($file)) {
       if (
    ob_get_level()) {
         
    ob_end_clean();
       }
       
    header('Content-Description: File Transfer');
       
    header('Content-Type: application/octet-stream');
       
    header('Content-Disposition: attachment; filename=' basename($file));
       
    header('Content-Transfer-Encoding: binary');
       
    header('Expires: 0');
       
    header('Cache-Control: must-revalidate');
       
    header('Pragma: public');
       
    header('Content-Length: ' filesize($file));
       if (
    $fd fopen($file'rb')) {
         while (!
    feof($fd)) {
           print 
    fread($fd1024);
         }
         
    fclose($fd);
       }
       exit;
      }else{
    header("HTTP/1.0 404 Not Found");
    }
    }
     
    buldozer и AlexGood нравится это.