Другие языки программирования и технологии

php отдача файлов кирилица

как можно осуществить скачивание с сервера русских файлов к примеру: буги звуки.mp3 скачивается а буги юги.mp3 не скачивается калямаля показывает и ошибка. вообще делал загрузку и отдачу файлов для себя а так как уже и народ стал пользоваться приходится модернезировать... кароче можно использовать iconv ? или не поможет? как решить проблему с кирилице отдача файлов, причом изначально файл зашифрован в url в md5 а потом гетом берет и расшифровает и уже через заголовки отдает файл... кстати говоря страница на 1251 чует моя задница в любом случае надо на utf-8 ?? заранее спасибо
тут и конверт и т. д. не поможет
пробуйте urlencode("буги юги. mp3");
Сэмик Учится
Сэмик Учится
41 003
Лучший ответ
скачивай в md5 формате потом сделай функцию декодировки и подгружай ее раскодированое имя переименовывай
Сергей Кощеев
Сергей Кощеев
3 323
если я правильно понял

function sup_download($arFile)
{
$filename = $_SERVER["DOCUMENT_ROOT"].$arFile["SRC"];
$filesize = filesize($filename);

$name = (strlen($arFile["ORIGINAL_NAME"])>0 ? $arFile["ORIGINAL_NAME"] : $arFile["FILE_NAME"]);
if (strlen($arFile["EXTENSION_SUFFIX"])>0) :
$suffix_length = strlen($arFile["EXTENSION_SUFFIX"]);
$name = substr($name, 0, strlen($name)-$suffix_length);
endif;

$sapi = (stristr(php_sapi_name(), "cgi") !== false? "cgi":"");
$f = fopen($filename, "rb");
$cur_pos = 0;
$size = $filesize-1;

$p = strpos($_SERVER["HTTP_RANGE"], "=");
if(intval($p)>0)
{
$bytes = substr($_SERVER["HTTP_RANGE"], $p+1);
$p = strpos($bytes, "-");
if($p!==false)
{
$cur_pos = IntVal(substr($bytes, 0, $p));
$size = IntVal(substr($bytes, $p+1));
if ($size<=0) $size = $filesize - 1;
if ($cur_pos>$size)
{
$cur_pos = 0;
$size = $filesize - 1;
}
fseek($f, $cur_pos);
}
}

if(intval($cur_pos)>0 && $_SERVER["SERVER_PROTOCOL"] == "HTTP/1.1")
{
if($sapi=="cgi")
header("Status: 206 Partial Content");
else
header("HTTP/1.1 206 Partial Content");
}
else
{
session_cache_limiter('');
session_start();
ob_end_clean();
session_write_close();
if($sapi=="cgi")
header("Status: 200 OK");
else
header($_SERVER["SERVER_PROTOCOL"]." 200 OK");
}

header("Content-Type: application/force-download; name=\"".$name."\"");
header("Content-Disposition: attachment; filename=\"".$name."\"");
header("Content-Transfer-Encoding: binary");
header("Content-Length: ".($size-$cur_pos+1));
header("Accept-Ranges: bytes");
header("Content-Range: bytes ".$cur_pos."-".$size."/".$filesize);
header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
header("Expires: 0");
header("Pragma: public");

$str = "";
while($cur_pos<=$size)
{
$bufsize = 32768;
if($bufsize+$cur_pos>$size)
$bufsize = $size - $cur_pos + 1;
$cur_pos += $bufsize;
$p = fread($f, $bufsize);
echo $p;
flush();
}
fclose ($f);
die();
}

Передаются следующие параметры
$arFile["SRC"] - путь к файлу
$arFile["ORIGINAL_NAME"] - название файла кирилицрй
$arFile["FILE_NAME"] - название файла текущее