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

在PHP中正确导航相对本地路径,php,apache,lamp,Php,Apache,Lamp,我在使用getimagesize函数时遇到了问题。我从/item/ajax/image.php相对于域的HTTP根进行函数调用。我试图获取存储在/portfolio/15/image.jpg中的图像的尺寸。据我所知,将文件名作为参数,因此我尝试了以下方法: getimagesize('/portfolio/15/image.jpg') 及 但它们都只是抛出了PHP错误。请尝试在下面的路径前加前缀: $_SERVER['DOCUMENT_ROOT'] 输入的文件名与http根目录无关,但应该

我在使用
getimagesize
函数时遇到了问题。我从
/item/ajax/image.php
相对于域的HTTP根进行函数调用。我试图获取存储在
/portfolio/15/image.jpg
中的图像的尺寸。据我所知,将文件名作为参数,因此我尝试了以下方法:

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


但它们都只是抛出了PHP错误。

请尝试在下面的路径前加前缀:

 $_SERVER['DOCUMENT_ROOT']

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

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

realpath('../../portfolio/15/image.jpg')
查看最终的目录

或使用:

imagesize(dirname(__FILE__) . '/../../portfolio/15/image.jpg')
以获得完整的目录资格

您也可以使用网址,但应指定完整的url:

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

但是,这是一个较慢的选项。

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

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

我认为像
“../../file.ext”
之类的路径是非常糟糕的代码。定义一个常量,该常量具有应用程序的完整路径(例如:
$\u SERVER['DOCUMENT\u ROOT']
),并将其添加到您正在使用的任何路径之前

例如:

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

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

这是定义路径的最干净、最可读的方法。

相对路径将与您正在执行的当前PHP脚本相关,而不是与服务器的文档根相关。我通常尝试引用具有绝对路径的文件。(使用配置文件设置基本目录)“/portfolio/15/image.jpg”不是相对路径。它是绝对的,因为它以“/”开头,从根开始。
# somewhere in your index.php
define('ROOT_PATH', $_SERVER['DOCUMENT_ROOT']);

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