PHP随机图像功能有时会插入空白图像

时间:2014-05-17 05:57:08

标签: php html wordpress image

我有一个函数可以打开一个预先指定的目录,在目录中创建一个图像文件数组,然后从数组列表中提取一个随机图像名称以回显到一个网页。问题是有时它实际上并没有提取图像名称。

这是PHP代码:

<?php

    $actualpath = get_stylesheet_directory_uri() . "/img/banners/";

    // open this directory 
    $myDirectory = opendir("wp-content/themes/beautysalon/img/banners/");

    // get each entry
    while($entryName = readdir($myDirectory)) {
        $dirArray[] = $entryName;
    }

    // close directory
    closedir($myDirectory);


    function getRandomFromArray($ar) {
        mt_srand( (double)microtime() * 1000000 ); // php 4.2+ not needed
        $num = array_rand($ar);
        return $ar[$num];
    }
    $randomPicture = getRandomFromArray($dirArray);

?>

我用来在网页上实际显示图片的代码:

<?php
    if ( !is_front_page() ) {
        echo '<img src="' . $actualpath . $randomPicture . '"/>';
    };

?>

当代码工作时,它最终会回显:

<src="http://sitename.com/directorypath/image.png" />

这正是我打算做的。但是当它不起作用时,由于某些原因它不会拉出图像名称并最终输出这样的东西,这会导致图像损坏:

<src="http://sitename.com/directorypath/" />

这几乎就好像php在生成页面内容之前还没有时间运行该函数,但我认为php总是在页面呈现之前完全执行。

Working example of the PHP script in action can be found here.

该脚本在除主页和联系页面之外的所有页面上运行。

1 个答案:

答案 0 :(得分:2)

尝试使用 scandir 而不是 opendir 。告诉我它是否有效,如果它没有我修复代码。我已经在我身边进行了测试,但它确实有效。

<?php
// Your variables...
$actualpath = get_stylesheet_directory_uri() . "/img/banners/";
$directory = 'wp-content/themes/beautysalon/img/banners/';

// Scan the directory and strip the dots that come with the array
$sd = array_diff(scandir($directory), array('..', '.'));

// Sort the array so that the numbering is correct
sort($sd);

// The random array function.
function getRandomFromArray($ar) {
    return $ar[array_rand($ar)];
}

// Your variable.
$randomPicture = getRandomFromArray($sd);

?>
祝你好运!