Проблемы с UTF-8 (Ubuntu 12.04, apache+nginx)

i7-2600k

Новичок
Здравствуйте! Скрипт загрузки файла
PHP:
header('Content-Type: text/html; charset=utf-8');
if(empty($_GET['file'])) die();

$file = $_GET['file'];

if(preg_match('#http://(.+?)#i', $file)) {
    preg_match('#http://(.+?)/(.*)#i', $file, $file);
    $file = $file[2];
}

$download_file = '';
$download_rate = 150;
if(file_exists($file) && is_file($file)) {
    // send headers
    header('Cache-control: private');
    header('Content-Type: application/octet-stream');
    header('Content-Length: '.filesize($file));
    header('Content-Disposition: attachment; filename="'.basename($file).'"');
    header('Content-Transfer-Encoding: binary');
    header('Expires: 0');
    header('Cache-Control: must-revalidate');

    flush();  
    $file = fopen($file, "r");  
    while(!feof($file)) {
        print fread($file, round($download_rate * 1024));  
        flush();
        sleep(1);  
    }  
    // close file stream
    fclose($file);}
else {
    die('Error: The file '.$file.' does not exist!');
}
по какой-то причине отдает файл с не полным названием. Вместо "Светлана Лобода - Город под запретом" выводит "Лобода - Город под запретом" и вместо "Сергей Жуков feat Михаил Жуков - Сердце" выводит "Жуков feat Михаил Жуков - Сердце". ОС Ubuntu 12.04, Apache + nginx

locale
Код:
LANG=ru_RU.UTF-8
LANGUAGE=
LC_CTYPE="ru_RU.UTF-8"
LC_NUMERIC="ru_RU.UTF-8"
LC_TIME="ru_RU.UTF-8"
LC_COLLATE="ru_RU.UTF-8"
LC_MONETARY="ru_RU.UTF-8"
LC_MESSAGES="ru_RU.UTF-8"
LC_PAPER="ru_RU.UTF-8"
LC_NAME="ru_RU.UTF-8"
LC_ADDRESS="ru_RU.UTF-8"
LC_TELEPHONE="ru_RU.UTF-8"
LC_MEASUREMENT="ru_RU.UTF-8"
LC_IDENTIFICATION="ru_RU.UTF-8"
LC_ALL=
Как не странно в консоле все выводится нормально. В интернете никакой информации по этой теме не нашел. Проблема преследует меня уже пару месяцев. Надеюсь на вашу помощь.
 
Последнее редактирование модератором:

vasinsky

Новичок
промониторь как с урла читать получается
PHP:
if(file_exists($file) && is_file($file)) {
    exit($file);
 

i7-2600k

Новичок
если убрать basename, файл качается с почти верным названием "music_Наталья Валевская - Скажи Мне Да.mp3". Кому не трудно, поправьте пожалуйста скрипт, если дело в нем, отблагодарю!
 

Welcome

Новичок
Есть такая гадкая штука с пробелами в basename... Обходили путем
Код:
end(explode('/', $filepath))
после того как нашли нечто похожее толи в симфони, толи в CI
 

fixxxer

К.О.
Партнер клуба
PHP:
$download_rate = 150;
...
    while(!feof($file)) {
        print fread($file, round($download_rate * 1024));  
        flush();
        sleep(1);  
    }
Назло маме отморожу уши. Бедный сервер ;)

Лимитирование скорости делается на уровне nginx.
 
Сверху