Счетчик не будет работать, когда я перенесу его на другой сервер

StackOverflow https://stackoverflow.com/questions/1035678

  •  10-07-2019
  •  | 
  •  

Вопрос

Я настроил счетчик посещений так, чтобы каждый раз, когда кто-то заходит на мой сайт, загружалась одна из 7 различных боковых панелей.Существует файл counter.php, который записывает данные в текстовый файл hitcounter.txt.Все ссылки на файлы кажутся относительными, но когда я переместил их в новый каталог на своем новом хосте, вместо счастливого счетчика посещений я получил эту ошибку:

Предупреждение:fopen(hitcounter.txt) [function.fopen]:не удалось открыть поток:Разрешение отклонено в /usr/local/apache/sites/МОЙ САЙТ/counter.php В сети 5

Counter.php полностью вставлен ниже, строка 5 — это первая ссылка на fopen, и counter.php, и hitcounter.txt имеют разрешения 775, как и на старом хосте.

Что я делаю не так?Я, очевидно, упускаю что-то действительно простое и смущающее, поэтому не стесняйтесь презирать меня или оскорблять, помогая мне.

счетчик.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.Вам нужны права 666 для файла hitcounter.txt.Файл PHP может иметь номер 644.

Веб-сервер, вероятно, не является членом группы, в зависимости от хоста, поэтому вам необходимо предоставить группе «Все» права на запись.

Бит «Выполнить» необходим для папок, но не для отдельных файлов, поскольку они не выполняются ОС.

Итак, вы знаете, 775 это:Владелец, Группа, Все

  • Владелец = Чтение + Запись + Выполнение

  • Группа = Чтение + Запись + Выполнение

  • Все = Чтение + Выполнение

666 означает

  • Владелец = Чтение + Запись

  • Группа = Чтение + Запись

  • Все = Чтение + Написание

644 означает

  • Владелец = Чтение + Запись

  • Группа = Чтение

  • Все = Читать

Другие советы

Вероятно, это как-то связано с разрешениями.Установите значение 777 и посмотрите, что произойдет.Если apache запускается с собственными разрешениями и не является частью ваших, возможно, в этом причина, но у меня есть несколько предложений:

  • используйте file_put_contents/file_ get_content для простого чтения/записи!
  • пожалуйста, используйте $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 и убедитесь, что в нем есть точка (текущий каталог). Не уверен, почему это не так, но вы никогда не знаете, если ваш хозяин - ванки. Вы можете распечатать свой include path из сценария PHP, используя ini_get :

ini_get('include_path');

Кроме этого, вам, вероятно, нужны другие права доступа к файлам. Вот полезный сайт, описывающий много информации о разрешениях для файлов .

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top