Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/file/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 简单的站点统计脚本并没有从文件中收集数据,我有一个几乎完全正确的脚本_Php_File_Views_Ip - Fatal编程技术网

Php 简单的站点统计脚本并没有从文件中收集数据,我有一个几乎完全正确的脚本

Php 简单的站点统计脚本并没有从文件中收集数据,我有一个几乎完全正确的脚本,php,file,views,ip,Php,File,Views,Ip,不久前我做了一个脚本,写了一个文件,我在这里做了同样的事情,只添加了一部分来读取文件并再次写入。我试图实现的非常简单,但问题是我没有解决,我试图让我的脚本写入一个基本上包含以下信息的文件 views:{viewcount} date-last-visited:{MM/DD/YYYY} last-ip:{IP-Adress} 现在我做了一些研究,尝试了几种读取数据的方法,但都没有返回任何结果。我目前的代码如下 <?php $filemade = 0; if(!file_exists("s

不久前我做了一个脚本,写了一个文件,我在这里做了同样的事情,只添加了一部分来读取文件并再次写入。我试图实现的非常简单,但问题是我没有解决,我试图让我的脚本写入一个基本上包含以下信息的文件

views:{viewcount}
date-last-visited:{MM/DD/YYYY}
last-ip:{IP-Adress}
现在我做了一些研究,尝试了几种读取数据的方法,但都没有返回任何结果。我目前的代码如下

<?php
$filemade = 0;

if(!file_exists("stats")){
    if(!mkdir("stats")){
        exit();
    }
    $filemade = 1;
}
echo $filemade;
$hwrite = fopen("stats/statistics.txt", 'w');

$icount = 0;

if(filemade == 0){

    $data0 = file_get_contents("stats/statistics.txt");

    $data2 = explode("\n", $data0);

    $data1 = $data_1[0];

    $ccount = explode(":", data1);

    $icount = $ccount[1] + 1;

    echo "<br>icount:".$icount."<br>";
    echo "data1:".$data1."<br>";
    echo "ccount:".$ccount."<br>";
    echo "ccount[0]:".$ccount1[0]."<br>";
    echo "ccount[1]:".$ccount1[1]."<br>";

}

$date = getdate();

$ip=@$REMOTE_ADDR; 

fwrite($hwrite, "views:" . $icount . "\nlast-viewed:" . $date[5] . "/" . $date[3] . $date[2] . "/" . $date[6] . "\nlast-ip:" . $ip);

fclose($hwrite);
?>
视图永远不会上升,日期永远不会工作,IP地址永远不会显示

在我最终决定询问之前,我已经查阅了很多资料,我想我会通过这种方式获得更多相关信息

期待一些答复。PHP是我最新的语言,所以我知道的不多

我已经试过了

我试过:

$handle_read = fopen("stats/statistics.txt", "r");//make a new file handle in read mode
$data = fgets($handle_read);//get first line
$data_array = explode(":", $data);//split first line by ":"
$current_count = $data_array[1];//get second item, the value

我也尝试过使用split而不是explode,但有人告诉我split不推荐使用,explode是最新的

任何帮助都会很好,谢谢您的时间。

尝试以下方法:

<?php
if(!file_exists("stats")){
  if(!mkdir("stats")) die("Could not create folder");
}
// file() returns an array of file contents or false
$data = file("stats/statistics.txt", FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES);
if(!$data){
  if(!touch("stats/statistics.txt")) die("Could not create file");
  // Default Values
  $data = array("views:0", "date-last-visited:01/01/2000", "last-ip:0.0.0.0");
}
// Update the data
foreach($data as $key => $val){
  // Limit explode to 2 chunks because we could have
  // IPv6 Addrs (e.x ::1)
  $line = explode(':', $val, 2);
  switch($key){
    case 0:
      $line[1]++;
      break;
    case 1:
      $line[1] = date('m/d/Y');
      break;
    case 2:
      $line[1] = $_SERVER['REMOTE_ADDR'];
      break;
  }
  $data[$key] = implode(':', $line);
  echo $data[$key]. "<br />";
}
// Write the data back into the file
if(!file_put_contents("stats/statistics.txt", implode(PHP_EOL, $data))) die("Could not write file");
?>


这看起来比我目前所了解的更高级的php,所以如果您能更好地解释每个部分的功能。我理解这一切;在经历了几层之后,很有趣,我喜欢swich和case方法,没有想过这样使用它,但是我仍然不太理解=>直到现在,我仍然不确定我是否理解,它基本上是每次向键添加1,并将实际值存储在val中吗?为什么在
中有/there?XHTML和HTML在没有“/”的情况下可以正常工作。我不知道file()函数,非常感谢。我试试看。谢谢,没问题。至于一些解释:在数组中,$x=>$y表示数组中的键名($x)和关联值($y)。至于switch/case,它比写出if语句更容易,但这只是因为我们确切地知道有多少行以及具体的顺序。在循环结束时,我们将新值设置为原始数组键(实际上是替换数据)。至于换行符,这只是我干净编码的习惯,XHTML严格要求它是自动关闭的。非常感谢您的解释,我对php不太了解,所以这真的很有帮助。现在我已经在一个外部php文件中有了它,我需要找到一种方法在我的页面加载中运行它。我可能可以在body的onLoad=“”属性中使用include_一次,但是idk。谢谢。当,我的主机似乎不允许我访问body标记,所以我甚至不能使用onLoad属性…body的onLoad属性通常用于Javascript。如果您只是在每个php页面的顶部包含或需要这个文件,那么它应该很好。需要注意的一点是statistics.txt的路径。目前它是相对的。你应该考虑使它绝对,以确保你不会结束随处可见的随机文件。
$handle_read = fopen("stats/statistics.txt", "r");//make a new file handle in read mode
$pre_data = fread($handle_read, filesize($handle_read));//read all the file data
$pre_data_array = explode("\n", $pre_data);//split the file by lines
$data = pre_data_array[0];//get first line
$data_array = explode(":", $data);//split first line by ":"
$current_count = $data_array[1];//get second item, the value
<?php
if(!file_exists("stats")){
  if(!mkdir("stats")) die("Could not create folder");
}
// file() returns an array of file contents or false
$data = file("stats/statistics.txt", FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES);
if(!$data){
  if(!touch("stats/statistics.txt")) die("Could not create file");
  // Default Values
  $data = array("views:0", "date-last-visited:01/01/2000", "last-ip:0.0.0.0");
}
// Update the data
foreach($data as $key => $val){
  // Limit explode to 2 chunks because we could have
  // IPv6 Addrs (e.x ::1)
  $line = explode(':', $val, 2);
  switch($key){
    case 0:
      $line[1]++;
      break;
    case 1:
      $line[1] = date('m/d/Y');
      break;
    case 2:
      $line[1] = $_SERVER['REMOTE_ADDR'];
      break;
  }
  $data[$key] = implode(':', $line);
  echo $data[$key]. "<br />";
}
// Write the data back into the file
if(!file_put_contents("stats/statistics.txt", implode(PHP_EOL, $data))) die("Could not write file");
?>