• ベストアンサー

カウンター 増えないのは?

お世話になります。 下記、サンプルを参考にちょっとカウンターのスクリプトを書いてみたのですが、どうもカウントがアップしません。 どこがおかしいのかご指摘いただけると幸いです。 <?php //カウンターファイル $cnt_file = "count.dat"; //カウンター桁数 $cnt_len = 10; //カウンターファイルが存在すればカウンター値を読取る if(file_exists($cnt_file)){ $file = fopen($cnt_file, "r+"); $conut = fgets($file, $cnt_len); $count = $count + 1; } //ファイルなし新規作成 else { $file = fopen($cnt_file, "w"); $conut = 1; } //ファイルポインタを先頭にセットする rewind($file); //ロック flock($file, LOCK_EX); //書きこみ fputs($file, $conut, $cnt_len); //ロック解除 flock($file, LOCK_UN); //閉じる fclose($file); ?>

質問者が選んだベストアンサー

  • ベストアンサー
  • widoww
  • ベストアンサー率20% (33/159)
回答No.2

スクリプト自体は問題ないです。 なにがおかしいかというと、 変数名の英単語のスペルが間違ってるだけです。(汗) ○count ×conut を直せばうまく動きますよ~☆ ちなみにスペル間違っているところは2箇所ありますw 僕も最初のよくやったような記憶があります。 自分でトレースするといいと思います。 echo $count."<BR>"; とかを、随時挿入して使ってちゃんと増えてるか? 確認しながらやるとどの段階でおかしいか発見できます^^

armstrong-us
質問者

お礼

ご回答ありがとうございました。 無事動きました。 トレースはしていたんですけど…。 変数は基本的にコピー&ペーストを使っているんですけど、疲れていたんでしょう。。。 全部書いちゃっていたんで。 ありがとうございました。

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (1)

回答No.1

そのフォルダなりファイルに書き込み権限がないのだと思いますよ。 あるいはデイレクトリかパスがずれてるか。 普通のWEBの場所だと書き込みできないようになっているから、たいてい違う場所でやります。 自宅サーバなら完全にWEBフォルダ圏外にもってきます。

armstrong-us
質問者

お礼

ご回答ありがとうございます。 変数名が違っていたみたいです。 windowsサーバーなのでパーミッションは考慮してませんでしたが、Linuxで試すときは確かに考慮しないといけませんね。 ありがとうございました。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • ローカルでは動くのにサーバーにアップするとエラーがでる

    最近PHPを勉強を始めました。 とりあえず、参考書の通りに作っていくことから始めています。 アクセスカウンタを設置したく、参考書の通りに記述しました。 <?php $cnt_file = "count.dat"; $cnt_len = 10000; if (file_exists($cnt_file)) { $file = fopen($cnt_file, "r+"); $count = fgets($file, $cnt_len); $count = $count + 1; } else { $file = fopen($cnt_file, "w"); $count = 1; } rewind($file); flock($file, LOCK_EX); fputs($file, $count, $cnt_len); flock($file, LOCK_UN); fclose($file); echo $count; ?> という感じです。 ローカルでは動くのですが、サーバーにアップするとエラーがでて困っています。 ローカルではXAMPPをインストールしていてPHP5なようです。 サーバーはPHP4.4らしいですが、調べても対応している命令をだしているようなのですが、何故かエラーがでています。 問題を解決したいのですが、何分初心者で行き詰まっている状況です。 わかるかたよろしくお願いします。

    • ベストアンサー
    • PHP
  • カウンターを一定数でリセットしたい

    はじめまして。 レッツPHPのカウンタを使っています。 <?php $fp = fopen("count.txt","r+") or die("Error!"); $count = fgets($fp, 64); $count++; rewind($fp); //set_file_buffer($fp, 0); flock($fp, LOCK_EX); fputs($fp, $count); fclose($fp); echo $count; ?> count_file.txt にはA00と記入しているのでA99になったら次はB00~Z99までカウントされるのを、F99まできたらリセットしA00から始めたいのですが式が分りません。$count++;を書き換えればいいのだとは思いますが・・・ よろしくお願いいたします。 PHP4.3.3

    • ベストアンサー
    • PHP
  • PHPのアクセスカウンターのバグについてです!

    PHPを勉強しているものですが アクセスカウンターをネットで調べ自分なりに書いたのですが 日にちが変わるとトータル、今日、昨日が全く動かなくなります。 どこをどうすればいいのか教えていただけないでしょうか? お願いします。 $txt='counter.txt'; $fp=fopen($txt,'r+'); if($fp!==false){ if(flock($fp,LOCK_EX)){ $counter=fgets($fp);//トータル 今日 昨日 日付 $count=explode(' ',$counter); if(date('j') != $count[3]){ $count[3]=date('j'); $count[2]=$count[1]; $count[1]=0; } $count[0]++; $count[1]++; $counter=implode(' ',$count); rewind($fp); fputs($fp,$counter); flock($fp,LOCK_UN);} } fclose($fp); ちなみにバグはトータル→今日→昨日→日付の順です。 500 1 1 262625 のようになっていました。 よろしくです。

    • ベストアンサー
    • PHP
  • PHP、外部ファイルにテキストを書きだす。

    こんにちは、皆様。 下記のソースを実行したいと思います。期待する結果としては、外部ファイルに行列に書き出すことです。 <?php $count_file="count.dat"; if(file_exists($count_file)){ $file = fopen("count.dat", "a") or die("file can not open"); $order_no = fgets($file) + time(); print $order_no; }else{ $file = fopen($count_file, "w") or die("file can not open"); $order_no = time(); } set_file_buffer($file,0); flock($file, LOCK_EX); fputs($file , $order_no); flock($file, LOCK_UN); fclose($file); ?> このソースの結果は配列として書き込まれてました。こんな感じです。 129835261512983526501298355377129835537912983566121298356635 このソースを実行する度にcount.datファイルに順次書き出したと思います。 1298352615 1298352650 1298355377 1298355379 1298356612 1298356635 まだまだPHP勉強中なのでわかる方教えてください。 (1)この行で$order_no = fgets($file) + time(); 改行記号をどう付ければ良いでしょうか? (2) C言語のようにポインターで指定しなければならないですか?書き方を教えてください。 よろしくお願いします。

    • ベストアンサー
    • PHP
  • アクセスカウンターが更新されない(PHP)

    サーバーに count.txt というファイルを置いて 下記のようなPHPで更新するものを作りました。 <? $fp = @fopen("count.txt","r+") or die("ファイルが開けません");//読み書きモードでオープン flock($fp, LOCK_EX); $count = fgets($fp, 64); //64バイトorEOFまで取得、カウントアップ $count++; rewind($fp); //ポインタを先頭に、ロックして書き込み fputs($fp, $count); fclose($fp); //ファイルを閉じる echo $count; //カウンタ表示 ?> しかしながらカウンターは更新されません count.txt、の属性は666としてあります。 FTPを実行して 左右の窓の右側がサーバ側なので その中の、count.txt、を実行すると メモ帳で実行(ダブルクイック)し なかに書かれている数字を(たとえば100とあったものを101と書き換える)変更し 終了すると count.txtは更新されています、保存しますか と聞いてくるので、はい(Yes)で答えて、閉じ また開くと、100のままなのですが なにが原因か推定できないでしょうか? そのディレクトリー自体(ublic_htmlですが)の属性も書き込み可としても ダメでした。

    • 締切済み
    • PHP
  • phpである処理をすると数を1足して、ある処理をするとその数字から1引

    phpである処理をすると数を1足して、ある処理をするとその数字から1引くような事をしたいのですが、上手くいきません。(まれに数字にずれが生じてしまいます。) 1足していくもの $fp = fopen("./data/registry/buy.dat","r+"); $registry_count = fgets($fp,1024); if($registry_count == ""){ $registry_count = 0; } $registry_count++; flock($fp,LOCK_EX); fseek($fp,0); fputs($fp,$registry_count); flock($fp,LOCK_UN); fclose($fp); 1引いていくもの $fp = fopen("./data/registry/buy.dat","r+"); $registry_count = fgets($fp,1024); if($registry_count != "0"){ $registry_count--; } flock($fp,LOCK_EX); fseek($fp,0); ftruncate($fp,0); fputs($fp,$registry_count); flock($fp,LOCK_UN); fclose($fp); どなたかご教授ください。 よろしくお願いいたします。

    • ベストアンサー
    • PHP
  • ファイルを開いたままオープンモードを変更したい

    $fp = fopen ($file, "r"); flock ($fp, 2); で開いたファイルをロックを解除しないままファイルを空にして書き込みモードに移行する方法を教えてください。 或いは $fp = fopen ($file, "r+"); flock ($fp, 2); からfputs()で書き込んだ後にファイルのファイルポインタ以降の部分を切り捨てる形でも良いです。 flock ($fp, 2);の後にfgetsによりファイル内容を取得した後ファイルロックをしたままファイルの余計な部分を捨てたいので $fp = fopen ($file, "w"); flock ($fp, 2); や $fp = fopen ($file, "r"); flock ($fp, 2); fgets ($fp); flock ($fp, 3); fclose ($fp); $fp = fopen ($file, "w"); flock ($fp, 2); は必要ありません。

    • ベストアンサー
    • PHP
  • fopenとfile_put_contents

    ファイルを操作する関数「fopen」と「file_put_contents」を勉強していて 不思議に思いました。 「fopen」を使ったファイルに書き出す場合 「fopen」→「flock(LOCK_EX)」→「fputs」→「flock(ロック解除)」→「fclose」の 流れが必須になるようですが 「file_put_contents(FILE_APPEND | LOCK_EX)」の場合、 この関数一つで同じような処理されるようですが ロックやロックの解除、書き込んだファイルを閉じるなどの 役割がすべて補われるのでしょうか? 「file_get_contents」も同じだような役割りのようで 手間をかけて複雑になってしまう「fopen」を使う理由は あるのでしょうか? 処理工程など多少の違いの説明は読んでみたのですが 複雑になる「fopen」を使う必要性が分かりません。 よろしくお願いいたします。

    • ベストアンサー
    • PHP
  • a.phpにあるアクセスカウンターの数値を取得する

    質問を出すのは初めてでプログラム1年生です。 質問内容は a.phpにあるアクセスカウンターの数値をb.phpに呼び出したいのですが、可能なのでしょうか?? ちなみにb.phpではアクセスカウントを増やしたくありません。 <form>で括り$_GETで呼び出すなどしましたが、1度a.phpから飛ばないと表示されませんでした。 いろいろ類似する質問や記事を見て試行錯誤しましたが、どうしても表示されません。 どなたか教えていただけたら幸いです。 a.phpで記載している内容です。 <?php $counter_file = 'counter.txt'; $counter_lenght = 8; $fp = fopen($counter_file, 'r+'); if ($fp){ if (flock($fp, LOCK_EX)){ $counter = fgets($fp, $counter_lenght); $counter++; rewind($fp); if (fwrite($fp, $counter) === FALSE){ print('ファイル書き込みに失敗しました'); } flock($fp, LOCK_UN); } } fclose($fp); print('COUNT:'.$counter); ?> b.phpで記載している内容です。 <?php ob_start(); include("a.php"); ob_clean(); print $counter; ?> 私の取って付けたような知識では太刀打ちできませんでした。 どうかお助け願います。

    • ベストアンサー
    • PHP
  • file関数とファイルポインタ

    ファイルの内容を(書き換えるために一旦)読み込む時に、 fgets関数と違ってfile関数は fopen関数を使わなくても済む、ということで 便利なので使ってみようと思っているのですが、 ちょっと躓いています。 set_file_bufferやflock、rewindが必要なのですが、 これらはどれも引数にファイルポインタを使います。 fopen関数を使っていないのでコレがないのですが、 どうすればいいのでしょうか? fopenのあとにfileを使う? fopenを使わなくても閉じる時にはfcloseが必要? でもfcloseもファイルポインタを使うし… よろしくお願いします。

    • ベストアンサー
    • PHP
彼女の心理と復縁
このQ&Aのポイント
  • 彼女の心理と復縁できる方法を教えてください。
  • 彼女の心理について気になる点や復縁するための方法をまとめました。
  • 彼女の心理に対する理解と復縁へのアプローチ方法について解説します。
回答を見る

専門家に質問してみよう