【问题标题】:PHP Open array of photo's from directory?PHP从目录中打开照片数组?
【发布时间】:2015-01-07 12:18:38
【问题描述】:

我正在制作一个 Wordpress 页面模板,我正在尝试将目录中的所有图像添加到数组中,然后使用 foreachecho 将它们全部添加到 HTML。但是当我尝试加载页面时,我得到了这个错误Invalid argument supplied for foreach(),所以这意味着它不是一个数组,但它以前工作过。我还尝试了scandir 函数,但这会给我错误[function.scandir]: failed to open dir: not implemented in。使用的PHP代码如下。

$folder = get_bloginfo('template_directory') . '/img/dir/';
$images = glob($folder . "*.{jpg,png,gif}", GLOB_BRACE);

foreach ($images as $image)
{
    echo '<img src="' . $image . '" />';
}

文件夹的路径是正确的,因为使用下面的代码我得到了一张图片。

echo '<img src="' . get_bloginfo('template_directory') . '/img/dir/image.jpg" />';

提前致谢!

【问题讨论】:

  • vardump( $images );
  • foreach() 之前尝试过var_dump() 你的$images?检查它是null 还是false,因为这会有所不同,正如手册所说的Returns an array containing the matched files/directories, an empty array if no file matched or FALSE on error.
  • 谢谢,我尝试了var_dump() 函数,它返回bool(false)。我要打开的目录中有图像。有没有办法制作$images的数组?

标签: php arrays wordpress foreach glob


【解决方案1】:

我认为 template_directory 现在在 wordpress 中返回一个 URL,如果您使用 get_template_directory() 将返回绝对路径。 (它不返回斜杠,所以你需要记住添加)

这可能是您遇到的问题,值得一试。

如果您使用子主题,请使用get_stylesheet_directory()

【讨论】:

  • 这修复了foreach() 错误!现在我只需要修复图像的路径,它应该可以工作。
  • 图片使用 URL,因此在循环中创建图片标签时,您应该使用 bloginfo("stylesheet_directory") 获取主题文件夹的 URL,然后将其余路径添加到$image 的结尾和文件名,瞧
【解决方案2】:

php 的glob() function 将在错误时返回false(或者当没有找到匹配的文件时,取决于您的操作系统)。

我怀疑在您的具体情况下,返回值确实是false(因为foreach 可以使用空数组,它基本上只是跳过该块)。试试看:var_dump($images);

您应该添加一个检查以确保返回值确实是您可以使用的:

if(is_array($images)) {
    foreach($images as $image) { /* ... */ }
}

【讨论】:

  • 我已经添加了if() 语句,它只是像你说的那样跳过了块,所以$images 不是一个数组。是否有解决方法来制作$images 的数组?
  • 一种解决方法?好吧,如果它不是一个数组,你就不会得到想要的输出;)所以你必须修复你用来抓取图像的代码......尝试调试脚本,首先找出 为什么它不是一个数组,意思是为什么它找不到你要找的文件
【解决方案3】:

问题是路径。您尝试 '/img/directory/'; 但这不起作用。后来你说'/img/dir/image.jpg' 正在工作。你看到 directorydir 了吗?

路径拼错了,仅此而已。

【讨论】:

  • 是的,抱歉,这只是为了说明目的,那些不同的路径不是问题。不过很好发现!
  • @MaxRuigewaard 好吧,如果您在此处发布之前更改代码,您也可能会改变问题的性质。无论如何,我都会发布原始代码。您还可以在循环之前回显文件夹的路径并检查它是否真的正确。也许有// 而不是/ 或其他错字。
猜你喜欢
  • 2020-04-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多