Другие языки программирования и технологии
php отдача файлов кирилица
как можно осуществить скачивание с сервера русских файлов к примеру: буги звуки.mp3 скачивается а буги юги.mp3 не скачивается калямаля показывает и ошибка. вообще делал загрузку и отдачу файлов для себя а так как уже и народ стал пользоваться приходится модернезировать... кароче можно использовать iconv ? или не поможет? как решить проблему с кирилице отдача файлов, причом изначально файл зашифрован в url в md5 а потом гетом берет и расшифровает и уже через заголовки отдает файл... кстати говоря страница на 1251 чует моя задница в любом случае надо на utf-8 ?? заранее спасибо
тут и конверт и т. д. не поможет
пробуйте urlencode("буги юги. mp3");
пробуйте urlencode("буги юги. mp3");
скачивай в md5 формате потом сделай функцию декодировки и подгружай ее раскодированое имя переименовывай
если я правильно понял
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"] - название файла текущее
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"] - название файла текущее
Похожие вопросы
- Как на PHP получать пути к файлам из массива names в теге input при загрузке некольких файлов?
- файлы php должны иметь разрешение 557, как это понимать вообще эти строки (внутри)?
- как сделать русскую бегущую строку в файле php?
- Скажите пожалуйста как передать данные из текстового файла в массив на php
- С какого языка начинать изучения программирования Pascal/PHP/Python?
- SQL и PHP. Access denied for user 'u3464476869_vid'@'12.3.4.23' to database 'u3464476869_Hyp'
- Нужна функция на php которая будет считывать текст из файла и выводить слова которые начинаются и заканчиваются на "а"
- в файле"bigdump.php" нужно указать настройки для соединения с базой данных и кодировку. что имеется ввиду?
- Чем отличается PHP-код, необходимый для PHP-Launcher от кода для PHP Devel Studio?
- Как редактировать html из файла *.php?