Счетчик не будет работать, когда я перенесу его на другой сервер - PullRequest
0 голосов
/ 24 июня 2009

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

Предупреждение : fopen (hitcounter.txt) [ function.fopen ]: не удалось открыть поток: доступ запрещен в / usr / local / apache / sites / MY -SITE / counter.php on line 5

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

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

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);
        }
    }
?>

Ответы [ 4 ]

2 голосов
/ 24 июня 2009

Вероятно, это связано с разрешениями. Установите его на 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);
?>
1 голос
/ 24 июня 2009

Во-первых, вам не нужно 775 разрешений. Вам нужно 666 разрешений на hitcounter.txt. Файл PHP может быть 644.

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

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

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

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

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

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

666 означает

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

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

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

644 означает

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

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

  • Все = Читать

0 голосов
/ 24 июня 2009

Проверьте ваш include_path, чтобы убедиться, что в нем есть точка (текущий каталог). Не уверен, почему это не так, но вы никогда не знаете, если ваш хозяин - ванки. Вы можете распечатать include path из PHP-скрипта, используя ini_get :

ini_get('include_path');

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

0 голосов
/ 24 июня 2009

Попробуйте установить разрешения для 777. Если это не сработает, возможно, ваш хост не разрешает манипулирование файлами на сервере

...