Не нравятся результаты поиска? Попробуйте другой поиск!
DLE FAQ » Все вопросы » Общие вопросы » Почему скачиваются пустые файлы?

Почему скачиваются пустые файлы?


     02.10.2015    Все вопросы » Общие вопросы    7339

вопрос
Не понятно почему. Может было у кого такое? Один файл из 10-20 не знаю, скачивается пустой, название всё нормально прописывается (название трека.mp3), а весит 0 байт. Ссылка скачивания примерно такая.
<a href="/engine/download.php?id={track_id}">Скачать</a>

В чем может быть дело?
В плеере играет. Файл существует, вес нормальный, а скачивается 0 байт.

Ответа пока нет


4 комментария

vitnet
PHP-developer

vitnet - 2 октября 2015 09:35 -

Наличие файла на сервере проверяли?

dominika
Юзер

dominika - 2 октября 2015 09:36 -

Да конечно! Он же в плеере на сайте воспроизводится

dominika
Юзер

dominika - 2 октября 2015 14:00 -

vitnet Я тут позаимствовал твой код из пастебина, и с ним все стало скачиваться, я только немного переделал имя файла, всё теперь чётко работает. Посмотри код, может знаешь почему с оригинальным файлом не работало, в чём разница?
<?php
/*================================
Быстрое скачивание файла
---------------------------------
Пример: download.php?url=ссылка
---------------------------------
*/

@error_reporting ( E_ALL ^ E_NOTICE );
@ini_set ( 'display_errors', true );
@ini_set ( 'html_errors', false );
@ini_set ( 'error_reporting', E_ALL ^ E_NOTICE );
@ini_set ( 'max_execution_time', 600);


$f_mess = 'Неверная ссылка на файл, пожалуйста сообщите об ошибке администратору портала.'; # Текст, который будет показан в случае, если ссылка кривая.
$d_name = ' [сайт]';

## Разрешенные форматы, ключ - форма, значение - mine тип, если не знаете оставьте пустым.
$FORMATI = array(
    'zip' => 'application/zip',
    'rar' => '',
    'jpg' => 'image/jpg',
    'jpeg' => 'image/jpg',
    'png' => 'image/png',
    'gif' => 'image/gif',
    'bmp' => 'image/bmp',
    'mp3' => 'audio/mp3',
    'psd' => '',
    'torrent' => '',
);
## Парсер
function curl_redir_exec($ch) {
    static $curl_loops = 0;
    static $curl_max_loops = 20;
    if( $curl_loops >= $curl_max_loops ) {  
        $curl_loops = 0;
        return false;  
    }
    curl_setopt($ch, CURLOPT_HEADER, true);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10.6; ru; rv:1.9.2.4) Gecko/20100611 Firefox/3.6.4");
    
    $data = curl_exec($ch);
    list($header) = explode("\n\n", $data);
    $http_code = curl_getinfo($ch, CURLINFO_HTTP_CODE);
    
    if( $http_code == 301 || $http_code == 302 ) {
        $matches = array();
        preg_match('#Location:(.*?)\n#', $header, $matches);
        $url = @parse_url(trim($matches[1]));
        if( !$url ) {
            $curl_loops = 0;  
            return $data;  
        }
        $last_url = parse_url(curl_getinfo($ch, CURLINFO_EFFECTIVE_URL));
        if(!isset($url['scheme'])) $url['scheme'] = $last_url['scheme'];  
        if(!isset($url['host'])) $url['host'] = $last_url['host'];  
        if(!isset($url['path'])) $url['path'] = $last_url['path'];
        
        $new_url = $url['scheme'] . '://' . $url['host'] . $url['path'];
        
        if( isset($url['query']) ) $new_url = $new_url . '?' . $url['query'];
        curl_setopt($ch, CURLOPT_URL, $new_url);
        curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10.6; ru; rv:1.9.2.4) Gecko/20100611 Firefox/3.6.4");
        $curl_loops++;
        return curl_redir_exec($ch);
    } else {
        $curl_loops = 0;
        curl_setopt($ch, CURLOPT_HEADER, false);
        return $data;  
    }
}

## Проверки
if( empty($_REQUEST['url']) ) {
    die("Not valid URL");
}

if (!empty($_GET['f'])) {
    $_f = true;
}
## Имя файла
if (!empty($_GET['name'])) {
    $NAME = $_GET['name'];
} else {
    $NAME = $c_name;
}
## Формат файла
if (isset($_GET['f'])) {
    $gf = strtolower(addslashes(stripslashes($_GET['f'])));
} else {
    $gf = false;
}
$T = explode('.', $_GET['url']);
$C = count($T) - 1;
$f = strtolower($T[$C]);


if( $_REQUEST['url'] ) {
    ## Получаем данные
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $_REQUEST['url']);
    curl_redir_exec($ch);
    $return = curl_exec($ch);

    if( $return ) {
        header( $_SERVER["SERVER_PROTOCOL"] . " 200 OK" );
        header( "Pragma: public" );
        header( "Expires: 0" );
        header( "Cache-Control: must-revalidate, post-check=0, pre-check=0" );
        header( "Cache-Control: private", false );
        header( "Content-Type: application/force-download" );
        header( "Content-Transfer-Encoding: binary" );
        header("Content-Disposition: attachment; filename=\"" . basename($NAME . $d_name) . "." . $f . "\";" );
        header( "Content-Length: " . strlen($return) );
        header( "Connection: close" );
        flush();
        
        echo $return;

    } else {
        echo $f_mess;
    }
} else {
    echo $f_mess;
}
// THE END :)
?>

dominika
Юзер

dominika - 3 октября 2015 15:34 -

почему, если в названии файла есть знак
&
то он и после него название не выводится?

Чтобы комментировать - войдите или зарегистрируйтесь на сайте

Похожие вопросы

наверх