情况
我发现并调整了一个相对较短的php代码,其中包括一个随机的html文件,该文件来自我的"randomizer"文件夹。
这是代码
<?php
error_reporting(0);
function random_file($string){
return ((file_exists($string))&&(preg_match('#(.html)$#i',$string))) ? true : false ;
}
define('OUTPUT_TYPE','text');
define('RANDOM_FILES_FOLDER','randomizer/');
$my_array = Array();
$my_dir = RANDOM_FILES_FOLDER ;
if ($dir = @opendir("$my_dir")) {
while (($file = readdir($dir)) !== false) {
if ($file != "." && $file != ".." && !is_dir($my_dir.$file))
{
switch(OUTPUT_TYPE):
case'text':
if(random_file($my_dir.$file)){
$my_array[] = $file;
}
break;
default:
break;
endswitch;
}
}
closedir($dir);
}
if(count($my_array)>0){
$random_number = rand(0, count($my_array)-1);
$random_file = $my_array[$random_number];
switch(OUTPUT_TYPE):
case'text':
include($my_dir.$random_file);
break;
default:
break;
endswitch;
}
?>
问题
它做了它应该做的事情(也许有人可以为我修剪/优化代码(,但我只有几个文件可以随机化,我不希望同一个文件在第二天刷新或打开页面时出现两次。
我认为饼干可能是答案,但不确定如何使用它们。
有人能写一段代码添加到我的代码中吗?或者提供一个具有所有这些属性的代码吗?请记住,它必须随机包含文件夹中的文件,我不希望这些文件中的代码出现在我的实际页面代码中,用于CMS目的
请记住,我是一个PHP和Javascript初学者,有非常基本的知识,所以请帮我把它静音。
谢谢!
非常粗糙:
session_start();
$dir = 'randomizer/';
if (empty($_SESSION['files'])) {
$_SESSION['files'] = array_filter(scandir($dir), function ($file) use ($dir) {
return is_file($dir . $file) && preg_match('#(.html)$#i', $file);
});
shuffle($_SESSION['files']);
}
include $dir . array_shift($_SESSION['files']);
保留会话中所有候选文件的列表,并逐一使用它们。这样,在循环再次开始之前,所有文件将按随机顺序显示一次。仅当列表非常长时不推荐使用。
值得注意的是,array_filter
回调语法需要PHP 5.3。
这不是完美的方法,但它会起作用(故意简单(:包括在$random_file = $my_array[$random_number];
行之后
$oldFile = ''
if(!empty($_COOKIE['oldfilename']) {
$oldFile = $_COOKIE['oldfilename'];
}
while ($oldFile == $random_file) {
$random_number = rand(0, count($my_array)-1);
$random_file = $my_array[$random_number];
}
setcookie('oldfilename', $random_file);