Php 获取文件的正确路径

Php 获取文件的正确路径,php,Php,我将用户图像存储在“images”文件夹中,完整路径如下所示: $path = 'images/imagename.jpg'; 当我尝试获得如下图像路径时: $path = 'images/imagename.jpg'; 它在主页上运行良好,但由于我有不同的永久链接结构,所以它在其他页面上不起作用。它变得有点像 我当然会写: $path = 'http://example.com/images/imagename.jpg'; 但在这种情况下 file_exists($path) 即使文

我将用户图像存储在“images”文件夹中,完整路径如下所示:

$path = 'images/imagename.jpg';

当我尝试获得如下图像路径时:

$path = 'images/imagename.jpg';
它在主页上运行良好,但由于我有不同的永久链接结构,所以它在其他页面上不起作用。它变得有点像

我当然会写:

$path = 'http://example.com/images/imagename.jpg';
但在这种情况下

file_exists($path)
即使文件存在,也始终返回false。这是个问题

有人能帮忙吗?

我将使用并获得如下“path”参数:

<?php
  $url_tab = parse_url($path);
  echo $url_tab['path'];
?>

因此,您可以保留完整版本并获取path参数

否则,您可以保留绝对路径,并使用$\u SERVER['SERVER\u NAME']连接路径并获取完整url。

我将使用并获取“path”参数,如下所示:

<?php
  $url_tab = parse_url($path);
  echo $url_tab['path'];
?>

因此,您可以保留完整版本并获取path参数


否则,您可以保留绝对路径,并使用$\u服务器['SERVER\u NAME']连接路径并获取完整的url。

尝试
$path='/images/imagename.jpg
这样您就可以从文档根路径引用。

试试
$path='/images/imagename.jpg
这样您就可以从文档根路径引用。

文件是否存在
应该检查文件系统中是否存在文件,而html图像应该使用url(无论它们是相对的还是绝对的)。在to和to之间应该没有混淆,正如您所注意到的,对两者使用相同的变量可能会导致问题

您可以使用一些常量来定义应用程序根路径。如果在项目的根目录中使用前端控制器

define('APP_PATH', dirname(__FILE__));
或者,您可以使用小助手函数分别获取图像路径和url,以便在视图/模板文件中使用

get_image_path($fileName);
get_image_uri($fileName);

通过这种方式,您可以轻松地将图像文件移动到其他位置,并保持现有url不变,或者在不实际移动文件系统中的文件的情况下更改url。

文件存在时
应检查文件系统中是否存在文件,而html图像应使用url(无论它们是相对的还是绝对的)。在to和to之间应该没有混淆,正如您所注意到的,对两者使用相同的变量可能会导致问题

您可以使用一些常量来定义应用程序根路径。如果在项目的根目录中使用前端控制器

define('APP_PATH', dirname(__FILE__));
或者,您可以使用小助手函数分别获取图像路径和url,以便在视图/模板文件中使用

get_image_path($fileName);
get_image_uri($fileName);
通过这种方式,您可以轻松地将图像文件移动到其他位置,并保持现有url不变,或者更改url,而无需在文件系统中实际移动文件。

您几乎可以做到这一点。 路径应该是从web根目录开始的绝对路径(即从
/
开始)。
所以,要检查文件是否存在,必须将其路径从文件系统根扩展到绝对路径

$path='/images/imagename.jpg';
如果(文件_存在($_服务器['SERVER_NAME'].$path)){
回声“;
}
因此,这将适用于站点的任何部分,并通过存在性检查。 始终坚持绝对路径,它永远不会让你失望。

你几乎成功了。 路径应该是从web根目录开始的绝对路径(即从
/
开始)。
所以,要检查文件是否存在,必须将其路径从文件系统根扩展到绝对路径

$path='/images/imagename.jpg';
如果(文件_存在($_服务器['SERVER_NAME'].$path)){
回声“;
}
因此,这将适用于站点的任何部分,并通过存在性检查。
始终坚持绝对路径,这永远不会让您失望。

只存储文件名而不是完整的路径,因为这不是一个好的做法,会让您陷入像现在这样的问题。只存储文件名而不是完整的路径,因为这不是一个好的做法,会让您陷入像现在这样的问题。文件存在($path)仍然返回false,但当我使用echo“”时;图像显示正确。。。有人能解释一下原因吗?@Levani,因为您的文件系统中没有文件/images/imagename.jpg。想想看,我有点困惑……:)“imagename.jpg”文件存在于“images”文件夹中,对吗?文件_exists()函数还检查什么?@Levani它需要知道在哪里检查。所以它需要完整的路径,而不仅仅是文件名。路径由文件名本身和目录组成。和
images
/images
是两个不同的目录。第一个是相对的,后一个是绝对的。第一个路径类似于
/home/www/site/html/images
,而后者仍然是
/images
,不存在。文件系统中不存在我太累了,无法解释文件系统是什么这样的基本问题,但是如果你问另一个问题,你肯定会得到其他答案;图像显示正确。。。有人能解释一下原因吗?@Levani,因为您的文件系统中没有文件/images/imagename.jpg。想想看,我有点困惑……:)“imagename.jpg”文件存在于“images”文件夹中,对吗?文件_exists()函数还检查什么?@Levani它需要知道在哪里检查。所以它需要完整的路径,而不仅仅是文件名。路径由文件名本身和目录组成。和
images
/images
是两个不同的目录。第一个是相对的,后一个是绝对的。第一个路径类似于
/home/www/site/html/images
,而后者仍然是
/images
,不存在。文件系统中不存在文件系统我太累了,无法解释文件系统是什么这样的基本问题,但如果你问另一个问题,肯定会有其他答案。