我想创建一个 URL rotator 脚本,它将按特定顺序而不是随机旋转我的 URL。
假设我有 100 个要旋转的 URL,我将它们排序,旋转器将从第一个到最后一个显示它们,然后返回到第一个 URL,依此类推。
如果可能的话,它可以是一个没有数据库的简单 php 脚本吗?
它可以在没有数据库的情况下完成,是的。您可以创建一个简单的脚本,其中包含任意 URL 数组和一个包含数字的文本文件。该数字跟踪要显示的 URL 的数组索引。加载脚本后,读取文件,获取编号并显示关联的 URL。然后增加数字并将其写回文件,除非数字现在超过数组的大小 - 然后将零写回文件。
要使用文件中的 URL(并且没有计数器)来完成此操作,请将所有 URL 放在一行文本中。|
用竖线字符分隔它们。在下一行,输入一个零。读取第一行并在管道字符上展开以创建一个数组。从数组中获取第一个元素,使用该 URL,并将第一个数组元素移动到数组的末尾。将带有管道字符的数组内爆回字符串,并将文件内容覆盖到文本文件中。
根据您的计划,这将或不会与 cookie 一起使用。由于 cookie 存储在客户端浏览器中,因此您只能跟踪单个访问者所看到的内容。如果需要考虑整个受众,这将无济于事,因为您需要一个组数组索引来跟踪,而不是单个的。
<?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