0

我设置了一个计数器,这样每次有人访问我的网站时,7 个不同的侧边栏之一就会加载。有一个名为 counter.php 的文件写入名为 hitcounter.txt 的文本文件。所有对文件的引用似乎都是相对的,但是当我将它们移动到新主机上的新目录时,我得到了这个错误,而不是一个快乐的计数器:

警告:fopen(hitcounter.txt)[ function.fopen ]:无法打开流:第5/usr/local/apache/sites/MY-SITE/counter.php中的权限被拒绝

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

4 回答 4

2

它可能与权限有关。将其设置为 777,看看会发生什么。如果 apache 以自己的权限运行并且不是您的一部分,这可能是原因,但我有几个建议:

  • 使用 file_put_contents/file_get_contents 进行简单的读/写!
  • 如果可能,请使用 $random_number = rand(0,8) OR 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);
?>
于 2009-06-23T23:01:40.430 回答
1

首先,您不需要 775 权限。您需要对 hitcounter.txt 具有 666 权限。PHP 文件可以是 644。

Web 服务器可能不是该组的成员,具体取决于主机,因此您需要授予“Everyone”组写入权限。

文件夹需要“执行”位,但单个文件不需要,因为它们不是由操作系统执行的。

所以你知道,775 是:所有者,组,每个人

  • 所有者 = 读取 + 写入 + 执行

  • 组 = 读取 + 写入 + 执行

  • 每个人 = 阅读 + 执行

666 表示

  • 所有者 = 读 + 写

  • 组 = 读 + 写

  • 每个人 = 读 + 写

644 表示

  • 所有者 = 读 + 写

  • 组 = 阅读

  • 每个人 = 阅读

于 2009-06-23T22:56:53.247 回答
0

尝试将权限设置为 777。如果这不起作用,可能是您的主机不允许在服务器上进行文件操作

于 2009-06-23T22:57:17.863 回答
0

检查您的include_path以确保其中有句点(当前目录)。不知道为什么它不会,但你永远不知道你的主人是否是 wonkey。您可以使用ini_getinclude path从 PHP 脚本中打印出来:

ini_get('include_path');

除此之外,您可能需要不同的文件权限。这是一个有用的站点,描述了有关文件权限的大量信息。

于 2009-06-23T22:59:27.750 回答