Простой Site Stat скрипт не собирает данные из файла, у меня есть почти точный скрипт, который работает - PullRequest
0 голосов
/ 06 декабря 2011

Некоторое время назад я сделал скрипт, который записывал в файл, я делал то же самое здесь, только добавил часть, чтобы прочитать файл и записать его снова. То, что я пытаюсь достичь, довольно просто, но проблема ускользает от меня, я пытаюсь заставить свой сценарий записывать в файл, в основном содержащий следующую информацию

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

результат всегда:

views:1
last-viewed://
last-ip:

просмотры никогда не повышаются, дата никогда не работает, а 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

и

$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

Я также пробовал разделить вместо разнесения, но мне сказали, что разделение устарело, и разнесение актуально.

Любая помощь будет отличной, спасибо за ваше время.

1 Ответ

2 голосов
/ 06 декабря 2011

Попробуйте следующее:

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