|
|
|
| Занялся движком для mp3 сайта, уже сделал навигацию по папкам, подсчет объема папок, время и т.д. Но столкнулся с пропблемой, дело в том, что если исходный файл(для скачивания) содержит пробел в названии, то путь к нему указывается только до пробела (напр. файл "track number_1.mp3", в пути к нему будет только "track".. а остальная часть теряется) Возможно ли как нибудь в принципе решить проблему или необходимо вручную переименовывать все файлы, либо писать скрипт для переименования? | |
|
|
|
|
|
|
|
для: Pit0n
(22.11.2006 в 11:54)
| | Все названия файлов, содержащие пробелы и другие недопустимые символы следует кодировать при помощи функции urlencode(). | |
|
|
|
|
|
|
|
для: cheops
(22.11.2006 в 13:16)
| | Можно небольшой примерчик? | |
|
|
|
|
|
|
|
для: Pit0n
(22.11.2006 в 13:23)
| | Можно
<?php
$name = "имя файла.mp3";
echo "<a href=".urlencode($name).">$name</a>";
?>
|
| |
|
|
|
|
|
|
|
для: cheops
(22.11.2006 в 13:25)
| | В чем проблема? Ссылка и путь вроде работает и показывает верно, но при нажатии ссылки, сервер говорит, что файл не существует. Как будто функция urlencode "портит" ссылку. Хотя вроде все правильно и смысл функции понятен. Или после передачи ссылки нужно обратно преобразовывать знак "+" на пробел? | |
|
|
|
|
|
|
|
для: Pit0n
(23.11.2006 в 13:49)
| | А ЧПУ на сайте есть? Может реврайт рубит? Или как вариант выгрузка из папки закрыта. Если есть .htacсess, то стоит его пересмотреть. | |
|
|
|
|
|
|
|
для: babilonian
(23.11.2006 в 14:03)
| | Проверяю на локалхосте без .htaccess, а если убираю фильтрацию urlencode, то закачка идет нормально, тех файлов, которые без пробелов. | |
|
|
|
|
|
|
|
для: Pit0n
(23.11.2006 в 14:08)
| | А почему в процессе загрузки не менять пробел на подчеркивание? | |
|
|
|
|
|
|
|
для: babilonian
(23.11.2006 в 14:11)
| | Хочу сделать универсальный движок для любых mp3, чтоб не менять у всех пробелы, или проще сделать скрипт для замены пробелов на подчеркивание у файлов? Ведь "urlencode" на дает качать даже файлы без пробелов, кричит что его нет | |
|
|
|
|
|
|
|
для: Pit0n
(23.11.2006 в 14:23)
| | Понятно, когда ссылка передается браузеру то в строке вместо знаков - "/" передается его код - "%2F", но это не решает проблему | |
|
|
|
|
|
|
|
для: Pit0n
(23.11.2006 в 14:26)
| | Вам предложили urlencod'ить имя файла, а вовсе даже не путь к нему. Путь, я надеюсь, у Вас без пробелов и прочей нечисти? | |
|
|
|
|
|
|
|
для: Trianon
(23.11.2006 в 14:58)
| | Само собой что путь нормальный, но ведь скрипт представленный в 4 сообщении у меня не работает, пишет туже ошибку | |
|
|
|
|
|
|
|
для: Pit0n
(23.11.2006 в 15:01)
| | как он у Вас выглядит? Полное имя файла и скрипт - применительно к нему. | |
|
|
|
|
|
|
|
для: Trianon
(23.11.2006 в 15:08)
| | Вот скрипт:
<?php
$name = "1 2.mp3";
echo "<a href=".urlencode($name).">$name</a>";
?>
а вот файл: 1 2.mp3
Файл и скрипт лежат в корне localhost | |
|
|
|
|
|
|
|
для: Pit0n
(23.11.2006 в 15:12)
| | попробуйте
<?php
$name = "1 2.mp3";
echo "<a href=\"".rawurlencode($name).\"">$name</a>";
?>
|
| |
|
|
|
|
|
|
|
для: Trianon
(24.11.2006 в 10:15)
| | Ага получилось вот таким образом:
<?php
$name = "1 2.mp3";
echo "<a href=".rawurlencode($name).">$name</a>";
?>
А как быть с кодировкой? | |
|
|
|
|
|
|
|
для: Pit0n
(24.11.2006 в 10:48)
| | как Вы получаете такое имя? Откуда вообще берется имя файла? | |
|
|
|
|
|
|
|
для: Trianon
(24.11.2006 в 10:50)
| | Сканирую директорию, названия скидиваю в массив, а затем оттуда достаю и делаю из них ссылки. Та же проблема и с директориями на русском, даже если файл на английском | |
|
|
|
|
|
|
|
для: Pit0n
(24.11.2006 в 11:11)
| | Это всё слова. Скрипт показывайте. | |
|
|
|
|
|
|
|
для: Trianon
(24.11.2006 в 11:24)
| | Вот он..
<?php
$lang = $_GET['lang']; //русские или ангийские
$lang_start = $lang;
$letter = $_GET['letter']; //какая буква
$letter_start = $letter;
$element_name = $_GET['element_name'];
if(!empty($element_name)) $letter = $letter."/".$element_name;
if(empty($lang)){echo "неверные параметры"; exit;} //проверка на верность
if(empty($letter)){echo "неверные параметры"; exit;} //проверка на верность
$path = "music/$lang/$letter"; //открываем нужную директорию
$path_1 = "music\\$lang\\$letter";
$dir_music = opendir("$path");
// записываем все элементы директории в массив
// Функция Определения размера конкретной директории с путем $path
function dir_size($path)
{
//$size = 0;
$dir = opendir($path); // открываем директорию
while(($dir_num = readdir($dir)) !== FALSE) // Считываем файлы пока не FALSE
{
$path_end = $path."/".$dir_num; // Путь до нужного файла
if($dir_num == "." || $dir_num == "..")continue; // Исключаем субдиректории
if(is_dir("$path_end")) // Если файл это папка, то рекурсивный спуск по директории
{
$size += dir_size("$path_end");
}
elseif(is_file("$path_end")) // Если файл, то считываем размер и прибавляем к общей сумме размера папки
{
$size += filesize("$path_end");
}
}
closedir($dir);
return $size; // Возращаем общий размер папки
}
//------------------------- Конец ----------------------------------------------
$start_path = getcwd(); //Путь к директории
$num_arr_1 = 0;
while(($res = readdir($dir_music)) !== FALSE)
{
$real_path ="$path/$res";
if(is_dir($real_path))
{
$size_path = dir_size("$real_path");
$is_files = 0;
}
if(is_file($real_path))
{
$size_path = filesize($real_path);
$is_files = "$path";
}
$size_path = bcDIV($size_path, 1024*1024, 2);
$houre = date(H);
$houre = $houre + 8;
$res_data = date("d-m-Y г. $houre:i м.", filectime($real_path));
$arr_music[$num_arr_1][0] = $res;
$arr_music[$num_arr_1][1] = $size_path;
$arr_music[$num_arr_1][2] = $res_data;
$arr_music[$num_arr_1][3] = $is_files;
$num_arr_1++;
continue;
}
ksort($arr_music);
$real_num = (int)count($arr_music)-1; //вычисление действительного количества папок в директории
?>
<body link="#11116F" vlink="#11116F">
<table border="1" valign="bottom" link="#11116F" vlink="#11116F">
<tr>
<td width="15" align="center"><font size="-1" face='Tahoma' color="#7979B8">№ </td>
<td width="312" align="center"><font size="-1" face='Tahoma' color="#7979B8">Группа,песня</td>
<td width="203" align="center"><font size="-1" face='Tahoma' color="#7979B8">Дата</td>
<td width="110" align="center"><font size="-1" face='Tahoma' color="#7979B8">Размер</td>
<td height="20" width="109" align="center"><font size="-1" face='Tahoma' color="#7979B8">Скачано раз..</td>
</tr>
<?php
$num_start = 1;
if($real_num == 1)echo "<tr><td> </td><td>Пусто..</td><td> </td><td> </td><td> </td></tr>";
for($i = 2; $i <= $real_num; $i++) //вывод списка папок
{
$element_name = $arr_music[$i][0]; // Элемент - название папки или файла
$element_size = $arr_music[$i][1]; // Его размер
$element_data = $arr_music[$i][2]; // Дата создания
$element_file = $arr_music[$i][3]; // Если директория, то пустой, ести файл то = 1
if(empty($element_file))
{
$color_dir = "#11116F";
echo "<tr><td align='center'><font size='-2' color='#4B4A44' face='Tahoma'>$num_start</td><td><b><font size='-1' color='$color_dir' face='Tahoma'> <a href='index.php?lang=$lang&letter=$letter&element_name=$element_name'>$element_name</b></td><td><small> Добавленo: $element_data </td><td><small> Размер - $element_size Mb </td><td> </td></small>";
}
elseif(!empty($element_file)) // !!!!!!!!! тут выводится файл и путь к нему и отображается коряво
{
$color_dir = "#C23D82";
$element_name_1 = rawurlencode($element_name);
echo "<tr><td align='center'><font size='-2' color='#4B4A44' face='Tahoma'>$num_start</td><td><b><font size='-1' color='$color_dir' face='Tahoma'> <a href='$element_file/$element_name_1'>$element_name</b></td><td><small> Добавленo: $element_data </td><td><small> Размер - $element_size Mb </td><td> </td></small>";
}
$num_start++;
}
?>
|
| |
|
|
|
|
|
|
|
для: Pit0n
(24.11.2006 в 11:36)
| | Сейчас загрузил на сервер, там все нормально отображается, получается, что мой локальный apache не правильно настроен? | |
|
|
|
|
|
|
|
для: Trianon
(24.11.2006 в 11:24)
| | Хотелось бы видеть скрипт, которым Вы укладываете файлы на сервер.
Похоже, ноги растут оттуда. | |
|
|
|
|
|
|
|
для: Trianon
(24.11.2006 в 12:35)
| | В том то все и дело, что как таковой скрипт администрирования, для закачмвания файлов на сервер еще не делал, а пользовался FTP, а точнее FlashFXP. Ну так ведь проблема то существует лишь на локальном apache, а на хостинге ее нет. Браузер тут не причем. Тогда дело в apache? | |
|
|
|
|
|
|
|
для: Trianon
(23.11.2006 в 15:08)
| | и еще. Кодировка имен совпадает с кодировкой скрипта и с умалчиваемой кодировкой apache? | |
|
|
|
|
|
|
|
для: Trianon
(23.11.2006 в 15:12)
| | По умолчанию в apache стоит стандартная кодировка windows-1251, больше кодировка нигде не меняется. | |
|
|
|
|
|
|
|
для: Pit0n
(23.11.2006 в 15:17)
| | И заливались эти файлы тоже через apache? Не через FTP? | |
|
|
|
|
|
|
|
для: Trianon
(23.11.2006 в 15:19)
| | Пока что я пробую это на локальном компьютере. Должен ли браузер сам переводить знак "плюс" в строке "путь" на "пробел". | |
|
|
|
|
|
|
|
для: Pit0n
(23.11.2006 в 15:27)
| | Допустим проблему с пробелом я решу, но что делать в корявенькой кодировкой при попытке браузером скачать файл без пробелов и прочих символов?
Вот пример ошибки, которая выводится в браузер:
Forbidden
You don't have permission to access /music/eng/a/Êîðîëü+è+Øóò+-+21+-+Ìàðèÿ.mp3 on this server. - (это файл с русскими символами и пробелами), та же ошибка если файл и без пробелов. Т.е. название файла отображается не кодом каждого символа, как на этом сайте, а корявой кирилицей
Not Found
The requested URL /baikal/music/eng/a/arriva/3.GERALD+ALBRIGHT+-+CREEPIN.mp3 was not found on this server. - (файл просто с пробелами)
Кодировка по умолчанию в apache стоит windows - 1251 | |
|
|
|