2014-01-21 2 views
16

Я пишу приложение PHP CLI, которое загружает файлы YAML. При попытке сделать это в пределах Xdebug сессии:xDebug weird __DIR__ константа

if (file_exists(__DIR__ . '/../../foo/bar') 
{ 
    /* ... */ 
} 

__DIR__ ВСЕГДА является xdebug:, который ВСЕГДА приводит к false от file_exists().

Есть ли работа вокруг?

+0

Вы не используете код через 'eval()' вы? – Spudley

+0

@Spudley Нет Я просто выполняю код «нормально». Когда я не использую xDebug, он работает как шарм. Но не отлаживаемое приложение не так уж и красиво :( –

+0

Хмм. Если вы бегали через eval, ответ был бы на [ответ здесь] (http://stackoverflow.com/questions/4924676/how-can-i -get-the-php-magic-constant-file-work-with-eclipse-and-pdt) (опубликовано автором xDebug). Это обязательно * звучит *, как та же проблема. – Spudley

ответ

5

$dir = __DIR__; и использовать if (file_exists($dir . '/../../foo/bar'). Он будет работать так.

+0

Это работает. Спасибо! –

+0

Это должно быть установлено как ответ! –

-4

В качестве альтернативы заменить константу __DIR__ с dirname(__FILE__) функции

if (file_exists(dirname(__FILE__) . '/../../foo/bar') 
{ 
    /* ... */ 
} 
0

Дело в том, что ваш отладчик показывает неверное значение, как DIR уже был заменен в сценарии анализатором.

Все объяснение можно найти здесь:

How can i get the PHP magic constant __FILE__ work with Eclipse and PDT

Выход вы получаете не неправильно. FILE - специальная константа, которую оценивается во время парсера.