We launched new forums in March 2019—join us there. In a hurry for help with your website? Get Help Now!
    • 5666
    • 12 Posts
    Здравствуйте!

    Задача следующая — необходимо организовать на сайте защищенный обмен файлами, т.е. отдавать на загрузку файлы определенной web группе. Решение я знаю только одно отдавать файлы через php скрипт. Если написать php скрипт что-то типа:
    <?php
    $realFilename='/home/test/public_html/test/test.swf'
    header('Pragma:no-cache');    
    header('Content-Type: '   . 'application/x-shockwave-flash');
    header('Last-Modified: '  . date('r', filemtime($realFilename)));
    header("Accept-Ranges: bytes");
    header('Content-Length: ' . filesize($realFilename));
    header('Content-Disposition: attachment; filename="' . 'test.swf' . '"');
    $fileHandle = fopen($realFilename, 'rb');
    fpassthru($fileHandle);
    fclose($fileHandle);
    ?>
    

    все работает как и положено.

    Добавил это код в сниппет. Сниппет вписал на страницу. У страницы отменил кеширование, поиск и «Местонахождение содержимого» поставил «Прикрепленное».
    Стал пробовать — файлы качаются «битые».
    Для начала я стал биться с правильными http заголовками так как document.parser.class.inc.php их переписывает. Поправил, но все равно файлы скачиваются некорректно.
    Смотрю битый скаченный файл и сравниваю с оригиналом — файл начинает «расползаться» после символов [+ — знакомая комбинация символов:)
    Размышляю дальше — Modx подключает множество файлов и любой перевод строки вне php кода тоже может испортить файл выдав в поток \n.

    Собственно вопрос в следующем кто-нибудь делал подобную реализацию на modx?
    Может я иду не в том направлении?

    Установлена Modx Evolution 1.0.5
      • 785
      • 2,113 Posts
      Делал так (присвоение некоторых переменных в другом фрагменте):
      	if(ini_get('zlib.output_compression')) ini_set('zlib.output_compression', 'Off');
      	header ("HTTP/1.1 200 OK");
      	header ("Date: " . getGMTDateTime ());
      	header ("Expires: Thu, 19 Nov 1981 08:52:00 GMT");
      	header ("Last-Modified: " . getGMTDateTime (filemtime($filepath)) );
      	header ("Cache-Control: None");
      	header ("Pragma: no-cache");
      	header ("Accept-Ranges: bytes");
      	header ('Content-Disposition: attachment; filename="'.$filename.'"');
      	header ("Content-Type: " . $ContentType);
              header ("Content-Transfer-Encoding: binary");  
      	header ("Content-Length: " . filesize($filepath));
      	header ("Proxy-Connection: close");
      	readfile($filepath);
              exit;
      Ключевое место: exit;
        Создание сайтов на MODx, поддержка сайтов, поисковая оптимизация, программирование, копирайтинг
        Статьи о MODx, регулярно новые публикации
        • 5666
        • 12 Posts
        Большое спасибо. Все отлично заработало.