[PHP] не начинается загрузка файла

Discussion in 'PHP' started by Kandi, 10 Apr 2012.

  1. Kandi

    Kandi Member

    Joined:
    18 Nov 2009
    Messages:
    344
    Likes Received:
    17
    Reputations:
    0
    Всем прет, помогите с php разобраться, а точнее нужно сделать скачивание файла автоматический, это можно реализовать например с помощью JavaScript:
    Code:
    <script type="text/javascript">
    	var urls=["http://www.test.ru/allo.rar"];
    	document.write('<meta http-equiv="refresh" content="0;url='+urls[Math.round(Math.random()*(urls.length-1))]+'" />');
    </script>
    
    Не могу понять почему файл открывается, а не качается в браузере если, например задать в конфиге путь к файлу, а из конфига вытащить в php и вставить вместо - http://www.test.ru/allo.rar, вставить вот это <?php echo $url; ?>.
    Code:
    <script type="text/javascript">
    	var urls=["<?php echo $url; ?>"];
    	document.write('<meta http-equiv="refresh" content="0;url='+urls[Math.round(Math.random()*(urls.length-1))]+'" />');
    </script>
    
    Где $url например переменная в config.php, данный конфиг загружаю таким образом - require_once($_SERVER['DOCUMENT_ROOT'].'/config.php');

    Что не так? Подскажите как сделать правильно!?
     
  2. daniel777

    daniel777 Elder - Старейшина

    Joined:
    8 Jul 2010
    Messages:
    517
    Likes Received:
    90
    Reputations:
    37
    Мне кажется будет правильно использовать такой код:
    PHP:
    header("Content-disposition: attachment; filename=".basename($filename)."");
    readfile($filename);
    exit();
    В переменную $filename нужно передать название файла.
     
  3. Kandi

    Kandi Member

    Joined:
    18 Nov 2009
    Messages:
    344
    Likes Received:
    17
    Reputations:
    0
    Спасибо, помогло только вот такой код -
    Code:
    <?php
    	require_once($_SERVER['DOCUMENT_ROOT'].'/config.php');
    	global $PATH_FILE;
    	$filename = $_SERVER['DOCUMENT_ROOT'].'/'.$PATH_FILE;
    	header("Content-Type: ".filetype($filename));
    	header("Content-Length: ".filesize($filename));
    	header("Content-Disposition: attachment; filename=".basename($filename));
    	header("Content-type: application/force-download");
    	header("Content-type: application/octet-stream");
    	echo file_get_contents ($filename);
    ?>
    
    Только теперь страница не отображается, файл на скачку отдаёт, а страница пустая в браузере. Хотелось, чтобы пользователь видел её! и еще вопрос можно как-то организовать счетчик загрузок по скачиванию последних байт файла (например), что бы на 100% была уверенность скачиваемости файла??
     
  4. AnGeI

    AnGeI Elder - Старейшина

    Joined:
    8 Dec 2008
    Messages:
    396
    Likes Received:
    79
    Reputations:
    16
    Что-то одно.
     
  5. Kandi

    Kandi Member

    Joined:
    18 Nov 2009
    Messages:
    344
    Likes Received:
    17
    Reputations:
    0
    Да спасибо) за поправку))) Что делать с контентом страницы?
     
  6. daniel777

    daniel777 Elder - Старейшина

    Joined:
    8 Jul 2010
    Messages:
    517
    Likes Received:
    90
    Reputations:
    37
    Как вариант: include($filename);
     
    #6 daniel777, 11 Apr 2012
    Last edited: 11 Apr 2012
  7. AnGeI

    AnGeI Elder - Старейшина

    Joined:
    8 Dec 2008
    Messages:
    396
    Likes Received:
    79
    Reputations:
    16
    Контента быть не должно, иначе содержимое файла тоже в контент выведется.
     
  8. daniel777

    daniel777 Elder - Старейшина

    Joined:
    8 Jul 2010
    Messages:
    517
    Likes Received:
    90
    Reputations:
    37
    А вообще правильно будет сделать так:
    Файл 1:
    PHP:
    header('Refresh: 3; URL=dl.php');
    echo 
    file_get_contents($filename).'Скачивание начнется через 3 секунды';
    Файл 2(напр. dl.php):
    PHP:
    header("Content-disposition: attachment; filename=".basename($filename)."");
    readfile($filename);
    exit();
    Ну а название файла если надо - передавать GET или POST запросом, и соответственно не забывать о безопасности(проверять входящие данные).