Кирилица и пробелы. В пути до файла

Piombo

Создатель
Регистрация
20 Мар 2013
Сообщения
41
Реакции
4
Добрый день!

Не удается передать кодированный УРЛ
Код:
echo '<a href="download2.php?file=', urlencode("D:/тест б/по русски.docx"), '">urlencode</a>';


download2.php:
Код:
$file = $_GET['file'];
echo urldecode ($file);  // тут я получаю урл в кирилице
echo ("<br/>");
echo ($file); // тут я получаю урл в ТОЖЕ в кирилице - а должен быть кодированный

почему так? Спасибо!

ЗЫ. мне это нужно для организации локального сайта(denwer+joomla), со страниц которого нужно скачивать .docx файлы которые расположены к кириллических каталогах.

Если каталог и .docx файл назван по латинице - от все работает и скачивание происходит.
 
Тебе не нужна латиница в URL, так и не делай её туда :)
Используй base64 к примеру - это защитит от кривоты браузера...

P.s.
PHP:
download2.php?file=', urlencode("C:/windows/system32/drivers/etc/hosts")
Намёк понял? Нельзя давать пользователям самим указывать путь до файла. Храни пути в БД, а передавай только идентификатор.
в противном случае я солью всю твою Joomla и БД через этот download.php :)

P.p.s. ограничение пути тоже не вариант: /uploads/../../config/config.php :)
 
Спасибо за ответ. Да намек я понял, но мне НУЖНА кирилица в урл. И сайт локальный и работать будет только в локальной сети.

Может проблема и не в этом. Глобально, мне был хотелось скачивать .docx файлы со страниц локального сайта (denwer, Windows)

Код:
<a href="download.php?file=D:/тест б/по русски.docx">Русский путь</a> |
<a href="download.php?file=D:/test/test.docx">Eng путь</a> |


download.php:
Код:
$file = $_GET['file'];
  if (ob_get_level()) {
  ob_end_clean();
  }
  header('Content-Description: File Transfer');
  header('Content-Type: text/html; charset=utf-8');
  header('Content-Type: application/octet-stream');
  header('Content-Disposition: attachment; filename=' . basename($file));
  header('Content-Transfer-Encoding: binary');
  header('Expires: 0');
  header('Cache-Control: must-revalidate');
  header('Pragma: public');
  header('Content-Length: ' . filesize($file));
  readfile($file);
exit;

D:/test/test.docx - скачивается нормально
D:/тест б/по русски.docx - нет - вместо него скачивается файл который содержит следующие ошибки:
Код:
Warning: filesize() [function.filesize]: stat failed for D:/тест б/по русски.docx in X:\home\localhost\www\local\url\download.php on line 16

Warning: Cannot modify header information - headers already sent by (output started at X:\home\localhost\www\local\url\download.php:16) in X:\home\localhost\www\local\url\download.php on line 16

Warning: readfile(D:/тест б/по русски.docx) [function.readfile]: failed to open stream: No such file or directory in X:\home\localhost\www\local\url\download.php on line 17
 
Последнее редактирование:
Назад
Сверху