PHP realpath('./models') возвращает значение null?

Когда я пытаюсь

realpath('./')

Я получаю "D:\Projects\Tickle\public"

Но когда я пытаюсь

realpath('./models'); // or './models/'

Я получаю "" или ноль. это почему? Странно то, что когда я пытаюсь

realpath('../application/models');

Я получаю "D:\Projects\Tickle\application\models", что правильно

ОБНОВЛЕНИЕ

Моя структура каталогов выглядит следующим образом (я использую Zend Framework)

/application
    /models
    /controllers
    /views
    /configs
    bootstrap.php  <-- this is where I am

person Jiew Meng    schedule 16.12.2010    source источник
comment
Ваш текущий каталог не applications один?   -  person Your Common Sense    schedule 16.12.2010
comment
Какой у вас текущий каталог?   -  person Gumbo    schedule 16.12.2010
comment
Смотрите обновление. Я в /application/bootstrap.php   -  person Jiew Meng    schedule 16.12.2010


Ответы (2)


Согласно опубликованному вами выводу, ваша структура каталогов выглядит следующим образом:

D:\Projects\Tickle
    public
        foo.php
    application
        models

Мы находимся в foo.php. Используя realpath('./models');, вы ссылаетесь на D:\Projects\Tickle\public\models, которого не существует.

ОБНОВЛЕНИЕ Если вы хотите получить файл (относительно текущего файла), вы должны использовать что-то вроде этого:

realpath(__DIR__ . '/models');

Или даже лучше (__FILE__ — это текущий файл, в котором вы находитесь):

realpath(dirname(__FILE__) . '/models')

В Zend Framework константа APPLICATION_PATH определяется как realpath(dirname(__FILE__) . '/../application')public/index.php).

person Nedec    schedule 16.12.2010
comment
Я пропустил ту часть, где realpath('./') общедоступен! но почему? Код на самом деле находится в /application/bootstrap.php, если вы знакомы с Zend Framework. Это потому, что код запускается из /public/index.php, который вызывает bootstrap.php? с использованием realpath(__DIR__ . '/models') работает, хотя. __DIR__ не то же самое, что ./? - person Jiew Meng; 16.12.2010
comment
@jiewmeng Вы общедоступны, так как файл, который вы вызываете в браузере, — это public/index.php. Начальная загрузка просто включена в public/index.php, вы правы. Разница между вашими двумя подходами заключается в следующем: __DIR__ возвращает каталог текущего файла. (Это константа - разная в каждом включенном файле!) Когда вы используете realpath('./'), вы не используете константу, сценарий берет public/index.php (вызывается пользователем) в качестве отправной точки. Работая с Zend, вы должны всегда использовать константу APPLICATION_PATH, каталог ваших моделей будет: APPLICATION_PATH . '/models'. - person Nedec; 16.12.2010

Попробуйте выполнить следующие действия и посмотрите, не получите ли вы случайно false:

var_dump(realpath('./models'));

Если я не ошибаюсь, ваша древовидная структура показана ниже, а файл, в котором у вас есть приведенный выше код, - public, верно? В этом случае вы на самом деле пытаетесь получить реальный путь public/models.

public
    somefile.php
application
    models
person David Kuridža    schedule 16.12.2010
comment
Да, я ошибаюсь. О, и я пропустил ту часть, где realpath('./') общедоступен! но почему? Код на самом деле находится в /application/bootstrap.php, если вы знакомы с Zend Framework. Это потому, что код запускается из /public/index.php, который вызывает bootstrap.php? с использованием realpath(__DIR__ . '/models') работает, хотя. __DIR__ не то же самое, что ./? - person Jiew Meng; 16.12.2010