0

我有一段时间没有编码了,我正在尝试找到解决这个问题的最简单的方法。

我在服务器上有 20 多个图像(标记为 1.png、2.png、3.png 等),我正在使用 PHP 一次将其中三个呈现到我的网站。

我想要的只是让它每十二小时有一个新图像替换一个旧图像。例如,它首先渲染图像 1、2 和 3,然后在 12 小时后切换到 2、3 和 4。

达到这种效果的最佳方法是什么?

4

9 回答 9

2

您不需要 cronjob,您可以使用该time()功能并使用mod电源来转换每 12 小时看到的图像。

试试这个脚本

$now = time(); // you can simulate adding 12 hours +3600*12

$base = round( $now/(3600*12) ); // this number change every 12 hours

$n_images = 20; // number of your images

$start_from = $base % $n_images; // start from $start_from image

// loop for get your 4 images (3,4,5,6 or 4,5,6,7 or ,18,19,20,1,2 etc.)
for($i = 0; $i < 4; $i++) {
    $image = ($start_from+$i) % $n_images + 1;
    echo "get image " . $image.".jpg<br/>";
}
于 2013-02-01T15:14:36.257 回答
2

这可以在简单的 PHP 中完成(因为您提到了 PHP)。

$numOfImages = 20;
$unit = date('j') * 2; // Day of the month, doubled to simulate chunks of 12 hours.
if (date('G') < 12) { // Hours 0 - 23
    $unit--;
}

$image1 = $unit % $numOfImages;
$image2 = ($unit + 1) % $numOfImages;
$image3 = ($unit + 2) % $numOfImages;

var_dump($image1);
var_dump($image2);
var_dump($image3);
于 2013-02-01T15:28:06.790 回答
0

我不会运行cron。这是我的做法:

$num_images = 20;
$images_display = 3;
$hours = 12;
$time_block = 60 * 60 * $hours;
$time_now = strtotime('now');
$block_num = floor($time_now / $time_block) % $num_images;

$images = array();
for($x=1;$x<=$images_display;$x++) {
        $image_num = $block_num + $x;
        if($image_num > $num_images) $image_num = $image_num % $num_images;
        $images[$x] = $image_num . '.png';
}
于 2013-02-01T15:14:59.310 回答
0

最好的方法是编写 php 脚本,该脚本将进行替换,并将由 cron 每 12 小时执行一次。

于 2013-02-01T15:06:47.837 回答
0

您可以使用 cron 作业来运行将增加图像 URL 上的索引的脚本。

php * */12 * * * root/to/updateImage.php

更新图像脚本中的只是更改数据库中的一个值,该值引用您当前使用的图像。

于 2013-02-01T15:08:13.180 回答
0

如果您可以使用 cron 作业,那么我将创建一个符号链接“current.jpg”,并且每 12 小时触发一个脚本,该脚本执行一个命令以将符号链接更改为另一个。另一种选择是有一个文件“img_config.php”的值:

$current_image = 3;

每次 cron 命中时:

include "img_config.php"
$current_nr = (++$current_image)%20+1;
file_put_contents("img_config.php",'$current_image = '.$current_nr.';');

当然,您还有许多其他选项,例如将其存储在数据库中的值中。

于 2013-02-01T15:10:28.353 回答
0

在 PHP 中,从 中选择要显示的图像config file,可能如下所示:

1.png
2.png
3.png

然后使用 shell 脚本编写一个 cron 作业,该脚本将修改config file. 您可以使用sedawk为它。

于 2013-02-01T15:11:06.657 回答
0

Cron,或在您的应用程序顶部具有此逻辑的函数,如果“确切时间”不是问题:

Read content of last_change.txt

If the content *plus* 12 hours *is less than* current time

    Change images

    Put current time to last_change.txt

Done
于 2013-02-01T15:11:08.577 回答
0

我对一个应该从一组图像中选择的图像有同样的问题,我没有 cron 访问权限。所以我想出了:

function changeStartpageImage() {
    // change the image every x hours
    $hours = 170;
    $fileinfo = stat("images/startseite/startseitenbild.jpg");
    if (time() - $fileinfo['mtime'] < ($hours * 60* 60)) {
        return;
    }

    $handler = opendir("images/startseite/");
    $results = array();

    while ($file = readdir($handler)) {
        if (substr($file, 0, 1) != "." && $file != "startseitenbild.jpg" ) {
            $results[] = $file;
        }
    }
    $newFile = $results[array_rand($results)];
    copy("images/startseite/".$newFile, "images/startseite/startseitenbild.jpg");

    closedir($handler);
}

我认为您可以详细说明此示例并使其变得更好,但是有可能无需处理 Cronjobs 即可处理该问题:-)

于 2013-02-01T15:11:20.933 回答