1

我对 PHP 功能很感兴趣,但我对 PHP 安全性知之甚少——这当然是一件很糟糕的事情。我正在自学这门语言,但资源有时比有用的要少一些。

我刚刚做了这个愚蠢的小网站:

http://www.ineedaprompt.com/

您可以在“再次!”下方看到它。按钮是一个计数器。它显示了按钮被点击了多少次。每次单击按钮时,我的 JS 都会对更新此文件的 PHP 文件 (counter.php) 进行 Ajax 调用:

http://www.ineedaprompt.com/counter.txt

每 100 毫秒,我使用 Ajax 调用来使用计数器文件的内容更新该计数器字段的值。

计数器最近超过 100,但随后突然回落到 0 并重新开始。外部人员覆盖该 counter.txt 文件有多容易?我该如何预防?

注意:我的 .htaccess 文件中没有任何与 PHP 相关的内容,因为我不知道该放什么。

请原谅我的无知和TMI,谢谢!

编辑:你们速度非常快。

这是 counter.php 代码:

<?php

$counter = file_get_contents("counter.txt");

$counter++;

file_put_contents("counter.txt", $counter);

?>

...以及我的 JS 中在单击按钮时激活的代码:

$("#button").click(function(){
    $.ajax("counter.php");
});

...以及我的 JS 中每 100 毫秒激活一次的代码:

window.setInterval(function(){
    $.get("counter.txt", function(result){
        $("#counter").html(result);
    });
}, 100);

计数器没有限制。它实际上只是一个文本文件,里面有一个数字。

4

2 回答 2

3

写入数据时需要锁定文件,因为操作系统无法同时处理多个读取和写入,我在下面的站点中使用过,现在我的问题也解决了。我希望它可以帮助你和其他人。

if( $fl = fopen("counter.txt", "r+") && flock( $fl ,  LOCK_EX ) )
{
  //empty the file
  ftruncate($fl, 0); 

  //move file pointer to beginning
  fseek($fl, 0); 
  //write
  fwrite($fl, $content);
  fflush($fl);
  flock($fl, LOCK_UN); 
  fclose($fl); 
}
于 2013-09-11T21:05:22.360 回答
1

对“counter.txt”文件的读取和写入可能同时发生,file_get_contents("counter.txt")当文件为空白时调用时,它返回一个空白字符串。

然后,当你增加$counter++;一个空白字符串时,它变成“1”。并且那个“1”被写入文件。

您可以尝试锁定文件,这是带有一些示例代码的 SO 答案:Read and write to a file while keep lock

于 2013-09-11T21:03:27.633 回答