Пробелы в названии нарушают загрузку?


Хорошо, у меня есть этот код, который позволит пользователю загрузить песню

$file = DIR_DOWNLOAD . $download_info->row['filename'];
$mask = basename($download_info->row['mask']);
$mime = 'application/octet-stream';
$encoding = 'binary';

if (!headers_sent()) {
if (file_exists($file)) {
    header('Pragma: public');
    header('Expires: 0');
    header('Content-Description: File Transfer');
    header('Content-Type: ' . $mime);
    header('Content-Transfer-Encoding: ' . $encoding);
    header('Content-Disposition: attachment; filename=' . ($mask ? $mask : basename($file)));
    header('Content-Length: ' . filesize($file));
    $file = readfile($file, 'rb');

Проблема в том, что если в песне есть пробел, например sinsita happy 1 SONIFI.mp3, пользователь загрузит только текстовый файл с именем sinsita...любые идеи, как исправить это поведение

Author: Matt Elhotiby, 2011-06-29

1 answers

Вы должны указать имя файла в расположении содержимого:

header('Content-Disposition: attachment; filename="' . ($mask ? $mask : basename($file)) . '"');

Редактировать: Теперь это также означает, что если имя файла содержит кавычку; тогда вам нужно избежать этой кавычки. Так что на самом деле ваш код сейчас выглядит так:

header('Content-Disposition: attachment; filename="' . str_replace('"', '\\"', ($mask ? $mask : basename($file))) . '"');
 11
Author: vcsjones, 2011-06-29 03:15:37