Php 保存到txt文件的小帮助

Php 保存到txt文件的小帮助,php,file-io,text-files,Php,File Io,Text Files,您好,我刚刚设置了这个基本的民意测验,我从我在那里发现的一些东西中获得了灵感,它只是一个基本的ajax民意测验,在文本文件中显示结果 虽然我想知道,因为我不希望用户简单地通过批量点击来增加/减少结果,我想添加一个新的文本文件,可以简单地保存IP,每行一个,然后检查它是否已经被记录,如果是,显示结果,如果不是,显示投票 我保存结果的代码行有: <?php $vote = $_REQUEST['vote']; $filename = "votes.txt"; $content = fi

您好,我刚刚设置了这个基本的民意测验,我从我在那里发现的一些东西中获得了灵感,它只是一个基本的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);
?>

所以我想知道我怎样才能检查IPs,基本上也是这样

我对数据库不感兴趣,即使是安全措施,我对我得到的也没什么意见


谢谢你的帮助

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

file_put_contents($filename, $data)
以及从文件中读取数据

file_get_contents($filename);
获取用户的IP地址 $\u服务器['REMOTE\u ADDR']

看到和

下面是示例代码

<?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);

?>

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

file_put_contents($filename, $data)
以及从文件中读取数据

file_get_contents($filename);
获取用户的IP地址 $\u服务器['REMOTE\u ADDR']

看到和

下面是示例代码

<?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);

?>

您可以使用
file\u get\u contents
将文件内容保存到变量中,然后使用
strpos
功能检查该变量中是否存在IP。
例如:

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

您可以使用
file\u get\u contents
将文件内容保存到变量中,然后使用
strpos
功能检查该变量中是否存在IP。
例如:

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

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


请记住,IP可以共享,因此您存储IP的想法可能会适得其反-共享外部IP上的用户将无法投票,因为您的系统将在同一IP地址注册以前的投票。

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


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

请小心将IP存储在文本文件中,然后使用
文件\u get\u contents()
和用于加载数据/解析的类似函数。最糟糕的情况是,假设每个可能的IP地址都使用了您的系统进行投票,那么您最终会得到一个大小为数千GB的文本文件,并且很快就会超过PHP的内存限制。

请小心将IP存储在文本文件中,然后使用
file\u get\u contents()
和用于加载数据/解析的类似函数。最糟糕的情况是,假设每个可能的IP地址都使用了您的系统进行投票,那么您最终会得到一个大小为数千GB的文本文件,并且很快就会超过PHP的内存限制。

数据库不会出于安全考虑,这是因为速度。假设你有一个1000人投票的投票。所以你的文件中有1000个ip。因此,对于每一个新的投票,你必须打开你的文件,阅读它,在阅读的同时,你必须将每个ip与给定的ip进行比较。我认为您需要咬紧牙关,采用数据库驱动的解决方案来解决这个问题;另外,如果您正在对该文本文件进行排序或搜索,以查找可能存在的数千个条目,则数据库经过优化,可以做得比您以往任何时候都好得多。(我不是想让你的梦想破灭,我只是想让你梦想成真)。你不必在问题的前面加上[PHP],因为堆栈溢出有标签。数据库不是为了安全,而是因为速度。假设你有一个1000人投票的投票。所以你的文件中有1000个ip。因此,对于每一个新的投票,你必须打开你的文件,阅读它,在阅读的同时,你必须将每个ip与给定的ip进行比较。我认为您需要咬紧牙关,采用数据库驱动的解决方案来解决这个问题;另外,如果您正在对该文本文件进行排序或搜索,以查找可能存在的数千个条目,则数据库经过优化,可以做得比您以往任何时候都好得多。(我不是想让你的梦想破灭,我只是想让你梦想成真)。你不必在问题的前面加上[PHP],因为堆栈溢出有标签。关于IP,你是对的,但关于cookies的想法并不太好。我从自己的经验中知道这一点——我曾经创建过一个投票,它使用cookies来防止用户进行双重投票。这是一个失败,因为许多用户刚刚关闭了对我的域的Cookie支持,他们想投多少票就投多少票。好吧,我可能会尝试,实际上,可能会节省加载时间,谢谢!还应该有可能检查某人是否激活了cookie,如果没有,就禁止使用cookiepoll@ITroubs:那又有什么好处呢?打开cookies,投票,删除“我投票了”cookie,这是很简单的,然后一次又一次地返回。舒尔您可以这样做,但您需要推动投票的时间会延长,因为您必须在每次投票后激活cookie并手动删除cookie,而不像rhino的情况,您只需停用cookie,然后按F5按钮,直到手指流血为止您的IP是正确的,但是关于饼干的想法并不是很好。我从自己的经验中知道这一点——我曾经创建过一次民意调查,它使用cookies来阻止用户