PHP中的文件_exists()和文件路径

PHP中的文件_exists()和文件路径,php,Php,我在根文件夹中有一个文件夹uploads。根目录中还有另一个文件夹A,其中包含一个PHP文件。我在PHP文件中有以下代码: $imgpath = '/uploads/' . $filename; echo '<img src="' . $imgpath . '" />'; echo (file_exists($imgpath))?'true':'false'; $imgpath='/uploads/'$文件名; 回声'; echo(文件_存在($imgpath))?'true':'

我在根文件夹中有一个文件夹
uploads
。根目录中还有另一个文件夹
A
,其中包含一个PHP文件。我在PHP文件中有以下代码:

$imgpath = '/uploads/' . $filename;
echo '<img src="' . $imgpath . '" />';
echo (file_exists($imgpath))?'true':'false';
$imgpath='/uploads/'$文件名;
回声';
echo(文件_存在($imgpath))?'true':'false';
它将显示图像,因此文件存在,但
file\u存在
显示
false

如果我将
'/uploads/'
更改为
'../uploads/'
,它将显示图像,并且
文件存在
显示
。即使没有图像,
file\u存在
始终显示
true

有什么问题

*更新*

我尝试了
echo dirname(_文件__)。它显示
/…/A
上传
文件夹位于
/…/uploads
。此外,我在文件夹
/…/m/A
中还有另一个类似的PHP文件。所以我需要某种通用路径。如何获取根路径,即,
/../


我还尝试了
$\u SERVER['DOCUMENT\u ROOT']
,但图像无法显示,尽管路径100%正确。

原因是HTML中的绝对路径相对于网站根,而PHP中的绝对路径相对于文件系统根。它们不一样


我的网站根目录是,但我的网站是在
/var/www/
的文件系统上开发的,因此如果我在
/var/www/index.php
中,并使用路径
/uploads/
,在html中,如果没有
/uploads/
的文件系统,它将是。我甚至不在我的网站目录了

为了避免出现问题,最简单的方法是对文件_exists()使用绝对路径。系统根目录
/
与您的web根目录不同(例如,)
/var/www

试一试

#/var/www/A/script.php
$imgpath='/uploads/'$文件名;
#签入/var/www/uploads/filename
如果(文件_存在(目录名(_文件__)。'/...$imgpath)){
回声';
}
PHP>=5.3的编辑

$path = "/uploads/${filename}";

if (file_exists(sprinf("%s/..%s", __DIR__, $path)) {
  echo "<img src=\"{$path}\">;
}
$path=“/uploads/${filename}”;
如果(文件\u存在(sprinf(“%s/.%s”,\uuuu DIR\uuuu,$path)){
回声”;
}
以“/”开头表示web上的相对路径,但在引用根“/”目录中“上载”文件夹的文件系统上


尝试
/uploads
表示法或使用
dirname(\uuuu FILE\uuuu)

这是有效的。但即使没有这样的文件,
FILE\u存在
也会显示
true
。为什么?
$path = "/uploads/${filename}";

if (file_exists(sprinf("%s/..%s", __DIR__, $path)) {
  echo "<img src=\"{$path}\">;
}