小帮助保存到txt文件

时间:2010-10-13 15:46:56

标签: php file-io text-files

你好,所以我只是设置了这个基本的民意调查,我从那里发现的东西中激发了自己,这只是一个基本的ajax民意调查,它将结果传播到一个文本文件中。

虽然我很想知道,因为我不希望用户只是简单地点击以获得优势/劣势结果,我考虑添加一个新的文本文件,可以简单地保存IP,每行一个,然后检查如果已经记录,如果是,则显示结果,如果没有,则显示轮询。

我保存结果的代码行是:

   <?php
$vote = $_REQUEST['vote'];

$filename = "votes.txt";
$content = file($filename);

$array = explode("-", $content[0]);
$yes = $array[0];
$no = $array[1];

if ($vote == 0)
  {
  $yes = $yes + 1;
  }
if ($vote == 1)
  {
  $no = $no + 1;
  }

$insert = $yes."-".$no;
$fp = fopen($filename,"w");
fputs($fp,$insert);
fclose($fp);
?>

所以我想知道如何检查IP,就像它基本上一样。

我对数据库不感兴趣,即使是出于安全措施,我也很满意。

感谢您的帮助!

4 个答案:

答案 0 :(得分:2)

最简单的方法是将数据写入文件

file_put_contents($filename, $data)

并从文件中读取数据

file_get_contents($filename);

获取用户的IP地址 $ _SERVER [ 'REMOTE_ADDR']

请参阅php manual for file_put_contents for more informationfile_get_contents

以下是示例代码

<?php

//  File path
$file = 'votedips.txt';

//  Get User's IP Address
$ip = $_SERVER['REMOTE_ADDR'];

//  Get data from file (if it exists) or initialize to empty string
$votedIps = file_exists($file) ? file_get_contents($file) : '';

//
$ips = explode("\n", $votedIps);
if (array_search($ip, $ips)) {
    //  USER VOTED
} else {
    $ips[] = $ip;
}

//  Write data to file
$data = implode("\n", $ips);
file_put_contents($file, $data);

?>

答案 1 :(得分:2)

要停止多次投票,我会在用户投票后设置一个Cookie。如果用户重新加载带有投票表单并且有cookie的页面,您可以只显示结果,或者“您已经投票”。信息。请注意,这不会阻止狡猾的人进行双重投票 - 他们所要做的就是删除已保存的cookie,他们可以重新投票。

请记住,虽然IP可以共享,因此您存储IP的想法可能会适得其反 - 共享面向外部的IP上的人将无法投票,因为您的系统将注册之前的某人投票。相同的IP地址。

答案 2 :(得分:0)

您可以使用file_get_contents将文件内容保存到变量中,然后使用strpos函数检查该变量中是否存在IP。
例如:

$ipfile=file_get_contents('ip.txt');
if (strpos($ipfile, $_SERVER['REMOTE_ADDR'])!==FALSE) // show the results
else // show the poll

答案 3 :(得分:0)

小心将IP存储在文本文件中,然后使用file_get_contents()和类似函数加载数据/解析。作为一个绝对最糟糕的情况,假设每个可能的IP地址都使用你的系统进行投票,你最终会得到一个大小为几千兆字节的文本文件,你很快就会超过PHP的memory_limit。