Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

[PHP][file_exists] Проблема - постоянно возвращает, что файл не существует

1
27 сентября 2013 года
kot_
7.3K / / 20.01.2000
Собственно, вот и весть вопрос. ))
Не могу понять, что за херня твориться - файл реально существует и обращаюсь к нему по реальному пути, и нет ни русских букв, ни линков но факт остается:
Например
http://shs.dp.ua/loads/proekty_do_1915_goda/konyushni/konyushnya_1900_god/fasad.jpg
открывается нормально (в браузере - но мне надо полный путь), а:
/var/.../loads/proekty_do_1915_goda/konyushni/konyushnya_1900_god/fasad.jpg
выбивает ошибку - file_exists и, в частности, copy. Собственно задача - проверить есть ли файл и скопировать его куда надо.
Хотя, например opendir - все прекрасно читает. WF?
Я понимаю что проблема не в функции - но не могу понять в чем
8
27 сентября 2013 года
mfender
3.5K / / 15.06.2005
Попробуй file_exists(realpath("/var/www/shs/data/www/shs.dp.ua/loads/proekty_do_1915_goda/konyushni/konyushnya_1900_god/fasad.jpg"));
realpath все слэши должен привести в нормальное положение, или обратные слэши заэкранируй обратным слэшем. Скорее всего они есть.
Сам недавно натр....ся с этой бедой. Причём в разных сборках работает по-разному. Такое ощущение, что в PHP5.3 кто-то перекрыл чем-то эти функции.
1
27 сентября 2013 года
kot_
7.3K / / 20.01.2000
Цитата: mfender
Попробуй file_exists(realpath(/var/www/shs/data/www/shs.dp.ua/loads/proekty_do_1915_goda/konyushni/konyushnya_1900_god/fasad.jpg ));
realpath все слэши должен привести в нормальное положение, или обратные слэши заэкранируй обратным слэшем. Скорее всего они есть.
Сам недавно натр....ся с этой бедой. Причём в разных сборках работает по-разному. Такое ощущение, что в PHP5.3 кто-то перекрыл чем-то эти функции.


ок. поробую.
Но все равно фигня какая то - запустил через опендир - отработало как надо. Идиотизм.

8
27 сентября 2013 года
mfender
3.5K / / 15.06.2005
Кстати, заметил, что константа __DIR__ тоже себя ведёт дибиловато. Пришлось одному господину порчу снимать, так у него всюду эта __DIR__, которая на хостинге не работает просто. Пришлось в нескольких десятках файлов заменить её на dirname(__FILE__)
8
27 сентября 2013 года
mfender
3.5K / / 15.06.2005
Вот смотри что пишет умная книга Интернет:
Цитата:
Если файлы недоступны из-за ограничений, налагаемых безопасным режимом, то данная функция вернет FALSE. Однако, эти файлы все еще могут быть подключены, если они располагаются в каталоге safe_mode_include_dir.

© ТУТ


Что это означает, я смутно понимаю, но может у тебя как-то с этим связано?

1
27 сентября 2013 года
kot_
7.3K / / 20.01.2000
по барабану.
если открывать директорию - все отрабатывает.
Если же читать имя из файла (как собственно мне надо) - не отрабатывает. Гдето, что-то ему мешает.
1
27 сентября 2013 года
kot_
7.3K / / 20.01.2000
Цитата: mfender
Вот смотри что пишет умная книга Интернет:
Цитата:
Если файлы недоступны из-за ограничений, налагаемых безопасным режимом, то данная функция вернет FALSE. Однако, эти файлы все еще могут быть подключены, если они располагаются в каталоге safe_mode_include_dir.

© ТУТ


Что это означает, я смутно понимаю, но может у тебя как-то с этим связано?


да вроде как нет. ладно буду потом еще разбираться

1
27 сентября 2013 года
kot_
7.3K / / 20.01.2000
Тут кстати больше похоже на ньюансы связанные с юникодом - потому что в первом случае (с которым у меня ошибка), имена файлов читаються из специального файла.
А opendir - читает с файловой системы. Хотя и там и там UTF-8
8
27 сентября 2013 года
mfender
3.5K / / 15.06.2005
Абаждите, не нажимайте поперёчную кнопку © Д.Лукьянов

Имена файлов однозначно в восьмибитной кодировке. Разве нет?
1
29 сентября 2013 года
kot_
7.3K / / 20.01.2000
Цитата: mfender
Абаждите, не нажимайте поперёчную кнопку © Д.Лукьянов

Имена файлов однозначно в восьмибитной кодировке. Разве нет?


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

Код:
product:Телятник 1904 год
parentname:Коровники и телятники
parentdir:korovniki_i_telyatniki
foldername:Телятник 1904 год
folderdir:telyatnik_1904_god
filename:Боковой фасад.jpg
filebase:bokovoj_fasad.jpg
filename:План.jpg
filebase:plan.jpg
filename:Поперечный разрез.jpg
filebase:poperechnyj_razrez.jpg
filename:Попреречный фасад.jpg
filebase:poprerechnyj_fasad.jpg
где: filebase - это собственно реальное имя файла на сервере.
вобщем, одна из проблем была в том, что необходимо было после считывания обязательно выполнять trim() - по причине наличия непонятно откуда взявшихся пробелов.
Но это только одна из проблем.
Все же с UTF-8 пхп как то весьма не однозначно работает. Хотя, по идее для латиницы вообще проблем быть не должно.
Ну либо я что-то не понимаю.
326
29 сентября 2013 года
sadovoya
757 / / 19.11.2005
А непонятно откуда взявшиеся пробелы не связаны ли с символами-невидимками юникода?
1
30 сентября 2013 года
kot_
7.3K / / 20.01.2000
Цитата: sadovoya
А непонятно откуда взявшиеся пробелы не связаны ли с символами-невидимками юникода?


так вот - а как их удалить?

326
30 сентября 2013 года
sadovoya
757 / / 19.11.2005
Т.е. поправить имена файлов на серваке? Можно считать директорию с опцией показа inod-ов. Далее соответствующим инодам дать имена нормальные (в смысле те-же, но без невидимок).
Точнее, знаю, что удалять так можно, а с переименованием не сталкивался. Может еще натолкнет на мысли этот материал.
Если дело в файле с именами, то там можно невидимки укоцать с помощью hex-редактора, с опциями отображения всего печатного как простого текста (для аски такое точно есть, для юникода наверняка тоже). Все, что не текст - коцать.
53K
05 ноября 2013 года
toxinf
5 / / 20.07.2010
результат работы функции file_exists() кэшируется, попробуйте до file_exists() использовать функцию clearstatcache()


 
Код:
$file = realpath('./loads/proekty_do_1915_goda/konyushni/konyushnya_1900_god/fasad.jpg');

clearstatcache(true, $file);

if (file_exists($file)) {
  echo 'Файл существует!';
} else {
  echo 'Такого файла не существует!';
}
12
07 января 2014 года
alekciy
3.0K / / 13.12.2005
Цитата: mfender
Кстати, заметил, что константа __DIR__ тоже себя ведёт дибиловато. Пришлось одному господину порчу снимать, так у него всюду эта __DIR__, которая на хостинге не работает просто. Пришлось в нескольких десятках файлов заменить её на dirname(__FILE__)


Порча постигает юзеров гавнохостинги юзающих с php < 5.3 версией.

12
07 января 2014 года
alekciy
3.0K / / 13.12.2005
Цитата: mfender
Абаждите, не нажимайте поперёчную кнопку © Д.Лукьянов

Имена файлов однозначно в восьмибитной кодировке. Разве нет?


Нет. В linux-ах имена файлов есть байт последовательность обычная и может быть записана в любой кодировке или без оной вовсе. Ибо определил создатель inode-ы и знал он, что это хорошо.

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог