Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > PHP: Общие вопросы > file_exist не видит существующий файл


Автор: kaa 3.3.2007, 22:10
Есть код:

Код

while($m_array = mysql_fetch_row($res))
            {
                echo "del file ../".$m_array[0];
                if(!file_exists("../".$m_array[0])) echo "no";
                                                echo "<img src=../'".$m_array[0]."'>";
            }


Так вот, file_exists выдаёт что файла нет, а вслед за этим нормально выводится рисунок!!!
Во вторых, когда я вместо переменной забиваю путь файда вручную - file_exists говарит что файл есть и нормально выводится рисунок.

Притом когда подставляю путь из массива - выводится в UTF-8, а когда забиваю в ручную - в cp1251. но это ака мне кажется детали.

У кого какие-нить мнения есть по этому поводу?
Я  до сих пор в сети копаюсь - ничего найти немогу почему да отчего...

Автор: Alex13 4.3.2007, 09:12
попробуй вместо 
Код

!file_exists("../".$m_array[0])

Код

!file_exists("../'".$m_array[0]."'");


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

Автор: GZep 4.3.2007, 09:27
kaa, пользуйтесь тегами "код"!
Вохможно используется rewrite. То есть подмена путей. Например, скрипт находится в корне, хотя и вызывается как находящийся в папке.

Автор: kaa 4.3.2007, 10:42
GZep, Извиняюсь - уже исправил.

А как этот rewrite отключить/отследить? А почему он не происходит когла я путь забиваю полностью вручную?

Автор: GZep 4.3.2007, 12:51
Просто, используете ли вы файл .htaccess? Если нет, или не знаете что это такое, то rewrite у вас врядли стоит.

Попробуйте, вот так:
Код

echo _FILE_;

Должен показать путь к файлу php. Мне все-таки кажется, что тут что-то с путями не так.

Автор: kaa 4.3.2007, 14:28
не, .htccess не пользую

А код выводит '_FILE_'...

З.Ы.: А почему когда я путь ручками вбиваю то всё впорядке?

Автор: GZep 4.3.2007, 20:02
Что вы вбиваете именно и что вбивает скрипт?

Отличается ли то, что вы вбиваете и:
Код

echo "../".$m_array[0];

 smile 

Автор: S.A.P. 4.3.2007, 21:45
Код

echo realpath("../".$m_array[0]);
 посмотри что даёт.


Автор: kaa 4.3.2007, 22:40
GZep, Я вбиваю: 

Код

'../images/ware_img/GU4R4YYl3zeJBNQgnxae/Доска-для-элемента-фона.png'


В массиве все тоже самое...
Правда есть один маленький ньюансик - когда я вбиваю вручную. то всё корректно отображается в win-1251, когда подставляю из массива то для корректного отображения нужно выбрать кодировку просмотра UTF-8.



S.A.P.

как ни странно - ничего...  smile 

Кароче я савсем уже запутался.  smile 

Автор: GZep 5.3.2007, 14:20
Попробуйте:
Код

while($m_array = mysql_fetch_row($res))
            {
                echo "del file ../".$m_array[0];
                if(!file_exists("../" . urlencode($m_array[0]))) echo "no";
                                                echo "<img src=\"../" . urlencode($m_array[0]) . "\">";
            }

Автор: Powerhead 5.3.2007, 19:30
kaa, это только с кириличными именами файлов происходит? Я бы советовал от них отказаться для сохранения портирования кода.
Полагаю, что имя файла хранится в базе в утф, а файловая система утф не понимает.
Можно попробовать конвертнуть имя файла 

Код

$path = '../';
while($m_array = mysql_fetch_row($res)) {

    $name = iconv("UTF-8", "CP1251", $m_array[0]);
    $file = $path.$name;
    
    print "File: '$file'<br />";
    if(file_exists($file)) {
        print "Exists<br />";
    }
    else {
        print "No<br />";
    }
    
    print "<img src='$file' /><br />";
            
}


http://ua2.php.net/manual/ru/function.iconv.php

Автор: kaa 5.3.2007, 23:25
Powerhead
Пробовал, не помогает... Нет, не только с кирилическими - со всеми smile

Автор: Glip 6.3.2007, 00:16
http://ru.php.net/manual/en/function.file-exists.php
цитата оттуда:
Цитата

Note: The results of this function are cached. See clearstatcache() for more details.


может быть поможет?

хотя все странно это.

Автор: kaa 6.3.2007, 00:29
Powerhead, Дико извиняюсь, я вас обманул... Толькочто еще баг выловил... В общем да, неработает только с русскими - приходится конвертировать в cp1251. ТОлько вот незадача - у меня в базе всё хранится в cp1251 и 

Код

SET NAMES cp1251;


я выполняю сразу после подключения к БД.
Кстати, отчего система не поддерживает UTF-8?! Ведь клиенту всё идет именно в этой кодировке - по другому ведь кирилицу не передашь.

Автор: GZep 7.3.2007, 17:59
Почему не передашь?

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)