在PHP中正确导航相对本地路径

时间:2009-12-17 09:02:50

标签: php apache lamp

我在使用getimagesize功能时遇到了麻烦。我正在从/item/ajax/image.php相对于域的HTTP根进行函数调用。我正在尝试将图像的尺寸存储在/portfolio/15/image.jpg。根据我的理解,the function将文件名作为参数,所以我尝试了以下内容:

getimagesize('/portfolio/15/image.jpg')

getimagesize('../../portfolio/15/image.jpg')

但他们都只是抛出PHP错误。

4 个答案:

答案 0 :(得分:4)

相对路径始终从执行的文件开始,这很可能是index.php。对于包含的文件也是如此。这意味着在项目中的任何文件中,相对路径从index.php开始。 (除了chdir()之前完成)

我认为拥有像"../../file.ext"之类的路径是非常糟糕的代码。定义一个具有应用程序完整路径的常量(例如:$_SERVER['DOCUMENT_ROOT'])并将其添加到您正在使用的任何路径中。

示例:

# somewhere in your index.php
define('ROOT_PATH', $_SERVER['DOCUMENT_ROOT']);

# in any included file
$my_path = ROOT_PATH."/portfolio/14/image.jpg"

这是 imho 定义路径最干净,最易读的方法。

答案 1 :(得分:3)

尝试在路径下面添加前缀:

 $_SERVER['DOCUMENT_ROOT']

答案 2 :(得分:1)

在PHP中,“/”与Apache“/”(Web根目录)不同。在PHP中,“/”表示系统根目录。您应该使用相对于PHP脚本位置的路径(如果您的脚本和'portfolio'文件夹位于同一位置,则为'portfolio / 15 / image.jpg')

答案 3 :(得分:0)

您输入的文件名与http根目录无关,但应该是Web服务器文件系统中的现有路径。

要查看出现了什么问题,您可以输入:

realpath('../../portfolio/15/image.jpg')

查看最终的目录。

或使用:

imagesize(dirname(__FILE__) . '/../../portfolio/15/image.jpg')

获取完整的目录资格。

作为替代方案,您可以使用网址,但是您应该指定完整的网址:

getimagesize('http://yoursite.com/portfolio/15/image.jpg')

然而,这是一个较慢的选择。