Не работает функция file_exists()

 
0
 
PHP
ava
Voldemar2004 | 18.03.2013, 22:43
Не работает функция file_exists(), когда она внутри другой функции:


<?php

$path = "123/5/abc/";

    $files = array();
    
    $counter = f_read_file($path, $files);
    
    for($i = 0; $i < $counter; $i++) {
        echo $counter . '<br />';
        if(file_exists($path . $files[$i])) {echo "exist: " . $path . $files[$i];}
        echo $path . $files[$i] . "<br />";
    }
    
function f_read_file($path, &$f) {
$counter = 0;
    $descr = @opendir($path);    // открыть каталог
        if ($descr) {
            chdir($path);        // сделать каталог текущим
            while ($obj = readdir($descr)) {
                if (is_file($obj) && preg_match("/.jpg/i", $obj)) {    // если это файл
                    $counter++;
                    $f[] = $obj;
                }
            }
            closedir($descr);
        }
        else exit('Не удалось открыть каталог');
return $counter;
}
    
?>


Почему так ?
Kommentare (7)
ava
Чучмек | 18.03.2013, 21:54 #
А это не связанно с вызовом chdir?
ava
Voldemar2004 | 18.03.2013, 22:04 #
Связано, если убрать chdir, то все работает:


<?php

$path = "123/5/abc/";

if(file_exists($path . "pic.jpg")) {echo "exist: " . $path . "pic.jpg";}
    
?>
ava
Fortop | 18.03.2013, 22:11 #
Ну так подумать?

И вообще, темы пошли в последнее время в этом разделе - странные.
ava
Voldemar2004 | 18.03.2013, 22:21 #
Странно, указываю конкретный путь, но все равно не отрабатывает функция file_exists, в чем может быть проблема даже не представляю


<?php

$path = "123/5/abc/";

    $files = array();
    
    $counter = f_read_file($path, $files);
    
    for($i = 0; $i < $counter; $i++) {
        echo "Количество: " . $counter . '<br />';
        if(file_exists("123/5/abc/pic.jpg")) {
            echo "exist: ";
        }
        else {
            echo "Not exist";
        }
    }
    
function f_read_file($path, &$f) {
$counter = 0;
    $descr = @opendir($path);    // открыть каталог
        if ($descr) {
            chdir($path);        // сделать каталог текущим
            while ($obj = readdir($descr)) {
                if (is_file($obj) && preg_match("/.jpg/i", $obj)) {    // если это файл
                    $counter++;
                    $f[] = $obj;
                }
            }
            closedir($descr);
        }
        else exit('Не удалось открыть каталог');
return $counter;
}
    
?>
ava
Fortop | 18.03.2013, 22:24 #

getcwd()


и смотрим есть ли вообще в текущем каталоге то, что пытаемся искать

später ergänzt:
И, да, модераторы, уберите к черту тему из этого раздела.
Вопрос для новичков.
ava
Voldemar2004 | 18.03.2013, 23:04 #
Цитата (Fortop @  18.3.2013,  23:24 findReferencedText)
и смотрим есть ли вообще в текущем каталоге то, что пытаемся искать

Есть.


<?php

$path = "123/5/abc/";

    $files = array();
    
    $counter = f_read_file($path, $files);
    
    for($i = 0; $i < $counter; $i++) {
        if(file_exists(getcwd())) {echo "exist: " . getcwd() . "<br />";}
    }
    
function f_read_file($path, &$f) {
$counter = 0;
    $descr = @opendir($path);    // открыть каталог
        if ($descr) {
            chdir($path);        // сделать каталог текущим            
            while ($obj = readdir($descr)) {
                if (is_file($obj) && preg_match("/.jpg/i", $obj)) {    // если это файл
                    $counter++;
                    $f[] = $obj;
                }
            }
            closedir($descr);
        }
        else exit('Не удалось открыть каталог');
return $counter;
}
    
?>
ava
Арантир | 19.03.2013, 01:10 #
Цитата (Voldemar2004 @  18.3.2013,  22:04 findReferencedText)
file_exists(getcwd())

Очень смешно =)

Цитата (Voldemar2004 @  18.3.2013,  21:04 findReferencedText)
Связано, если убрать chdir, то все работает:

Разве вы сам не ответили на свой вопрос?

chdir — глобальная функция, результат ее вызова не аннулируется после выхода из локальной области видимости, где она вызвана.
Лучше вообще уберите ее из функции, она не для этого предназначена, и используйте простую конкатенацию строк для получения путей.
Registrieren Sie sich oder melden Sie sich an, um schreiben zu können.
Unternehmen des Tages
Вы также можете добавить свою фирму в каталог IT-фирм, и публиковать статьи, новости, вакансии и другую информацию от имени фирмы.
Подробнее
advanced
Absenden