如何在特定间隔后更改背景图像

时间:2014-05-08 13:22:55

标签: php wordpress image background intervals

在Wordpress网站上,我想每隔十分钟后自动更改背景图像。所以,这个脚本应该完全这样做:

random_img.php

header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT");
header("Cache-Control: no-store, no-cache, must-revalidate"); // HTTP/1.1
header("Cache-Control: post-check=0, pre-check=0", false);
header("Pragma: no-cache"); // HTTP/1.0
header("Expires: Sat, 26 Jul 1997 05:00:00 GMT"); // Date in the past
header('Content-Type: image/jpeg');
$result = array_merge(glob("../../uploads/*x1500.jpg"), glob("../../uploads/*1500x*.jpg"));
$seed = floor(time()/600); 
srand($seed); 
$random_image = $result[rand(0, length($result)-1)];
header('Location:'.$random_image.'');

我有两个问题:

a)代码是否正确?我试着把它输入到孩子的functions.php中,它给了我一些关于array_merge的错误,但我看不出有什么问题。

b)我需要你的帮助,了解如何以及在何处调用该功能(意思是:将图片放入网站)。是否像

background: url(random_img.php) no-repeat center center fixed;

进入CSS文件或调用是否必须进入header.php的头部?如何正确说明?

我想,我已经尝试了两种方法,而且没有成功。

2 个答案:

答案 0 :(得分:0)

如果您要直接从脚本输出图像,请执行以下操作:

header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT");
header("Cache-Control: no-store, no-cache, must-revalidate"); // HTTP/1.1
header("Cache-Control: post-check=0, pre-check=0", false);
header("Pragma: no-cache"); // HTTP/1.0
header("Expires: Sat, 26 Jul 1997 05:00:00 GMT"); // Date in the past
header('Content-Type: image/jpeg');
$result = array_merge(glob("../../uploads/*x1500.jpg"), glob("../../uploads/*1500x*.jpg"));
$seed = floor(time()/600); 
srand($seed); 
$random_image = $result[rand(0, length($result)-1)];
header('Content-Length: ' . filesize($random_image));
readfile($random_image);

CSS应该保持不变。 直接访问随机图像文件以测试它是否有效。

答案 1 :(得分:0)

您是否考虑过/可以使用javascript吗?

如果是这样,你可以做一些像(在jQuery中):

$(document).ready(function()
{
    setInterval(function()
    {
        $("body").css("background","new-background");
    },10000);
});

编辑:认为这是10秒,而不是10分钟。无论如何,只需将10000更改为600000 10分钟

如果您只想在PHP中执行此操作,那么您必须意识到,如果没有javascript,代码将仅在加载页面时运行。因此,我建议设置一个会话,其中包含上次更改背景的时间戳,每次加载页面时,检查上一个时间戳是否超过10分钟,并引入新的背景。

date_default_timezone_set("UTC");
session_start();

$pic     = array( "../is/images/*x1500.jpg",
                  "../is/images/*1500x*.jpg" );
$pic_num = count($pic);

if( isset($_SESSION["bg_change"]) && ($_SESSION["bg_change"]-600)>time()  )
{
    # They have already visited and it has been 10 minutes since last background change
    # Update the BG image
    $_SESSION["bg_img"]    = $pic[ mt_rand(1,$pic_num)-1 ];
    $_SESSION["bg_change"] = time();
}
else
{
    # They have either not visited, or its not time to change
    # Give them the last set background or the default
    $_SESSION["bg_img"] = ( isset($_SESSION["bg_img"]) ? $_SESSION["bg_img"] : "../path/to/default/background" );
}

然后,稍后在该文档中,假设它出现在HTML& CSS,您需要回显$_SESSION["bg_img"]来代替背景样式规则。

...
<style type="text/css">

body
{
    background: <?= $_SESSION["bg_img"] ?>;
} 

</style>