获取文件的正确路径

时间:2010-07-12 10:41:55

标签: php

我将用户图像存储在“images”forlder中,完整路径如下:

  

http://example.com/images/imagename.jpg

当我尝试获取这样的图像路径时:

$path = 'images/imagename.jpg';

它在主页上工作正常,但由于我有不同的永久链接结构,它不适用于其他页面。它类似于http://example.com/something/images/imagename.jpg

我当然可以写:

$path = 'http://example.com/images/imagename.jpg';

但在这种情况下

file_exists($path)
即使文件存在,

也始终返回false。这是一个问题!

有人可以帮忙吗?

4 个答案:

答案 0 :(得分:3)

尝试使用您从文档根路径引用的方式$path = '/images/imagename.jpg;

答案 1 :(得分:0)

我会使用parse-url并获取“path”参数如下:

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

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

Otherwize,您可以保留绝对路径,并使用$ _SERVER ['SERVER_NAME']连接路径并获取完整的URL。

答案 2 :(得分:0)

file_exists应该检查文件系统中文件的存在,而html图像应该使用url(无论它们是相对的还是绝对的)。之间应该没有混淆,因为你注意到它们使用相同的变量都可能导致问题。

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

define('APP_PATH', dirname(__FILE__));

或者您可以使用小辅助函数分别获取图像路径和网址,在视图/模板文件中使用

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

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

答案 3 :(得分:0)

你几乎得到了它。 路径应该是来自Web根目录的绝对(即从/开始) 所以,要检查文件的存在,你必须从文件系统根目录扩展它的绝对路径。

$path = '/images/imagename.jpg';
if (file_exists($_SERVER['SERVER_NAME'].$path)) {
  echo "<img src=\"$path\">";
}

因此,这适用于网站的任何部分并通过存在检查。 永远坚持绝对路径,永远不会让你失望。