我想创建一个URL旋转器脚本,它将按特定顺序轮换我的URL,而不是随机旋转。
假设我有100个要旋转的URL,我将它们排序,旋转器将从第一个显示到最后一个,然后返回到第一个URL,依此类推。
如果可能,它可以是一个没有数据库的简单php脚本吗?
答案 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