2011-12-05 11 views
0

少し前にスクリプトを作ってファイルに書きましたが、ここで同じことをしましたが、ファイルを読み込む部分が追加されました。それをもう一度書きなさい。私がachiveしようとしていることは非常に簡単ですが、問題は基本的にファイルからデータを収集しないシンプルサイトStatスクリプト

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

[email protected]$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 

、私は言われたスプリットは、最新で非推奨となり、爆発されます。

ご協力いただきありがとうございます、お時間をありがとうございます。

答えて

2

は、以下のことを試してみてください。

ちょうど良く、各部分が何をするか説明できるので、もし私が、これまでによよりもさらに高度なPHPのように見える
<?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"); 
?> 
+0

。私はそれを理解していますが、それはいくつかのティエムを経て、興味深いです、私はswichとcaseの方法が好きですが、そのように使う考えはしませんでしたが、私はそれが基本的に毎回キーに1を加えて、実際の値をvalに格納していますか?そして、/ thereはなぜ
にいるのですか? XHTMLとHTMLは "/"がなくても正常に動作します。私はfile()関数について知りませんでした、ありがとう、たくさん。私はそれを試してみます。ありがとうございました。 –

+0

ありがとう、それは完全に機能しました。 –

+0

問題ありません。いくつかの説明として:配列では、$ x => $ yは配列内のキー名($ x)と関連する値($ y)を表します。 switch/caseに関しては、if文を書くよりも簡単ですが、**正確には何行あるのか、特定の順序を知っているので可能です。ループの最後に、新しい値を元の配列キーに設定します(本質的にデータを置き換えます)。 /の改行では、それはクリーンなコーディングのための私の習慣であり、XHTML Strictはそれを自己終了する必要があります。 – Grexis

関連する問題