2

我想创建一个 URL rotator 脚本,它将按特定顺序而不是随机旋转我的 URL。

假设我有 100 个要旋转的 URL,我将它们排序,旋转器将从第一个到最后一个显示它们,然后返回到第一个 URL,依此类推。

如果可能的话,它可以是一个没有数据库的简单 php 脚本吗?

4

2 回答 2

3

它可以在没有数据库的情况下完成,是的。您可以创建一个简单的脚本,其中包含任意 URL 数组和一个包含数字的文本文件。该数字跟踪要显示的 URL 的数组索引。加载脚本后,读取文件,获取编号并显示关联的 URL。然后增加数字并将其写回文件,除非数字现在超过数组的大小 - 然后将零写回文件。

要使用文件中的 URL(并且没有计数器)来完成此操作,请将所有 URL 放在一行文本中。|用竖线字符分隔它们。在下一行,输入一个零。读取第一行并在管道字符上展开以创建一个数组。从数组中获取第一个元素,使用该 URL,并将第一个数组元素移动到数组的末尾。将带有管道字符的数组内爆回字符串,并将文件内容覆盖到文本文件中。

根据您的计划,这将或不会与 cookie 一起使用。由于 cookie 存储在客户端浏览器中,因此您只能跟踪单个访问者所看到的内容。如果需要考虑整个受众,这将无济于事,因为您需要一个组数组索引来跟踪,而不是单个的。

于 2012-04-27T13:56:37.087 回答
1
<?php
define('FILEDB', 'count.db');
define('URLDB', 'url.db');

function readURLS()
{
  $fp = fopen(URLDB, 'r');

  if( null == $fp )
    return false;

  $retval = array();
  while (($line = fgets($fp)) !== false)
  {
    $retval[] = $line;
  }

  return $retval;
}

$list = readURLS();

if( false === $list )
{
  echo "No URLs available";
}
else
{
  $fp = fopen(FILEDB, 'a+');

  $count = (fread($fp, filesize(FILEDB)) + 1) % count($list);

  ftruncate($fp, 0);
  fwrite($fp, "{$count}");
  fclose($fp);

  echo $list[$count];
}

这行得通。


更新了新的要求。
您将需要一个名为 url.db 的文件(或在define('URLDB', 'xxx') 每一行之后填写的任何内容都是一个 URL 条目。

count.db 可以存在,但不需要。最好创建一个简单0的。

它将url.db在每个“请求”上轮换文件中的所有 URL 条目。

然而,这不是并发安全的。count.db如果 A 请求该页面,而 B 也请求该页面,那么如果 B在 A 将新内容写入之前读取,则 A 和 B 可能会看到相同的 URLcount.db

于 2012-04-27T14:13:45.117 回答