我将用户图像存储在“images”forlder中,完整路径如下:
当我尝试获取这样的图像路径时:
$path = 'images/imagename.jpg';
它在主页上工作正常,但由于我有不同的永久链接结构,它不适用于其他页面。它类似于http://example.com/something/images/imagename.jpg
我当然可以写:
$path = 'http://example.com/images/imagename.jpg';
但在这种情况下
file_exists($path)
即使文件存在,也始终返回false。这是一个问题!
有人可以帮忙吗?
答案 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\">";
}
因此,这适用于网站的任何部分并通过存在检查。 永远坚持绝对路径,永远不会让你失望。