2010-12-16 74 views
1

当我尝试PHP实时路径('./ models')返回“”或null?

realpath('./') 

我得到 “d:\项目\痒痒\ PUBLIC”

但是当我尝试

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

我得到 “” 或空。这是为什么?奇怪的是,当我尝试

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

我得到 “d:\项目\痒痒\程序\模型”,这是正确的

UPDATE

我的目录结构看起来像下面(我使用Zend Framework)

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

你当前的目录不是“应用程序”吗? – 2010-12-16 13:41:36

+0

你目前的目录是什么? – Gumbo 2010-12-16 13:42:58

+0

查看更新。我在/application/bootstrap.php – 2010-12-16 14:26:21

回答

3

根据您发布的输出,你的目录结构,似乎是这样的:

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

我们在foo.php。通过使用realpath('./models');您可以参考不存在的D:\Projects\Tickle\public\models

UPDATE 如果你想获得一个文件(相对于当前文件),你应该使用这样的事情:

realpath(__DIR__ . '/models'); 

甚至更​​好(__FILE__是当前文件你在) :

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

使用Zend框架,所述APPLICATION_PATH常数定义为realpath(dirname(__FILE__) . '/../application')(在public/index.php)。

+0

我错过了realpath('./')'公开的部分!但为什么?如果您熟悉Zend Framework,则代码实际上位于'/ application/bootstrap.php'中。是否因为代码开始从/public/index.php调用bootstrap.php运行?使用'realpath(__ DIR__。'/ models')'工作。 '__DIR__'与'。/'不一样吗? – 2010-12-16 14:31:49

+1

@jiewmeng由于您在浏览器中调用的文件是'public/index.php',因此您处于公开状态。bootstrap只包含在'public/index.php'中,你是对的。两种方法的区别是:'__DIR__'返回当前**文件的目录**。 (这是一个常量 - 每个包含的文件都不相同!)当您使用'realpath('./')'时,您不使用常量,脚本将'public/index.php'(由用户调用)作为开始点。使用Zend,你应该总是使用常量APPLICATION_PATH,你的模型目录是:APPLICATION_PATH。 “/ models''。 – Nedec 2010-12-16 16:44:00

2

尝试以下,看看你任何机会得到false

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

如果我没有记错的话,你的树结构如图波纹管和你有以上代码的文件是public,正确吗?在这种情况下,你实际上试图获得public/models的真实路径。

public 
    somefile.php 
application 
    models 
+0

是的,我弄错了。哦,我错过了realpath('./')'公开的部分!但为什么?如果您熟悉Zend Framework,则代码实际上位于'/ application/bootstrap.php'中。是否因为代码开始从/public/index.php调用bootstrap.php运行?使用'realpath(__ DIR__。'/ models')'工作。 '__DIR__'与'。/'不一样吗? – 2010-12-16 14:29:55