为什么 file_exists() 返回 false?

Why is file_exists() returning false?

我正在尝试使用 if (file_exists() 检索 WP posts 的图像,这些图像保存在 wp-uploads 目录中,但它无法识别文件路径。

对于每个 post,最多有 8 张图像可用。每个图像的文件名末尾都有字母 a-g(或没有),并且有 str_replace 来替换文件名中的某些字符。

我需要显示每张图片(如果存在),如果不存在,则 return 什么都不显示。因此,如果 post 与末尾带有 b、d 和 f 的图像相关联,它只会显示这三个。

我已经在没有 (file_exists()) 的情况下进行了测试,并且它能够通过简单的回显为每个图像拾取图像 - 但似乎无法识别 $img 路径。

我有点 php 菜鸟所以任何帮助将不胜感激...

$uid = get_post_meta (get_the_ID(), 'Unique number', true);
$root ="/wp-content/uploads/2016/Collection/";
$path = str_replace(" ","_",$uid);
$path = str_replace(".","_",$path);
$path = str_replace(":","",$path);

$img = $root.$path.".jpg";
$imga = $root.$path."a.jpg";
$imgb = $root.$path."b.jpg";
$imgc = $root.$path."c.jpg";
$imgd = $root.$path."d.jpg";
$imge = $root.$path."e.jpg";
$imgf = $root.$path."f.jpg";
$imgg = $root.$path."g.jpg";

if (file_exists($img)) { echo "<img src='".$root.$path.".jpg' />"; } else { echo ""; }
if (file_exists($imga)) { echo "<img src='".$root.$path.".jpg' />"; } else { echo ""; }
if (file_exists($imgb)) { echo "<img src='".$root.$path."b.jpg' />"; } else { echo ""; }
if (file_exists($imgc)) { echo "<img src='".$root.$path."c.jpg' />"; } else { echo ""; }
if (file_exists($imgd)) { echo "<img src='".$root.$path."d.jpg' />"; } else { echo ""; }
if (file_exists($imge)) { echo "<img src='".$root.$path."e.jpg' />"; } else { echo ""; }
if (file_exists($imgf)) { echo "<img src='".$root.$path."f.jpg' />"; } else { echo ""; }
if (file_exists($imgg)) { echo "<img src='".$root.$path."g.jpg' />"; } else { echo ""; }`

您以 / 开始 $root,因此它是从服务器的根目录开始的。删除第一个 / 并重试。

您需要重新安排您告诉 PHP 查找地址的方式,

$root 可能不是您的绝对文件路径根目录( 可能意味着绝对 )所以为此使用特殊的超级变量,$_SERVER['DOCUMENT_ROOT'] 这是Web 可访问文件路径的根目录,因此您将拥有:

$img = $_SERVER['DOCUMENT_ROOT'].$root.path.".jpg"
//while retaining your current / at the start of $root

这是要检查文件是否存在的文件结构不是要在<img>中引用的文件结构标签,这在您上面的示例中似乎是正确的。

因此,您的整体更正应如下所示:

$root ="/wp-content/uploads/2016/Collection/";
$path = str_replace(" ","_",$uid);
$path = str_replace(".","_",$path);
$path = str_replace(":","",$path);

$img = $root.$path.".jpg";
...
if (file_exists($_SERVER['DOCUMENT_ROOT'].$img)){
....
}

另外请注意,此函数的结果已缓存,因此您应该在此文件的开头调用 clearstatcache(),以便它可以重新检查图像是否存在。目前没有这个,即使图像确实存在,PHP 也将使用缓存的 - 过去的结果,这可能不是最新的。

$uid = get_post_meta (get_the_ID(), 'Unique number', true);
$path = str_replace(" ","_",$uid);
$path = str_replace(".","_",$path);
$path = str_replace(":","",$path);

$uploads = wp_upload_dir();

获取基础根目录。

$root = $uploads['path'];
$imgDir = $root.$path.".jpg";

if (file_exists($imgDir)){
.......
}