PHP和文件路径中的file_exists()

时间:2011-12-15 19:36:54

标签: php

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

$imgpath = '/uploads/' . $filename;
echo '<img src="' . $imgpath . '" />';
echo (file_exists($imgpath))?'true':'false';

它会显示图片,因此该文件存在,但file_exists显示false

如果我将'/uploads/'更改为'../uploads/',则会显示图片,file_exists显示true。即使没有图片,file_exists也会始终显示true

有什么问题?

*更新*

我试过了echo dirname(__FILE__);。它显示/....../Auploads文件夹位于/....../uploads。此外,我在文件夹/....../m/A中有另一个类似的PHP文件。所以我需要某种普遍的道路。如何获得根路径,即/....../

我也试过了$_SERVER['DOCUMENT_ROOT'],但是图片无法显示,尽管路径是100%正确的。

3 个答案:

答案 0 :(得分:3)

为避免出现问题,最简单的方法是使用file_exists()的绝对路径。系统根/与您的网络根目录(例如)/var/www

不同

尝试

# /var/www/A/script.php
$imgpath = '/uploads/' . $filename;

# check in /var/www/uploads/filename
if( file_exists(dirname(__FILE__) . '/..' . $imgpath) ) {
    echo '<img src="' . $imgpath . '" />';
}

PHP的编辑&gt; = 5.3

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

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

答案 1 :(得分:3)

以“/”开头是指网络上的相对路径,但是在根目录“/”目录中引用“uploads”文件夹的文件系统上。

尝试使用./uploads表示法或使用dirname(__FILE__)

答案 2 :(得分:2)

原因是您在HTML中的绝对路径是相对于您的网站根目录的,但在PHP中它是相对于文件系统根目录。它们不相同。

我的网站根目录为http://www.example.com/,但我的网站是在/var/www/的文件系统上开发的,所以如果我在/var/www/index.php并使用路径/uploads/,则在html中那将是http://www.example.com/uploads/,但对于文件系统/uploads/。我甚至不在我的网站目录中了!