다른 서버로 이동하면 카운터가 작동하지 않습니다.
-
10-07-2019 - |
문제
누군가 내 사이트에 갈 때마다 7 개의 다른 사이드 바 중 하나가로드되도록 HitCounter를 설정했습니다. counter.php라는 파일이 있습니다. 파일에 대한 모든 참조는 상대적 인 것처럼 보이지만 새 호스트의 새 디렉토리로 옮겼을 때 행복한 히트 카운터 대신이 오류가 발생했습니다.
경고: fopen (hitcounter.txt) [function.fopen] : 스트림을 열지 못했습니다 : 허가 거부 /usr/local/apache/sites/my-site/counter.php 라인에 5
Counter.php는 아래 전체에 붙여져 있으며, 5 행은 Fopen에 대한 첫 번째 참조, Coun
내가 뭘 잘못하고 있죠? 나는 분명히 정말 단순하고 창피한 것을 놓치고 있으므로 나를 도와 주면서 경멸이나 학대를주십시오.
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 일 수 있습니다.
웹 서버는 호스트에 따라 그룹의 구성원이 아니므로 '모든 사람'그룹 쓰기 권한을 부여해야합니다.
"실행"비트는 폴더에 필요하지만 개별 파일에는 OS에 의해 실행되지 않기 때문에 개별 파일에는 필요하지 않습니다.
775는 : 소유자, 그룹, 모두입니다.
소유자 = read + write + execute
group = read + write + execute
모두 = read + execute
666 수단
소유자 = 읽기 + 쓰기
그룹 = 읽기 + 쓰기
모두 = 읽기 + 쓰기
644 수단
소유자 = 읽기 + 쓰기
그룹 = 읽기
모두 = 읽습니다
다른 팁
아마도 권한과 관련이있을 것입니다. 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 */
?>
당신이 정말로 원한다면 (btw. 무작위가 아닙니다!) :
<?php
$file = "hitcounter.txt";
$number = (int)file_get_contents($file);
$number = ++$number % 9;
file_put_contents($file, $number);
?>
777로 권한을 설정해보십시오. 작동하지 않으면 호스트가 서버에서 파일 조작을 허용하지 않을 수 있습니다.