문제

누군가 내 사이트에 갈 때마다 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로 권한을 설정해보십시오. 작동하지 않으면 호스트가 서버에서 파일 조작을 허용하지 않을 수 있습니다.

당신을 확인하십시오 include_path 기간 (현재 디렉토리)이 있는지 확인합니다. 왜 그렇지 않은지 잘 모르겠지만 호스트가 원인인지는 모릅니다. 당신은 당신의 인쇄 할 수 있습니다 include path PHP 스크립트를 사용하여 ini_get:

ini_get('include_path');

그 외에는 다른 파일 권한이 필요할 것입니다. 다음은 많은 정보를 설명하는 유용한 사이트입니다. 파일 권한.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top