代码之家  ›  专栏  ›  技术社区  ›  Aitch

为什么file_exists()返回false?

  •  2
  • Aitch  · 技术社区  · 8 年前

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

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

    我需要显示每个图像(如果存在),如果不存在,则不返回任何内容。因此,如果贴子与末尾带有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 ""; }`
    
    3 回复  |  直到 8 年前
        1
  •  1
  •   Martin Asuquo12    8 年前

    您需要重新安排告诉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也会使用缓存的过去结果,这些结果可能不是最新的。

        2
  •  1
  •   maaudet    8 年前

    你开始吧 $root 用一个 / ,因此它从服务器的根目录开始。删除第一个 / 然后重试。

        3
  •  0
  •   Jakir Hossain    8 年前
    $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)){
    .......
    }
    
    推荐文章