URL旋转器按特定顺序排列

时间:2012-04-27 13:53:46

标签: php url rotator

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

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

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

2 个答案:

答案 0 :(得分:3)

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

要使用文件中的URLS(而不是计数器)来完成此操作,请将所有网址放在一行文本中。用|管道字符分隔它们。在下面一行,放一个零。读入第一行并在管道字符上爆炸以生成数组。从数组中获取第一个元素,使用该URL,并将第一个数组元素移动到数组的末尾。将带有管道符的数组内核返回到字符串,并将文件内容覆盖到文本文件中。

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

答案 1 :(得分: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文件中循环显示所有网址条目。

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