Помогите с ссылками на файл Генерация ссылок

mag_num83

Новичок
Друзья , впервые задаю тут вопрос, поэтому не пинайте...помогите, уже устал ковырять !
на сайт добавил код : при загрузке страницы осуществляется поиск файлов в конкретной папке и если файлы с такими именами существуют, то генерировать на них ссылку . дело в том что файлы со смешанными именами: eng+русские.xls. Чисто с английскими работают, а со смешанными именами -ссылки не работают, хотя файлы код находит и те и те. Точнее ссылки создаются , но которые содержат русские символы и пробелы не работают (404 ошибка) Ссылки только с энглишом качают файлы без проблем
вот код:
<?php
$filename = "/general/".$this->category->name.".xls";
$filename = iconv("UTF-8", "windows-1251", $filename);
$file = @fopen($filename, 'r');
$filenamecode=iconv("windows-1251", "UTF-8",
$filename);//$filenamecode=rawurlencode($filenamecode);
if ($file)
{//Файл найден
echo '<a href="'.$filenamecode.'">тест '.$filenamecode.'</a><br/>';
}
else
{//файл не найден
echo "файл .$filename не найден";

} ?>
 

AnrDaemon

Продвинутый новичок
Начните с того, что определитесь, где у вас какая кодировка.
 

c0dex

web.dev 2002-...
Команда форума
Партнер клуба
Вообще хранить в файловой системе файлы надо с нормальными именами (латиница), без пробелов, говна и прочего. А вот в базе уже иметь, что душеньке угодно.
Берем список с базы > читаем обычные файлы > отдаем их с нужными именами.

Сейчас у тебя не хватает функции, которая подготовит название к выводу (urlencode).
 

полудух

Итсист

mag_num83

Новичок
Сейчас у тебя не хватает функции, которая подготовит название к выводу (urlencode).
Уже пробовал и с ней ...
в моем коде видно : //$filenamecode=rawurlencode($filenamecode); это не помогло, потом закоментил
 

c0dex

web.dev 2002-...
Команда форума
Партнер клуба
Ну если пробовал, то ок...
 

mag_num83

Новичок
Берем список с базы > читаем обычные файлы > отдаем их с нужными именами.
Файлы в папке лежат, если я их переименую, то у меня не будет работать первая часть кода, поиск файла с нужным именем
 

c0dex

web.dev 2002-...
Команда форума
Партнер клуба
Почему не будет, будет все работать, просто искать ты будешь по базе, а выдавать уже потом с файловой системы. Но база должна быть с файловой системой синхронизирована.

Весь код же пара строчек.

PHP:
$fileLocation = "/general/" . $this->category->name . ".xls";
if (file_exists($fileLocation)) {//Файл найден
    echo '<a href=/general/' . rawurlencode($this->category->name). '.xls>тест ' . $fileLocation . '</a><br/>';
} else {//файл не найден
    echo "файл .$fileLocation не найден";
}
PS: там кавычки в ссылке сам проставишь
 
Последнее редактирование:

mag_num83

Новичок
c0dex спасибо!
проверил, но вот что "/general/SDI+Питание.xls не найден" хотя файл там ! жаль
 

c0dex

web.dev 2002-...
Команда форума
Партнер клуба
Наврал я тебе малость, хотя тестовый код у меня работает, смотри внимательно, что лежит в $this->category->name и что приходит в file_exists(), дальше там должен быть нормальный путь к файлу и rawurlencode
 

mag_num83

Новичок
увидел еще одну штуку что файлы у меня лежат в папке /general/ вот в таком виде : SDI+�������.xls я думю в этом может быть подвох....хотя при закачкке через Total они нормальные имена отображают
 

mag_num83

Новичок
Если бы вы сразу начали с разбоки моего вопроса, а не отмахивались
....я рад любой помощи и подсказке в этом вопросе, всю инфу принимаю....спасибо всем кто учавствует
вот локали сервера:

/home/perimetr$ locale -a | grep ru
ru_RU.CP1251
ru_RU.CP866
ru_RU.ISO8859-5
ru_RU.KOI8-R
ru_RU.UTF-8
 

mag_num83

Новичок
Друзья спасибо вопрос решен... c0dex ваш код помог минимизировать мой! Плюс по советам участников, проверил все кодировки и дело сдвинулось
 
Сверху