ユーザーはテキスト ファイル内のリンクの順序がわからないため、リンクを順番に読むと「ランダム」に見えます (最初にファイルを作成するときにそれらをシャッフルできます)。
だからあなたはできる:
- 最後に見たリンクのインデックスをセッションに保存する
- リンク インデックスをシステム時間にリンクします。これは繰り返しを防ぐものではありませんが、正確に適切な時間の後に「更新」を押さない限り、2 つのリンクが等しくなることはありません。
方法 1:
$urlist=file("randomlinks.txt");
$nl=count($urlist);
session_start();
if (!isset($_SESSION['link'])) // If link is not in session
$_SESSION['link'] = 0; // Start from 0 (the first)
$np = $_SESSION['link']++; // Next time will use next
$_SESSION['link'] %= $nl; // Start over if nl exceeded
$url=trim($urlist[$np]);
Header("Location: $url");
方法 2:
...
$nl=count($urlist);
$np = time() % $nl; // Get number of seconds since the Epoch,
// extract modulo $nl obtaining a number that
// cycles between 0 and $nl-1, every $nl seconds
$url=trim($urlist[$np]);
Header("Location: $url");
もう 1 つの方法は、最後に表示された N 個のリンクを記憶することです。ただし、そのためにはセッション変数が必要です。
session_start();
if (!isset($_SESSION['urlist'])) // Do we know the user?
$_SESSION['urlist'] = array(); // No, start with empty list
if (empty($_SESSION['urlist'])) // Is the list empty?
{
$_SESSION['urlist'] = file("randomlinks.txt"); // Fill it.
$safe = array_pop($_SESSION['urlist']);
shuffle($_SESSION['urlist']); // Shuffle the list
array_push($_SESSION['urlist'], $safe);
}
$url = trim(array_pop($_SESSION['urlist']));
1、2、3、4、5 の 5 つの URL がある場合、次のようになります。
1 5 3 4 2 1 4 2 5 3 1 2 3 5 4 1 4 3 2 5 1 4 ...
...リストはN-1ランダムです:-)、すべてのリンクは同じ頻度で表示され、同じリンクは上記の「4」(...4 1 4.. .); もしそうなら、少なくとも$nl
訪問のために二度とそれを見ることはありません。
また
Header()
タグ内から使用しないでください<BODY>
。まるごと取り除き<BODY>
ます。
- スクリプトの自然な終わりにいる場合は、使用する必要はありません
exit()
。スクリプトは自動的に終了します。