Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В. Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В. PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: is_dir не видит папку
 
 автор: starpom   (25.10.2010 в 12:43)   письмо автору
 
 

Такая штука, что если путь к папке содержит директории с названием на русском языке, то
is_dir папку не видит, переименовываю на english - видит, этот же скрипт у меня уже работал нормально на русском, правда под window-1251, а сейчас пробую под UTF-8, может в этом причина?

  Ответить  
 
 автор: .....   (25.10.2010 в 13:27)
 
   для: starpom   (25.10.2010 в 12:43)
 

>под UTF-8

всмысле utf-8 кодировка имён в файловой системе? или код скрипта в utf-8?
пробуйте с iconv() перекодировать строку пути, передаваемую функциям, в кодировку файловой системы.

  Ответить  
 
 автор: starpom   (25.10.2010 в 14:34)   письмо автору
 
   для: .....   (25.10.2010 в 13:27)
 

Кодировка сайта , я так понимаю код скрипта в utf-8
Попробовал так:
$dir = iconv('window-1251','UTF-8','../foto/мои/1/folder');

Получил:
Wrong charset, conversion from `WINDOW-1251' to `UTF-8' is not allowed in
А если так:
$dir = '../foto/my/1/folder';

то работает
Сделал так :
$dir = iconv('CP1251','UTF-8','../foto/мои/1/folder');

Ошибки нет, но директория не читаеться как и раньше

  Ответить  
 
 автор: .....   (25.10.2010 в 15:33)
 
   для: starpom   (25.10.2010 в 14:34)
 

попробуйте вместо 'windows-1251' --> 'cp1251'

  Ответить  
 
 автор: .....   (25.10.2010 в 15:34)
 
   для: .....   (25.10.2010 в 15:33)
 

или кодировки местами наоборот :)

  Ответить  
 
 автор: starpom   (25.10.2010 в 15:56)   письмо автору
 
   для: .....   (25.10.2010 в 15:34)
 

$dir = iconv('cp1251','UTF-8','../skins/images/foto/Печерский/1/folder');

возвращает:
../skins/images/foto/Печерский/1/folder

$dir = iconv('UTF-8','cp1251','../skins/images/foto/Печерский/1/folder');

возвращает:
./skins/images/foto/���������/1/folder
вместо &#65533 идут пустые квадратики, а при копипасте они преобразовались в такие
наборы символов

  Ответить  
 
 автор: Trianon   (25.10.2010 в 16:20)   письмо автору
 
   для: starpom   (25.10.2010 в 15:56)
 

а я бы, для начала, вывел содержимое каталога средствами php.
как минимум - гадать не пришлось бы.
Нет такого имени window-1251 ... во всяком случае, реди стандартных.

  Ответить  
 
 автор: starpom   (25.10.2010 в 16:34)   письмо автору
 
   для: Trianon   (25.10.2010 в 16:20)
 

не понял, что значит вывел содержимое каталога средствами php.
Я вывел, но мне для этого приходиться переименовывать папки по всему пути на англ. и соответсвенно прописывать путь с англ. папками и каталог чудесно выводиться, а вот если имена папок на русском, то не читает скрипт директорию, вот я и не могу понять почему. А понять надо , так как надо использовать папки с русскими названиями

  Ответить  
 
 автор: Trianon   (25.10.2010 в 16:50)   письмо автору
 
   для: starpom   (25.10.2010 в 16:34)
 

Выведя (получив) имя априори известного элемента каталога, мы сразу определяем, в какой кодировке представляет имена файловая система.
И соответственно, далее уже, при обращении к соответствующим функциям, имена преобразуем при необходимости в эту самую кодировку.

  Ответить  
 
 автор: .....   (25.10.2010 в 16:31)
 
   для: starpom   (25.10.2010 в 15:56)
 

так и должно быть :)
is_dir() должна принимать стоку из последовательности байтов которая и есть путь к файлу.

Выводится в браузер тоже просто последовательность байтов, просто браузер интерпритирует байты соответственно кодировке отображения страницы. И даже замалчивает что например байт "я" в кодировке cp1251 вообще не может представлять часть текста в кодировке utf-8.

Иногда можно просто сразу получать в скрипте имена в кодировке файловой системы, но тогда iconv() нужна если нужно ещё и выводить на страницы с другой кодировкой.

  Ответить  
 
 автор: starpom   (25.10.2010 в 16:46)   письмо автору
 
   для: .....   (25.10.2010 в 16:31)
 

Если можно попроще , что сделать.

$dir = iconv('cp1251','UTF-8','../skins/images/foto/Печерский/1/folder');


Вот этот вариант уже привел меня в нужную папку, но выводит он не фотки, а какие-то дефолтные
браузерные приколы, которые сигналят , что это фотка. Причем в нужном количестве (тоесть мы в нужной папке), но при Ctrl+U наблюдаеться адресс такого вида:

<img src="../skins/images/flatsfoto/&#65533;&#65533;&#65533;&#65533;&#65533;&#65533;&#65533;&#65533;&#65533;/1/Raevskogo112r780e/4.jpg">

  Ответить  
 
 автор: .....   (25.10.2010 в 19:45)
 
   для: starpom   (25.10.2010 в 16:46)
 

вот здесь даже точно не скажу :)
значение неанглийских букв в аттрибутах src нужно rawurlencode'ировать, вопрос в какой кодировке их лучше вписывать для правильного кросс-понимания браузерами. и сервером который потом будет обрабатывать такие запросы

  Ответить  
 
 автор: .....   (25.10.2010 в 19:51)
 
   для: .....   (25.10.2010 в 19:45)
 

опера + локальный apache (windows) у меня понимает
как <a href="%d1%88%d0%bf%d0%be%d1%80%d0%b0.doc">шпора.doc</a>
так и <a href="шпора.doc">шпора.doc</a>
(страница в utf-8 )

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования