電子書籍の厳選無料作品が豊富!

本を読んでPHPの勉強をしているのですが、さっそく引っかかってしまいました。
本にはcounter.logというファイルにカウンターの値を保存するようにプログラムが書かれています。
そして、windowsではこのcounter.logがスクリプト実行時に自動的に作られるとあるのですが、私はMAC OS Xなので作られず、何回アクセスしても「1人目のお客様です。」と表示されます。
試しに空のcounter.logというファイルを作っておなじディレクトリにおいてみましたが、何も変わらないし、ファイルの中もからのままです。
どうしたら良いのでしょうか?

A 回答 (3件)

書き込み用ファイルを開く処理の中で↓


if( $fn = @fopen($logfile. 'w')){
ソースコードをコピペしてるのだとしたら、
$logfileの後ろが、コンマではなく、ピリオドなのが原因ですね。

デバッグ中は、"@fopen"の"@"を外して"fopen"とする方が良いですよ。
最後には付け加えるのを忘れずに。
    • good
    • 0
この回答へのお礼

できました・・・。
お恥ずかしいです・・・
ありがとうございました!

お礼日時:2008/11/18 13:05

サーバー上で稼働しているなら、対象のディレクトリのパーミッションを確認・変更してみましょう。


とりあえずテストなので、777でいいでしょう。(誰でも読み書き実行可能、セキュリティ的に問題ありなのでテストだけに使用してください)

試しに自分で作成したcounter.logに適当な、かつ適切なデータを入れた場合はどうなります?(サーバー上なら、ファイルのパーミッションをとりあえず777に変更)
おそらく、訪問者数を数字文字列で保存しているのでしょうが、10という数字を入力した場合など。

なんとなくファイル名やパスが間違っていたってオチもありそうな気がします、念のためにそこも確認してみてくださいね。

この回答への補足

counter.logに10を入力して保存したら、11人目のお客様になりました。
ちなみにXAMPPというソフトを使ってhttp://localhostというところで見てますが、これはサーバー上ではないのでしょうか?
あと、パーミッションはどのように確認するのですか?
分からないことだらけですみません。

遅ればせながら、スクリプトを書いておきます。

<html>
<head>
<title>最初のカウンター</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
</head>
<body>

<?php
$logfile = "./counter.log";

$counter = 0;
if( $fn = @fopen($logfile, 'r')){
$counter = trim(fgets($fn));
fclose($fn);
}
print( ++$counter . "人目のお客様です<br>");

if( $fn = @fopen($logfile. 'w')){
fwrite( $fn, $counter);
fclose($fn);
}
?>

</body>
</html>

です。

補足日時:2008/11/17 22:58
    • good
    • 0

質問1


PHPが動作しているのはローカル(あなたのパソコン)でしょうか?
それとも外部のサーバーでしょうか?

質問2
実行されているスクリプトは本に書いてるサンプルスクリプトでしょうか?
それともご自分で作成されたものでしょうか?

この回答への補足

>質問1
 PHPが動作しているのはローカル(あなたのパソコン)でしょうか?
 それとも外部のサーバーでしょうか?

http://localhost/とあるので、たぶんローカルです。

>質問2
 実行されているスクリプトは本に書いてるサンプルスクリプトでしょうか?
 それともご自分で作成されたものでしょうか?

本のサンプルスクリプトです。

補足日時:2008/11/17 23:49
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!