基于文本文件的顺序 url 旋转器不起作用



我正在尝试通过使用以下代码(原始源)来创建基于文本文件的顺序URL旋转器:

<?php
$linksfile ="urlrotator.txt";
$posfile = "pos.txt";
$links = file($linksfile);
$numlinks = count($linksfile);
$fp = fopen($posfile, 'r+') or die("Failed to open posfile");
flock($fp, LOCK_EX);
$num = fread($fp, 1024);
if($num<$numlinks-1) {
  fwrite($fp, $num+1);
} else {
  fwrite($fp, 0);
}
flock($fp, LOCK_UN);
fclose($fp);
header("Location: {$links[$num]}");
?>

测试后,我发现它在pos.txt的现有内容之后一直将新的位置编号作为字符串附加,因此该脚本仅在第一次工作。

我尝试在if else语句之前添加以下代码行,以便在更新之前清除pos.txt的现有内容。

file_put_contents($posfile, "");

,但随后发生错误的重定向,说 Undefined index: ......

可能会出错?

我相信您的问题来自您使用的模式。当你说

测试后,我发现它在pos.txt的现有内容之后一直将新的位置编号作为字符串附加,因此该脚本仅在第一次工作。

它将我指向fopen的模式。

您应该使用的模式是w,因为它将"替换" pos.txt中的内容。

$fp = fopen($posfile, 'w') or die("Failed to open posfile");

这样做将阻止您访问pos.txt中的内容。因此,您需要有这样的东西:

$num = file_get_contents($posfile);
$fp = fopen($posfile, 'w') or die("Failed to open posfile");
flock($fp, LOCK_EX);
if($num<$numlinks-1) {
  fwrite($fp, $num+1);
} else {
  fwrite($fp, 0);
}
flock($fp, LOCK_UN);
fclose($fp);

最新更新