【发布时间】:2011-10-17 00:57:06
【问题描述】:
我正在从头开始开发一个 php MVC 框架,并且在默认 WAMP 部署的相对路径方面遇到了一个有趣的问题......当我开始在框架内编写包含和要求时,问题就出现了......
我的框架入口点位于文档根目录深处的一个文件夹中:
http://localhost/platform/index.php
当我从框架中的任何文件运行以下目录遍历代码时...
$handle = opendir('./');
while ($file = readdir($handle))
{
echo $file."<br/>";
}
...我得到相同的结果:
.
..
ABOUT_APACHE.txt
bin
cgi-bin
CHANGES.txt
conf
error
htdocs
icons
include
INSTALL.txt
lib
LICENSE.txt
logs
manual
modules
NOTICE.txt
OPENSSL-NEWS.txt
OPENSSL-README.txt
README-win32.txt
README.txt
wampserver.conf
即c:/wamp/bin/Apache2.2.17/文件夹的内容
转储 ini_get('include_path') ".;c:/php/pear" ...这很奇怪,因为它是默认的 WAMP 安装,它将 php 放在 c:/wamp/bin/php/php5.3.4 /,据我所知,没有将 PEAR 放在任何地方(我在 php5.3.4 文件夹中没有看到它!)...
第一个问题:为什么 webroot 中任何特定文件中的“./”不是指调用它的文件所在的目录?第一个问题,第二部分:为什么它总是指 wamp-deployed apache 文件夹的根目录,而不管调用文件的位置?
将文件夹的内容转储到“/”会显示:
$INPLACE.~TR
$RECYCLE.BIN
$WINDOWS.~Q
boot
bootmgr
BOOTSECT.BAK
cert.pfx
Config.Msi
Documents and Settings
DVDPATH.TXT
hiberfil.sys
HP
msdia80.dll
MSOCache
pagefile.sys
PerfLogs
Program Files
Program Files (x86)
ProgramData
Recovery
SWSetup
System Volume Information
System.sav
updatedatfix.log
Users
wamp
Windows
第二个问题 - 为什么从我的脚本打开的路径“/”指的是 C:\ 而不是文档根目录(应该是 C:\wamp\www)
最后一个问题 - 我如何配置 PHP 以确保在这些情况下我认为是预期的路径(/ => 文档根目录,./ => 引用脚本的文件夹)实际上是这些引用的路径?
我完全做错了吗?有一次我认为相对路径是参考 CALLED 脚本,或入口点的文件夹,在这种情况下是 c: net 文档似乎另有说明。 PHP.net 表示,使用相对路径(带前导句点)执行函数的 FILE 所在的任何文件夹都应该是相对路径的起始位置。在我的配置中似乎都不是这种情况......
感谢您的宝贵时间!
【问题讨论】:
-
dirname(__FILE__)会给你执行脚本所在的目录。这有帮助吗? -
@Chris :感谢您的回复,虽然这肯定会有所帮助,但为什么我的配置很古怪,并且没有像 php.net 描述的那样以及我一直期望的那样?是我做错了什么还是我未能调整的配置设置? ./ = Apache 和 / = C:\ ?!
-
BTW @Chris, dirname(FILE) 完全解决了由 ./ 引用 Apache 的安装根目录而不是当前脚本的工作目录引起的问题,因为我将其设置为名为“ROOT_PATH”的常量,并在应用程序的每个包含中使用它。但是,我仍然很困惑为什么服务器的配置表明“./”不是“脚本的当前工作目录”......我想深入了解一下。如果 ./ 真的意味着“脚本的工作目录”,我应该能够在我的脚本中使用相对链接而不必使用该常量......但它不是......
标签: php frameworks relative-path include-path