为什么 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)){
.......
}
我正在尝试使用 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)){
.......
}