0

状況

'randomizer'フォルダーからページにランダムなhtmlファイルを含む比較的短いphpコードを見つけて微調整しました。

これがコードです

<?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;

  }
?>

質問

本来の機能を果たします(おそらく誰かがそのコードをトリミング/最適化できます)が、ランダム化するファイルが数個しかないため、1日にページを更新または開いたときに同じファイルが2回表示されないようにします後。

クッキーが答えかもしれないと思いますが、それをどうやって使うのかわかりません。

誰かがそれを行うために私のものに追加するピースコードを書いたり、それらすべての属性を持つコードを提供したりできますか?フォルダからランダムにファイルを含める必要があることに注意してください。CMSの目的で、実際のページコードにこれらのファイルのコードを含める必要はありません。

私はPHPとJavascriptの初心者であり、非常に基本的な知識があることを忘れないでください。

ありがとう!

4

2 に答える 2

0

非常にラフ:

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']);

セッション内のすべての候補ファイルのリストを保持し、それらを1つずつ使用します。そうすれば、サイクルが再開する前に、すべてのファイルがランダムな順序で1回表示されます。リストが非常に長い場合にのみお勧めしません。

array_filterコールバック構文にはPHP5.3が必要であることに注意してください。

于 2011-08-26T10:29:29.643 に答える
0

これはこれを行うのに最適な方法ではありませんが、機能します(意図的に単純です):行の後にこれを含めます$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);
于 2011-08-26T10:33:06.653 に答える