質問

誰かが私のサイトにアクセスするたびに、7つの異なるサイドバーの1つが読み込まれるように、ヒットカウンターを設定します。 hitcounter.txtというテキストファイルに書き込むcounter.phpというファイルがあります。ファイルへのすべての参照は相対的であるように見えますが、それらを新しいホストの新しいディレクトリに移動すると、ハッピーヒットカウンターではなくこのエラーが発生しました。

  

警告:fopen(hitcounter.txt)[ function.fopen ]:ストリームを開けませんでした: / usr / local / apache / sitesで許可が拒否されました/MY-SITE/counter.php 5

Counter.phpの全体を以下に貼り付けます。5行目がfopenへの最初の参照です。counter.phpとhitcounter.txtの両方には、古いホストで行ったのと同じ775のアクセス許可があります。

間違っているのは何ですか?本当にシンプルで恥ずかしいことを見逃しているのは明らかですので、手伝いながら軽abuseや虐待を与えてください。

counter.php:

<?php
    $count_my_page = ("hitcounter.txt");
    $hits = file($count_my_page);
    $hits[0]++;
    $fp = fopen($count_my_page , "w");
    if ($fp) {
        fputs($fp , "$hits[0]");
        fclose($fp);
    }
    if($hits[0]<=1)
        $random_number=0;
    else if($hits[0]>1 && $hits[0]<=2)
        $random_number=1;
    else if($hits[0]>2 && $hits[0]<=3)
        $random_number=2;
    else if($hits[0]>3 && $hits[0]<=4)
        $random_number=3;
    else if($hits[0]>4 && $hits[0]<=5)
        $random_number=4;
    else if($hits[0]>5 && $hits[0]<=6)
        $random_number=5;
    else if($hits[0]>6 && $hits[0]<=7)
        $random_number=6;
    else if($hits[0]>7 && $hits[0]<=8)
        $random_number=7;
    else if($hits[0]>8 && $hits[0]<=9) {
        $random_number=8;
        if($hits[0]==9) {
            $count_my_page=("hitcounter.txt");
            $fp = fopen($count_my_page , "w");
            $hits[0]=0;
            fputs($fp , "$hits[0]");
            fclose($fp);
        }
    }
?>
役に立ちましたか?

解決

最初に、775のアクセス許可は必要ありません。 hitcounter.txtには666個のアクセス許可が必要です。 PHPファイルは644です。

ホストによっては、Webサーバーはおそらくグループのメンバーではないため、「Everyone」グループに書き込み権限を付与する必要があります。

&quot;実行&quot; OSによって実行されていないため、個々のファイルではなくフォルダにビットが必要です。

ご存知のように、775はオーナー、グループ、全員

  • 所有者=読み取り+書き込み+実行

  • グループ=読み取り+書き込み+実行

  • Everyone =読み取り+実行

666は

を意味します
  • 所有者=読み取り+書き込み

  • グループ=読み取り+書き込み

  • Everyone =読み取り+書き込み

644は

を意味します
  • 所有者=読み取り+書き込み

  • グループ=読み取り

  • Everyone =読み取り

他のヒント

おそらくパーミッションに関係しています。 777に設定し、何が起こるかを確認します。 apacheが独自の権限で実行され、あなたの一部ではない場合、これが理由かもしれませんが、いくつかの提案があります:

  • 単純な読み取り/書き込みにはfile_put_contents / file_ get_コンテンツを使用してください!
  • 可能な限りこれらの無数の行の代わりに$ random_number = rand(0,8)またはmt_rand(0,8)を使用し、ボーナスとしてすべてのファイルの読み取り/書き込みを削除してください

がんばって!

更新

良い例に勝るものはありません:

<?php 
  $random_number = mt_rand(0,8);
  file_put_contents("hitcounter.txt", $random_number); /* dont know if you still need it */
?>

本当にしたい場合(ところでランダムではありません!):

<?php 
  $file = "hitcounter.txt";
  $number = (int)file_get_contents($file);
  $number = ++$number % 9;
  file_put_contents($file, $number);
?>

アクセス権を777に設定してみてください。それでもうまくいかない場合は、ホストがサーバー上のファイル操作を許可していない可能性があります

include_path をチェックして、ピリオド(現在のディレクトリ)が含まれていることを確認します。なぜそうならないのかはわかりませんが、ホストがウォンキーかどうかはわかりません。 ini_get を使用して、PHPスクリプトから include path を印刷できます:

ini_get('include_path');

それ以外は、おそらく異なるファイル許可が必要です。以下は、ファイルのアクセス権に関する多くの情報を説明する便利なサイトです。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top