glob()返回空目录路径问题

时间:2015-11-11 12:18:54

标签: php

我正试图通过这样做来加载文件夹中的所有图像:

<?php
 $dirname = "/../../../properties-frontpage/";
 $images = glob($dirname."*.*");
 foreach($images as $image) {
     echo '<div class="item" style="background-image:url(' . $image  . ')" ></div>';
 }
 echo '<pre>';
 var_dump($images);
 echo '</pre>';
?>

然而,它返回一个空数组,它让我疯狂,我可能以错误的方式定义$dirname,但无法弄清楚如何。

谢谢你们

编辑01

代码写在一个include中,该文件位于名为includes的文件夹中 这是我的文件夹结构:

wp-content&gt;主题&gt; AWF&gt;包括

properties-frontpage文件夹位于wp-content文件夹中。

包含在front-page.php主题文件夹中的AWF中。

所以我需要走三个级别吗?

编辑02 感谢Stefan Gehrig的解决方案,我现在输出了这些网址: /Users/boriskamp/Documents/Local Websites/MijnAWF/wp-content/themes/AWF/includes/../../../properties-frontpage/12.jpg

我怎样才能将它们变成

/Users/boriskamp/Documents/Local Websites/MijnAWF/wp-content/properties-frontpage/12.jpg所以他们的工作是src

2 个答案:

答案 0 :(得分:2)

必须相对于正在执行的脚本定义相对路径,而不是相对于包含的脚本。有时很难弄清楚,而且我没有WP专家。通常,在使用包含文件时,在已知绝对路径上旋转相对路径更容易。有一个__DIR__常量始终指向当前文件所在的目录。

所以你可以做那样的事情

$dirname = __DIR__."/../../../properties-frontpage/";

这将解决类似

的问题
/<<absolute path>>/wp-content/themes/AWF/includes/../../../properties-frontpage/

关于编辑02

可以使用realpath()删除..遍历(请阅读符号链接发生的文档以及目标路径不存在的情况)。但是通过Web服务器访问路径更加复杂。您不能简单地假设您只需要剥离/Users/boriskamp/Documents/Local Websites/部分,使路径相对于文档根目录。根据您的服务器配置(例如别名或路径映射),此任务变得任意复杂,超出了原始问题的范围。也许有一个WP助手可以做到这一点 - 我不知道。

答案 1 :(得分:0)

请改用此代码:

<?php
 $dirname = "../../../properties-frontpage/"; // Remove the first /
 $images = glob($dirname."*.*");
 foreach($images as $image) {
     echo '<div class="item" style="background-image:url(' . $image  . ')" ></div>';
 }
 echo '<pre>';
 var_dump($images);
 echo '</pre>';
?>