php is_dir возвращает true для несуществующей папки - PullRequest
1 голос
/ 09 сентября 2008

Кто-нибудь сталкивался с этой странностью?

Я проверяю наличие нескольких каталогов в одном из моих модульных тестов. is_dir сообщает true (1), несмотря на то, что папка не существовала на момент ее вызова. Код выглядит следующим образом (с несколькими посторонними промежуточными переменными для упрощения отладки):

foreach($userfolders as $uf) {
    $uf = sprintf($uf, $user_id);
    $uf = ltrim($uf,'/');
    $path = trim($base . '/' . $uf);

    $res = is_dir($path); //returns false except last time returns 1
    $this->assertFalse($res, $path);
}

Машина под управлением Ubuntu Linux 8.04 с PHP версии 5.2.4-2ubuntu5.3

Вещи, которые я проверил:

 - Paths are full paths
 - The same thing happens on two separate machines (both running Ubuntu)
 - I have stepped through line by line in a debugger
 - Paths genuinely don't exist at the point where is_dir is called
 - While the code is paused on this line, I can actually drop to a shell and run 

интерактивный интерпретатор PHP и получить правильный результат - Все пути ХОРОШИЕ под 256 символов - Я не могу представить проблему с разрешениями, поскольку папка не существует! Родительская папка не может вызывать проблемы с разрешениями, так как другие папки в цикле правильно отображаются как отсутствующие.

Комментарии к документации по PHP указывают на странную проблему с is_dir, но не на эту конкретную.

Я не публикую это как «пожалуйста, помогите мне исправить», но в надежде, что кто-то, столкнувшийся с тем же самым, сможет найти здесь и , надеюсь, ответ от кого-то еще, кто видел это! *

Ответы [ 3 ]

3 голосов
/ 09 сентября 2008

Не думаю, что это вызовет вашу проблему, но $ path имеет косую черту, правильно?

1 голос
/ 09 сентября 2008

Для чего стоит, is_readable можно использовать как обходной путь.

0 голосов
/ 09 сентября 2008
$path = trim($base . '/' . $uf);

Это может быть причиной. Я предполагаю, что $ base - это какая-то корневая папка, которую вы ищете, поэтому если $ uf - это что-то вроде '', '.' Или '../', это может вернуть true. Нам нужно узнать, какие значения вы используете в вашем foreach, чтобы узнать что-то еще.

[EDIT]

Выполнение еще одного взгляда на приведенный выше код прекрасно работает на OpenBSD 4.3 с PHP 5.2.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...